物联网框架ServerSuperIO教程葡萄娱乐场

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

《连载 | 物联网框架ServerSuperIO教程》- 6.并发通讯格局开发及注意事项,物联网框架

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

 

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

6. 并发通信格局开发及注意事项 

《连载 |
物联网框架ServerSuperIO教程》2.劳动实例的配备参数表达

6.1    概述

    
并发通信格局只可以用来网络通信设备,紧如若增加通信的出现能力,集中发送请求数据,异步接收重回数据。集中发送请求数据的间隔时间能够安装;异步接收再次回到数据涉嫌到哪边分配数据到相应的设施驱动的标题,重如若经过三种办法:IP地址的方法和装置Code的方法,前者适用于设备终端是稳定IP地址的动静,后者适用于设备终端是动态IP的气象,例如:DTU、GPTucsonS、3G/4G等有线通讯方式。

    
并发通讯情势本质上依然呼叫应答的报Doug局,与轮询通信方式类似,可是比轮询通信方式的采集数据更高效。

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

6.2    通信机制表明

    
互联网通信的事态下,轮询格局显明效能比较低,那么可以采纳并发格局。并发通信格局是汇总发送给全体设备请求指令,框架是应用循环同步方式发送请求命令给各种IO通道对应的设备,当然也可以使用互动异步方式集中发送请求命令。硬件配备接收到指令后展开校验,校验成功后回去对应指令的数据,通信平台异步监听到数码音讯后,进行吸收操作,然后再开展数量的散发、处理等。

    
那么那里就关系到IO通道接收到的数额是异步接收的,怎样才能和装置驱动匹配上(把多少分发到设备驱动上),那是能过DeviceCode和DeviceIP两种艺术来促成的。DeviceCode可以是设备地址或许设备编码,DeviceIP是预先安装好的参数,必要终端设备的IP地址是原则性的。

     通信结构如下图:

`葡萄娱乐场 1

《连载 |
物联网框架ServerSuperIO教程》-4.如开发一套装置驱动,同时帮助串口和互联网通信。

6.3    设备驱动开发注意事项

《连载 | 物联网框架ServerSuperIO教程》-
5.轮询通信方式开发及注意事项。

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框架优先调度该设施驱动。

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);
            ……
}
  1. 并发通讯方式开发及注意事项… 2

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.1           概述… 2

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.2           通信机制表明… 2

6.5    并发格局运作效果

1.图片

 葡萄娱乐场 2

2.视频

 


 

1.[连载]《C#通信(串口和网络)框架的规划与落到实处》

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

2.利用SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)创设系统的完好方案

3.C#工业物联网和集成系统消除方案的技巧途径(数据源、数据收集、数据上传与接收、ActiveMQ、Mongodb、WebApi、手机App)

5.ServerSuperIO开源地址:https://github.com/wxzz/ServerSuperIO

物联网&集成技术(.NET) QQ群54256083 

http://www.bkjia.com/C\_jc/1171610.htmlwww.bkjia.comtruehttp://www.bkjia.com/C\_jc/1171610.htmlTechArticle《连载 | 物联网框架ServerSuperIO教程》-
6.并发通信情势开发及注意事项,物联网框架
1.C#跨平台物联网通信框架ServerSuperIO(SSIO)介绍 《连载…

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. 并发通讯形式开发及注意事项 

6.1    概述

    
并发通信格局只好用于互联网通讯设备,紧假使提MTK讯的出现能力,集中发送请求数据,异步接收再次来到数据。集中发送请求数据的间隔时间可以设置;异步接收重回数据涉嫌到怎么样分配数据到对应的装置驱动的难题,紧假若透过三种艺术:IP地址的章程和装备Code的措施,前者适用于设备终端是永恒IP地址的动静,后者适用于设备终端是动态IP的气象,例如:DTU、GP奥迪Q3S、3G/4G等有线通信格局。

    
并发通信格局本质上如故呼叫应答的简报格局,与轮询通信格局类似,可是比轮询通信格局的募集数据更敏捷。

6.2    通信机制表达

    
互联网通信的情状下,轮询形式显小说用相比较低,那么能够采取并发方式。并发通信情势是汇聚发送给全部装备请求指令,框架是行使循环同步格局发送请求命令给各类IO通道对应的装置,当然也得以运用互动异步方式集中发送请求命令。硬件装备接收到指令后开展校验,校验成功后赶回对应指令的多少,通信平台异步监听到数量消息后,举办吸收操作,然后再开展数据的散发、处理等。

    
那么那里就提到到IO通道接收到的数码是异步接收的,怎么样才能和装备驱动匹配上(把数量分发到装备驱动上),那是能过DeviceCode和DeviceIP三种艺术来兑现的。DeviceCode可以是装备地址大概设备编码,DeviceIP是先行安装好的参数,须求终端设备的IP地址是一定的。

     通信结构如下图:

`葡萄娱乐场 3

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    优头阵送其余数据

对此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.图片

 葡萄娱乐场 4

2.视频

 


 

1.[连载]《C#简报(串口和互联网)框架的规划与落到实处》

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

2.接纳SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)营造系统的完好方案

3.C#工业物联网和集成系统消除方案的技能途径(数据源、数据收集、数据上传与吸收、ActiveMQ、Mongodb、WebApi、手机App)

5.ServerSuperIO开源地址:https://github.com/wxzz/ServerSuperIO

物联网&集成技术(.NET) QQ群54256083