通讯的总体机制采用呼叫应答方式,就是上位机软件主动发送请求数据命令,下位机终端接收到命令后,并校验成功,返回相应的数据。
(1)串口通讯机制包括:轮询模式。
串口总线涉及到一对一的通讯、一对多的通讯,为了避免总线上数据的冲突问题以及环境干扰的问题,在保障通讯稳定性的前提下,只采用轮询通讯机制。一个设备发送、接收完成数据后,才进行下一个设备的通讯。但是这种通讯效率比较低,如果要提高通讯效率,可以增加串口服务器,在SuperIO平台上实现一个串口对应多台现场设备进行通讯,也就是把现场的所有设备平衡负载到不同的串口上。
(2)网络通讯机制包括:轮询模式、并发模式和自控模式。
轮询模式与串口通讯机制中的轮询模式相同,但是对于网络通讯时,这个操作模式的效率是非常低,不能体现网络通讯的优势。基于这样的考虑,在轮询模式的基础上,增加了并发模式和自控模式。
并发模式,由SuperIO的内部来协调实现,通过调用IRunDevice设备接口的GetSendBytes函数获得发送的命令包,集中发送所有设备的数据。接收数据部分采用异步监听方式,接收相应设备的数据。并发模式的通讯周期由SuperIO平台统一进行调度,不能自主控制请求数据的周期,在此基础上增加了自控模式。
自控模式,二次开发者在开发设备驱动时,可以定时通过OnSendDataHandler发送请求数据命令,接收数据部分采用异步监听方式,接收相应设备的数据,做到即时请求即时响应。
另外一种情况,现场硬件终端会主动发送状态字数据给上位机软件,这时候就需要能够主动监听接收数据事件,这是轮询模式做不到的。遇到这类情况,建议使用自控模式进行通讯。
SuperIO包括两大部分:通讯部分和设备驱动部分。
(1) 通讯部分如何与设备驱动协调工作?两部分主要是通过IRunDevice接口实现两部分之间的协调工作,线程、异步、同步等机制由SuperIO内部来完成。
(2) 通讯部分接收到数据后如何传输到相应的设备上?轮询模式不存在这个问题,主要涉及到并发模式和自控模式,因为这两部分采用的是异步监听数据的方式。解决这个问题有两种方式:第一种、通过接收协议驱动获得设备ID来识别相应的设备。第二种、通过设备设置的ip地址来识别相应的设备。现在的SuperIO平台采用的是第二种方式。
(3) 并发模式和自控模式如何实现通讯中断状态?在链路不通的情况下,发送请求命令,没有返回相应的数据,也不过触发运行设备的接口,所以通讯状态也不会改变,也不会做出任何反应。解决这个问题的方式是,发送请求数据命令超过3次,每次都没有返回相应的数据,就会触发运行设备接口,来完成运行设备的整个流程。
作者QQ:504547114
交流QQ群:54256083
源文章地址:http://www.bmpj.net/index.php?m=article&f=view&id=8
新闻热点
疑难解答