《物联网框架ServerSuperIO教程》-21.终端控制传感器或设备,形成回路控制。附:demo源代码

简介: 21.1     概述      ServerSuperIO以前所做的工作逐步为形成回路控制或级联控制打下基础,例如:服务连接器和设备驱动连接器的开发与应用。总之,是通过多种形式下发命令控制设备(驱动)或传感器,云端控制站点或监测点的传感器、App或者其他终端控制传感器、根据传感器的采集数据控制另一个传感器等。

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

 

备注:将来我们的大数据平台,也可以通这种模式下发控制命令到站点。

 


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.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 版本发布

 

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
29天前
|
消息中间件 网络协议 物联网
MQTT常见问题之物联网设备端申请动态注册时MQTT服务不可用如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
2月前
|
监控 安全 物联网
Java基于物联网技术的智慧工地解决方案源代码
应用先进的大数据、物联网、云计算等数字化技术,融合施工运营管理规范和技术标准,建构支撑施工和运营的一体化平台是投资、施工和运营单位能力建设的关键。应用企业架构、设计思维和软件工程方法,深入分析施工和运营技术特性与管理体系,研究开发基于大数据技术的智慧工地信息一体化平台,智慧工地管理平台是依托物联网、互联网建立的大数据管理平台,是一种全新的管理模式,能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。
85 2
|
2月前
|
传感器 存储 监控
【物联网】液滴即信息:雨滴探测传感器实验解析降雨的密码
【物联网】液滴即信息:雨滴探测传感器实验解析降雨的密码
55 0
|
3月前
|
传感器 监控 安全
无线传感器网络与物联网的融合:未来智慧生活的关键
在信息技术不断发展的时代,无线传感器网络和物联网技术正成为推动智能化进程的重要支撑。本文将介绍无线传感器网络和物联网的基本概念,并探讨了它们融合应用在各个领域的前景和意义。从智能家居、智慧城市到工业制造,无线传感器网络与物联网的结合正引领着我们走向更智慧、便捷的未来。
132 0
|
22天前
|
JSON 缓存 物联网
推荐一款go语言的开源物联网框架-opengw
推荐一款go语言的开源物联网框架-opengw
33 4
|
1月前
|
监控 安全 数据挖掘
物联网平台中如何快速检测设备异常
物联网平台中如何快速检测设备异常
29 0
|
1月前
|
存储 监控 安全
Java基于物联网技术的智慧工地云管理平台源码 依托丰富的设备接口标准库,快速接入工地现场各类型设备
围绕施工安全、质量管理主线,通过物联感知设备全周期、全覆盖实时监测,将管理动作前置,实现从事后被动补救到事前主动预防的转变。例如塔吊运行监测,超重预警,升降机、高支模等机械设备危险监控等,通过安全关键指标设定,全面掌握现场安全情况,防患于未然。
148 5
|
1月前
|
XML JSON 网络协议
【开源视频联动物联网平台】设备接入
【开源视频联动物联网平台】设备接入
27 2
|
1月前
|
存储 运维 网络协议
【开源物联网平台】物联网设备上云提供开箱即用接入SDK
IOTDeviceSDK是物联网平台提供的设备端软件开发工具包,可简化开发过程,实现设备快速接入各大物联网平台。设备厂商获取SDK后,根据需要选择相应功能进行移植,即可快速集成IOTDeviceSDK,实现设备的接入。
118 0
|
1月前
|
安全 搜索推荐 物联网
物联网设备的OTA基本原理
物联网设备的OTA基本原理
39 1

相关产品

  • 物联网平台