当前位置: 澳门新濠3559 > 编程 > 正文

《连载 | 物联网框架ServerSuperIO教程》-

时间:2019-11-29 05:50来源:编程
1.C#跨平台物联网通信框架ServerSuperIO(SSIO)介绍 《连载 |物联网框架ServerSuperIO教程》1.4种简报格局机制。 《连载 |物联网框架ServerSuperIO教程》2.劳务实例的安顿参数表明 《连载 | 物联

1.C#跨平台物联网通信框架ServerSuperIO(SSIO)介绍

《连载 | 物联网框架ServerSuperIO教程》1.4种简报格局机制。

《连载 | 物联网框架ServerSuperIO教程》2.劳务实例的安顿参数表明

《连载 | 物联网框架ServerSuperIO教程》- 3.装置驱动介绍

《连载 | 物联网框架ServerSuperIO教程》-4.如开垦意气风发套设备驱动,同有时间扶助串口和互连网通信。

《连载 | 物联网框架ServerSuperIO教程》- 5.轮询通讯格局开辟及注意事项。

 

目       录

  1. 并发通讯情势开荒及注意事项... 2

6.1           概述... 2

6.2           通讯机制表达... 2

6.3           设备驱动开辟注意事项... 3

6.3.1    实时发送数据... 3

6.3.2    优头阵送别的数据... 3

6.3.3    怎么着抉择IO通道发送数据... 4

6.3.4    怎么样以DeviceCode分配数据... 4

6.4           宿主程序服务实例配置注意事项... 5

6.5           并发格局运作效果... 6

 

6. 并发通信情势开辟及注意事项《连载 | 物联网框架ServerSuperIO教程》-。 

6.1    概述

     并发通信形式只好用于互联网通信设备,主若是增MediaTek讯的现身技能,聚焦发送恳求数据,异步选拔重回数据。集中发送哀告数据的间隔时间能够设置;异步选拔重临数据涉嫌到怎样分配数据到对应的装备驱动的标题,主借使通过两种方法:IP地址的不二等秘书技和设施Code的方式,前面二个适用于设备终端是定点IP地址的景观,前者适用于设备终端是动态IP的图景,比方:DTU、GP冠道S、3G/4G等有线通信形式。

     并发通信情势本质上仍旧呼叫应答的电视发表方式,与轮询通信情势相仿,但是比轮询通信方式的征集数据越来越高速。

6.2    通讯机制表达

     互联网通信的情形下,轮询形式明显作用极低,那么能够行使并发形式。并发通信情势是汇聚发送给全体器具须要指令,框架是应用循环同步格局发送恳求命令给每一种IO通道对应的配备,当然也可以应用相互影响异步情势集中发送央浼命令。硬件设施选拔到指令后张开校验,校验成功后回去对应指令的数据,通信平台异步监听到数码音信后,进行收纳操作,然后再开展数据的分发、管理等。

     那么这里就关乎到IO通道采用到的多少是异步选用的,怎么着才干和配备驱动相称上(把多少分发到设备驱动上),那是能过DeviceCode和DeviceIP三种办法来完毕的。DeviceCode能够是设备地址恐怕设备编码,DeviceIP是刚开始阶段安装好的参数,必要终端设备的IP地址是平素的。

     通信结构如下图:

`澳门新濠3559 1

6.3    设备驱动开拓注意事项

6.3.1    实时发送数据

     ServerSuperIO框架会轮询调节全部设施,以呼叫应答的章程向设备发送哀告实时数据命令,对于同叁个设施的伸手实时数据命令平时相对固化。在调治某一切实设备驱动的时候,会调用固定的调用IRunDevice驱动接口的GetConstantCommand函数,以获得伏乞实时数据的指令。代码如下:

       public override byte[] GetConstantCommand()
        {
            byte[] data = this.Protocol.DriverPackage<String>("0", "61", null);
            string hexs = BinaryUtil.ByteToHex(data);
            OnDeviceRuningLog("发送>>"+hexs);
            return data;
        }

     this.Protocol.DriverPackage驱动调用61发令得到要发送的下令,并赶回byte[]数组,ServerSuperIO获得数据后会自动通过IO接口下发命令数据。要是回到null类型,系统不进行下发操作。

6.3.2    优首发送其余数据

对此叁个装置相当小概独有一个读实时数据的下令,大概还留存任何命令实行人机联作,举个例子:读参数、实时校准等,此时就必要进行优先级调治发送数据音信。能够因而二种方法让ServerSuperIO框架优先调整该设备驱动。

  1. 把命令扩充发送数据缓存中,框架从缓存中获得数量后会自动删除,代码如下:

    this.Protocol.SendCache.Add("读参数",readParaBytes);

      2.装置设备的预先等第属性,代码如下:

this.DevicePriority=DevicePriority.Priority;

6.3.3    如何接收IO通道发送数据

     集中发送数据时,涉及到哪边境海关联设备驱动与IO通道,框架会以DeviceParameter.NET.RemoteIP设置的终点IP参数进行抉择IO通道发送数据。然而风姿罗曼蒂克旦终端设备是动态IP地址的话,那么RemoteIP参数也应有是改正的。这时候就须求安装服务实例是以DeviceCode的秘技分布数据到器具驱动,终端设备首发送简单的验证数据,保险发送的DeviceCode与器械驱动的相对应,设备驱动选用到表明数据后须求保留临时的RemoteIP新闻,那样保险在发送数据的时候参数精确找到要伏乞数据的IO通道到顶点设备。

     比方上边代码:

public override void Communicate(ServerSuperIO.Communicate.IRequestInfo info)
{
            this.DeviceParameter.NET.RemoteIP = info.Channel.Key;
            this.DeviceParameter.Save(this.DeviceParameter);
            ……
}

6.3.4    怎么着以DeviceCode分配数据

     假如服务实例设置以DeliveryMode.DeviceCode方式分配数据,那么就必要在报纸发表合同接口里达成过滤DeviceCode编码的接口。

     比方下边包车型的士代码:

  internal class DeviceProtocol:ProtocolDriver
    {
        public override string GetCode(byte[] data)
        {
            byte[] head = new byte[] {0x55, 0xaa};
            int codeIndex = data.Mark(0, data.Length, head);
            if (codeIndex == -1)
            {
                return String.Empty;
            }
            else
            {
                return data[codeIndex + head.Length].ToString();
            }
        }
}

6.4    宿主程序服务实例配置注意事项

     在宿主程序中开创服务实例的时候,必要把劳务实例的布署参数设置为现身通信形式,并运营服务实例,把实例化的配备驱动增至该服务实例中。代码如下:

static void Main(string[] args)
{
            IServer server = new ServerFactory().CreateServer(new ServerConfig()
            {
                ServerName = "服务1",
                ComReadTimeout = 1000,
                ComWriteTimeout = 1000,
                NetReceiveTimeout = 1000,
                NetSendTimeout = 1000,
                ControlMode = ControlMode.Parallel,
                SocketMode = SocketMode.Tcp,
                StartReceiveDataFliter = false,
                ClearSocketSession = false,
                StartCheckPackageLength = false,
                CheckSameSocketSession = false,
                DeliveryMode = DeliveryMode.DeviceCode,
                ParallelInterval = 1000
            });
            server.AddDeviceCompleted += server_AddDeviceCompleted;
            server.DeleteDeviceCompleted += server_DeleteDeviceCompleted;
            server.Start();

            string devCode = "0";
            DeviceDriver dev1 = new DeviceDriver();
            dev1.DeviceParameter.DeviceName = "设备驱动"+ devCode.ToString();
            dev1.DeviceParameter.DeviceAddr = int.Parse(devCode);
            dev1.DeviceParameter.DeviceCode = devCode.ToString();
            dev1.DeviceParameter.DeviceID = devCode.ToString();
            dev1.DeviceDynamic.DeviceID = devCode.ToString();
            dev1.DeviceParameter.NET.RemoteIP = "127.0.0.1";
            dev1.DeviceParameter.NET.RemotePort = 9600;
            dev1.CommunicateType = CommunicateType.NET;
            dev1.Initialize(devCode.ToString());
            server.AddDevice(dev1);

            devCode = "1";
            DeviceDriver dev2 = new DeviceDriver();
            dev2.DeviceParameter.DeviceName = "设备驱动" + devCode.ToString();
            dev2.DeviceParameter.DeviceAddr = int.Parse(devCode);
            dev2.DeviceParameter.DeviceCode = devCode.ToString();
            dev2.DeviceParameter.DeviceID = devCode.ToString();
            dev2.DeviceDynamic.DeviceID = devCode.ToString();
            dev2.DeviceParameter.NET.RemoteIP = "192.168.1.102";
            dev2.DeviceParameter.NET.RemotePort = 9600;
            dev2.CommunicateType = CommunicateType.NET;
            dev2.Initialize(devCode.ToString());
            server.AddDevice(dev2);

            while ("exit" == Console.ReadLine())
            {
                server.Stop();
            }
}

    ControlMode = ControlMode. Parallel代码是设置服务实例调治设施为并发调控格局;以DeliveryMode = DeliveryMode.DeviceCode格局进行多少分发,当然作者明天参考的是因定的极点IP。

6.5    并发格局运作效果

1.图片

 澳门新濠3559 2

2.视频

 


 

1.[连载]《C#简报(串口和互连网)框架的设计与达成》

2.[开源]C#跨平台物联网通信框架ServerSuperIO(SSIO)介绍

2.运用SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)营造系统的总体方案

3.C#工业物联网和集成系统设计方案的技艺门路(数据源、数据搜罗、数据上传与摄取、ActiveMQ、Mongodb、WebApi、手提式有线电话机App)

5.ServerSuperIO开源地址:

物联网&集成才具(.NET卡塔尔(قطر‎ QQ群澳门新濠3559,54256083 

编辑:编程 本文来源:《连载 | 物联网框架ServerSuperIO教程》-

关键词: