驱动框架
常规工控软件中,驱动为最底层的逻辑,与硬件直接进行通信。各家设计不同,我只阐述我们软件平台的驱动框架,也许可给读者一点灵感。
一般情况下,这三种通信方式足够了。无论是对于CVD镀膜设备,还是匀胶显影等机台,MFC可能走串口,机器人可能走网口,IO模块可能走赫优讯板卡,台达板卡,倍福板卡等等,但都是走PCI卡槽。
通信类型举例
串口(ModBus RTU):
根据ModBus RTU协议构建发送命令。根据ModBus RTU协议解析返回命令。构建函数进行CRC计算和校验。根据协议中结束符来对命令进行操作和检查。
如:从机地址为2,保持寄存器从1开始,读取连续三个寄存器的内容。
发:
收:
网口(自定义协议):
自定义协议的难易程度不好说,完全根据硬件厂家的定义来说。有的厂家写的通信协议看起来晦涩难懂,有的厂家则是通俗好理解。
网口的设计与串口相同
根据协议构建发送命令。根据协议解析返回命令。构建函数进行CRC计算和校验。根据协议中结束符来对命令进行操作和检查。
如:读取某Load Port的版本信息
发:GVER+回车换行
收:GVER:info+回车换行(其中info为版本信息,即用户想要获取的部分)
PCI
对于PCI主站卡来说,一般情况下,厂家都会有封装好的函数对主站卡进行设置,读取和写入。设计者只需要根据其函数说明和Demo来进行设计开发即可。其大概思路:
创建一个线程来对主站卡的输入模块进行轮询获取。创建一个线程来对主站卡的输出模块的输入部分进行轮询获取。创建一个线程来相应上位机写操作的要求,并对输出模块进行写入操作。从主站卡读取的信息存放于缓存区,上位机读取时直接从缓存区读。上位机进行写操作时,即刻调用写函数,以保证写的及时性。线程的轮询时间要小于主站卡对从站信号的采集周期。读写要有互斥锁。(其实串口和网口也要有读写锁,只不过可以放到更上一层的逻辑中,比较灵活,看个人设计)
Windows下的串口与网口主要通信函数
串口:
网口