首页 > Python基础教程 >
-
C#教程之自控通讯模式开发及注意事项
自控通讯模式开发及注意事项
7.1 概述
自控通讯模式与并发通讯模式类似,唯一的区别是发送请求数据命令,自控通讯模式可以使用定时器,定时发送请求数据命令,不再像并发通讯模式集中发送。
在工业物联网建设中,设备不同、协议不同、场景不同,对于某些不同的设备定时采集数据的频率也不一样,过于高频的数据采集也是对资源的一种浪费,所以就供给二次开发者在开发设备驱动的时候更自主的控制模式。
7.2 通讯机制说明
只有网络通讯时可以使用这种控制模式。自控通讯模式与并发通讯模式类似,区别在于发送指令操作交给设备驱动本身进行控制,或者说交给二次开发者,二次开发者可以通过时钟定时用事件驱动的方式发送指令数据。硬件设 备接收到指令后进行校验,校验成功后返回对应指令的数据,通讯平台异步监听到数据信息后,进行接收操作,然后再进行数据的分发、处理等。
自控通讯模式可以为二次开发者提供精确的定时请求实时数据机制,使通讯机制更灵活、自主,如果多个设备驱动共享使用同一个IO通道的话,时间控制会有偏差。
同样涉及到数据的分发,和并发模式一样。通讯结构如下图:
7.3 设备驱动开发注意事项
7.3.1 实时发送数据
ServerSuperIO框架的IRunDevice驱动接口有一个GetSendBytes函数,此函数接口会同时协调调用GetConstantCommand固定请求数据接口和SendCache发送数据的缓存器,并设置设备的优先级别进行调度。
可以继承以前写的设备驱动,在此基础上增加定时发送数据的代码。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public class DeviceSelfDriver:DeviceDriver { public DeviceSelfDriver() : base () { } public override void Initialize( string devid) { base .Initialize(devid); this .RunTimerInterval = 5000; this .IsRunTimer = true ; } public override void OnRunTimer() { byte [] data = this .GetSendBytes(); OnSendData(data); base .OnRunTimer(); } } |
7.3.2 发送固定实时请求数据命令
自控通讯模式定时发送请求数据命令,同样是以呼叫应答的方式向设备发送请求实时数据命令,对于同一个设备的请求实时数据命令一般相对固定。在调度某一具体设备驱动的时候,会调用固定的调用IRunDevice驱动接口的GetConstantCommand函数,以获得请求实时数据的命令。代码如下:
1
2
3
4
5
6
7
|
public override byte [] GetConstantCommand() { byte [] data = this .Protocol.DriverPackage<String>( "0" , "61" , null ); string hexs = BinaryUtil.ByteToHex(data); OnDeviceRuningLog( "发送>>" +hexs); return data; } |