VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 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;
  }