《物联网框架ServerSuperIO教程》-21.终端控制传感器或设备,形成回路控制。附:demo源代码
21.1 概述
ServerSuperIO以前所做的工作逐步为形成回路控制或级联控制打下基础,例如:服务连接器和设备驱动连接器的开发与应用。总之,是通过多种形式下发命令控制设备(驱动)或传感器,云端控制站点或监测点的传感器、App或者其他终端控制传感器、根据传感器的采集数据控制另一个传感器等。
下面介绍云端、App或者其他终端如何控制传感器设备(传感器控制传感器类似,请参见:12.服务接口的开发,以及与云端双向交互)。根据通讯协议,结构化方案、不需要太多代码即可完成相应的功能。效果如下图:

21.2 结构示意图

控制端发起控制命令,用ServerSuperIO服务接口开发一个简单的代理服务,通过服务连接器IServiceConnector接口与设备驱动进行交互,设备驱动接收到控制命令后下发给设备或传感器,等待控制返回的确认消息,再原路返回给控制端。
21.3 通讯协议
有人问为什么不使用MQTT协议,那如何兼容不同设备和传感器的协议?以于中国现实情况,显然还不能达到统一标准的水平,在经济不好的情况下,企业也不可能投资替换掉原来的硬件设备。也不符合ServerSuperIO设计的原则,就是要搞协议无关性,任何标准或非标准的协议都可以集成进来。如果想过一条河,把桥修好、把索道搭好、把船摆好…具体怎么过河由你自己决定。
有人问ServerSuperIO都集成了什么协议?上面已经给出了答案,另外我想说的是没有任何一个框架可以包治百病。从相反的角度来考虑,如果像组态一样把任何协议都加进来,企业又想拿出来多少的价值来对等交换呢,所以协议驱动还是交给大家来自己写吧。
我们演示的协议如下图:

21.4 控制端
控制端包括很多种:云端向下级发送控制命令、App或Pc机软件连接服务发送控制命令等等。发送控制命令如下图:

21.5 代理服务(SSIO服务接口)
代理服务是通过ServerSuperIO的IService接口实现,在继承类中使用ServerSuperIO框架本身的单例模式开发代理服务,代码如下:
public override void StartService()
{
string devId = "ControlDeviceService";
Driver dev = new Driver();
dev.ReceiveRequestInfos += Dev_ReceiveRequestInfos;
dev.DeviceParameter.DeviceName = "控制设备驱动器";
dev.DeviceParameter.DeviceAddr = 0;
dev.DeviceParameter.DeviceID = devId;
dev.DeviceParameter.DeviceCode = "";
dev.DeviceDynamic.DeviceID = devId;
dev.DeviceParameter.NET.RemoteIP = "127.0.0.1";
dev.DeviceParameter.NET.RemotePort = 9600;
dev.DeviceParameter.NET.ControllerGroup = "LocalGroup";
dev.CommunicateType = CommunicateType.NET;
dev.Initialize(devId); IServer server = new ServerManager().CreateServer(new ServerConfig()
{
ServerName = "控制设备服务",
ListenPort=6670,
ComReadTimeout = 1000,
ComWriteTimeout = 1000,
NetReceiveTimeout = 1000,
NetSendTimeout = 1000,
ControlMode = ControlMode.Singleton,
SocketMode = SocketMode.Tcp,
StartReceiveDataFliter = false,
ClearSocketSession = false,
StartCheckPackageLength = false,
CheckSameSocketSession = false,
}); server.AddDeviceCompleted += server_AddDeviceCompleted;
server.DeleteDeviceCompleted += server_DeleteDeviceCompleted;
server.SocketConnected += server_SocketConnected;
server.SocketClosed += server_SocketClosed;
server.Start(); server.AddDevice(dev);
}
dev.ReceiveRequestInfos事件是控制驱动继承ServerSuperIO框架中RunDevice驱动类扩展的事件接口,ServerSuperIO单例模式接收到数据信息,如果符合协议标准会把数据信息反馈给驱动程序的Communicate接口,ReceiveRequestInfos事件把数据信息传递给代理服务订阅该事件的Dev_ReceiveRequestInfos函数。代码如下图:

代理服务中的Dev_ReceiveRequestInfos函数,通过服务连接器接口IServiceConnector,根据DeviceCode(addr)把信息传递给相应的设备驱动。代码如下图:

代理服务通过ServiceConnectorCallback和ServiceConnectorCallbackError函数接口接收设备驱动反馈的结果信息,如果中间出现异常会调用ServiceConnectorCallbackError,如果正常会调用ServiceConnectorCallback函数,ServiceConnectorCallback函数接口根据记录的命令与IO通道的对应关系,再把结果发送给控制端。ServiceConnectorCallback代码如下图:

在这里边有一个注意的地方,就是设备驱动在规定的时间内没有反馈控制命令的确认信息,也就是传感器没有反馈相应的信息。这种情况要增加一个定时检测服务,如果超时没有反馈信息,发送给控制端相应的消息。代码如下图:

21.6 设备驱动
这个设备驱动与传感器相对应,之间相互过行数据交互。设备驱动的RunServiceConnector接口负责接收代理服务Dev_ReceiveRequestInfos(OnServiceConnector)函数传递过来的命令信息。代码如下图:

有两点说明:1.接收到命令数据后可以通过OnSendData函数立即下发数据信息,以设置的IP查找相应的IO通道,适用于自控模式。2. 接收到命令数据后放到this.Protocol.SendCache协议缓存中,等待下发命令,适用于轮询、并发模式。
针对于返回的结果对象ServiceConnectorCallbackResult的isAsyn参数,如果为true,说明通过AsyncServiceConnectorCallback callback返回结果信息,也就是说要等待传感器返回确认信息,并且设备驱动接收后再反馈到代理服务;如果为false,说明会立即反馈到代理服务,适用于传递数据信息而不管与传感器是否交互成功。
可以在这个函数中把callback参数进行临时保存,等待传感器返回确认信息后在Communicate函数中触发异步回调到代理服务。代码如下图:

21.7 Demo说明
打开两个TestDevice程序,一个作为设备传感器,一个作为控制端,DeviceCode要以应;TestDeviceDriver是设备驱动,在服务实例中加载,我用的是自控模式,使用TestSelfMain项目;ControlDeviceService是代理服务,在TestSelfMain中加载。具体参见工程代码:http://pan.baidu.com/s/1c1ZZLOO。
备注:将来我们的大数据平台,也可以通这种模式下发控制命令到站点。
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.bmpj.net/thread-14-1-1.html
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍
《连载 | 物联网框架ServerSuperIO教程》1.4种通讯模式机制。
《连载 | 物联网框架ServerSuperIO教程》2.服务实例的配置参数说明
《连载 | 物联网框架ServerSuperIO教程》- 3.设备驱动介绍
《连载 | 物联网框架ServerSuperIO教程》-4.如开发一套设备驱动,同时支持串口和网络通讯。
《连载 | 物联网框架ServerSuperIO教程》- 5.轮询通讯模式开发及注意事项。
《连载 | 物联网框架ServerSuperIO教程》- 6.并发通讯模式开发及注意事项
《连载 | 物联网框架ServerSuperIO教程》- 7.自控通讯模式开发及注意事项
《连载 | 物联网框架ServerSuperIO教程》- 8.单例通讯模式开发及注意事项
《连载 | 物联网框架ServerSuperIO教程》- 9. 协议过滤器,解决一包多发、粘包、冗余数据
《连载 | 物联网框架ServerSuperIO教程》- 10.持续传输大块数据流的两种方式(如:文件)
《连载 | 物联网框架ServerSuperIO教程》- 11.实现设备(驱动)与设备(驱动)交互和级联控制。
《连载 | 物联网框架ServerSuperIO教程》- 12.服务接口的开发,以及与云端双向交互
《连载 | 物联网框架ServerSuperIO教程》- 13.自定义视图显示接口开发,满足不同的显示需求
《连载 | 物联网框架ServerSuperIO教程》- 14.配制工具介绍,以及设备驱动、视图驱动、服务实例的挂载
《连载 | 物联网框架ServerSuperIO教程》- 15.数据持久化接口的使用
《连载 | 物联网框架ServerSuperIO教程》- 16.OPC Server的使用步骤
《连载 | 物联网框架ServerSuperIO教程》- 17.支持实时数据库,高并发保存测点数据
《连载 | 物联网框架ServerSuperIO教程》- 18.集成OPC Client,及使用步骤
《连载 | 物联网框架ServerSuperIO教程》-19.设备驱动和OPC Client支持mysql、oracle、sqlite、sqlserver的持久化
《物联网框架ServerSuperIO教程》-20.网络通讯控制器分组,提高交互的负载平衡能力。v3.6.6 版本发布
《物联网框架ServerSuperIO教程》-21.终端控制传感器或设备,形成回路控制。附:demo源代码的更多相关文章
- 《连载 | 物联网框架ServerSuperIO教程》- 16.OPC Server的使用步骤。附:3.3 发布与版本更新说明。
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- 《连载 | 物联网框架ServerSuperIO教程》1.4种通讯模式机制。附小文:招.NET开发,结果他转JAVA了,一切都是为了生活
参考文章: 1.SuperIO通讯框架介绍,含通信本质 2.C#跨平台物联网通讯框架ServerSuperIO(SSIO) 一.感慨 上大学的时候,没有学过C#,花了5块钱在地坛书市买了一本教程,也就 ...
- 《物联网框架ServerSuperIO教程》-22.Web端对传感器实时监测与控制。附:v3.6.8版本,支持WebSocket
1.ServerSuperIO v3.6.8更新内容 1.1 增加WebSocket服务端功能,支持自控模式.并发模式.单例模式,不支持轮询模式1.2 接收数据缓存与现有的IO实例分离.1.3 优化代 ...
- 《连载 | 物联网框架ServerSuperIO教程》- 8.单例通讯模式开发及注意事项
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- 《连载 | 物联网框架ServerSuperIO教程》2.服务实例的配置参数说明
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制 一.综述 SuperIO(SIO)定位 ...
- 《连载 | 物联网框架ServerSuperIO教程》- 3.设备驱动介绍
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- 《连载 | 物联网框架ServerSuperIO教程》-4.如开发一套设备驱动,同时支持串口和网络通讯。附:将来支持Windows 10 IOT
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- 《连载 | 物联网框架ServerSuperIO教程》- 7.自控通讯模式开发及注意事项
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- 《连载 | 物联网框架ServerSuperIO教程》- 12.服务接口的开发,以及与云端双向交互
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
随机推荐
- 第一次在gitHub上传项目到git.oschina的方法
首先在Git@osChina创建一个项目仓库 1.创建sshKey公钥 ssh-keygen -t rsa -C "ty635725964@qq.com" 之后连续三个空格,默认无 ...
- .net应用程序中添加chm帮助文档打开显示此程序无法显示网页问题
在做.net大作业时添加了chm帮助文档结果在打开时显示“此程序无法显示网页问题”,但是把帮助文档拷到别的路径下却显示正常, 经过从网上查找,终于找到了答案: (1).chm文件的路径中不能含有“#” ...
- 清北Day 2
清北第二天,感受到了来自这个世界的不友善,大概把没听过不会的"名词"记录下来就已经一面了,然后被大佬说这都是最基础的东西,就很皮,那就趁别人练习字符串的题的时候,来写波博客了,倒不 ...
- [C#学习]0.发表之前想说的
在这里我将学习C#编程,首先我也只是一个初学者,只是为了以后的学习,并且方便复习,所以决定在这里记录总结一些知识,简单的写一个教程.所以在这里或许难免有一些错误,欢迎大家指出,一起进步. 在这里我使用 ...
- 简介vsftpd及搭建配置
一.简介 FTP(文件传输协议)全称是:Very Secure FTP Server. Vsftpd是linux类操作系统上运行的ftp服务器软件. vsftp提供三种登陆方式:1.匿名登录 2 ...
- <图论入门>邻接矩阵+邻接表
非本人允许请勿转载. 趁热打铁,学会了邻接表把这个总结一下,以及感谢大佬uncle-lu!!!(奶一波)祝早日进队! 首先,图论入门就得是非常基础的东西,先考虑怎么把这个图读进去. 给定一个无向图,如 ...
- 记录——excel导出lua工具(python实现)
项目需要一个从excel导出lua配置表的工具,之前的工具是主程写的,效率极差,i7 CPU 一次全部导出要花掉1个多小时.匪夷所思的是,这么渣的效率,居然用了整整一年.当 然,中途有人反映效率差,主 ...
- LNMP源码编译安装
思路:根据Linux系统以及公司网站系统的信息,选择合适的安装包进行安装 一.查看系统信息 # uname -a # 查看内核/操作系统/CPU信息 # ...
- 【WPF】获取电磁笔的压感
WPF 不仅支持触控,也支持笔的输入,比如现在比较高大上的电磁笔.便宜的板子一般不配备电磁笔,而是配电容笔,虽然也号称XXX级压感,但是效果自然不可与电磁笔相比. UIElement 类规范了UI元素 ...
- zabbix监控docker
[toc] 1.下载模版 然后把模版放到/usr/local/lib/zabbix/agent下 github地址内含监控模版 2.修改 zabbix-agentd 配置文件 vim /usr/loc ...