汪韩韩,杨 辉,张 华,朱淑云
(1. 南昌大学 机器人研究所,南昌 330031;2. 华东交通大学 科研处,南昌 330013;3. 南昌大学 教务处,南昌330031;4. 南昌大学 科学技术学院,南昌 330031)
MODBUS RTU协议是莫迪康公司发明的一种广泛应用于自动化控制领域的工业通讯标准。协议规定,控制器之间通讯采用主从技术,即主机可对各从机寻址,发出广播信息,从机返回信息作为对查询的响应[1]。该协议支持RS-232、RS-422、RS-485和Ethernet等多种接口类型的通讯设备。而本文研究的是基于RS-485接口,采用MODBUS RTU通信协议,组态王作为主端,智能仪表为从端,进行相互握手、互相数据交换,并且利用KingView6.5开发平台对通讯过程进行实时监测和管理,从而完成整个通信系统的设计和实现。
控制器以RTU模式在MODBUS总线上通讯时,具体信息格式定义如表1所示。
MAC_ID:设备地址,组态王对智能仪表从端的访问地址,定义为01,如若是多机通讯,可以依次叠加02,03…;
Function ID:功能代码,组态王对智能仪表从端的命令操作;
Ptr Addr:待查询数据起始地址,2字节,首字节为高地址;
Ptr Numb:待查询数据数量,2字节,从起始地址开始,地址依次加一;
CRC:循环冗余校验码,2字节,从MAC_ID至Ptr numb计算CRC值,如计算值与实际值相同则传送正确;若不相同证明错误,丢弃该帧,重新检测;
T1-T2-T3-T4:静止时间,当发送或接收数据时需延时>3.5个字符;
除主机查询模式下的数据格式外,还有主机写数据、从机应答等数据格式,具体见MODBUS协议标准,这里不再重复叙述。
基本通讯参数配置为:波特率9600bps,数据位8位,无奇偶校验,停止位1位,通讯方式RS485总线传输模式,通讯超时时间1000ms。
从站设备COM配置可按配置向导依次进行。选择驱动——莫迪康MODBUS RTU(COM),定义逻辑名称——智能仪表01,选择串行口——COM1,选择设备地址——1.0(1为设备地址,不打包),尝试恢复时间与最长恢复时间——30s和24h。如需配置多台智能仪表,方法类似[2]。
配置完设备端口之后,则需要在数据词典定义变量,如表2所示。
表1 数据传输格式
表2 数据词典用户变量
智能仪表作为从机端,硬件配置为485总线接口,软件一般使用固化好的通信协议或自主开发编程设计,这里给出示例。以Stc89c52为例,利用串行中断进行MODBUS RTU通讯设计,其中T2计数器用于产生9600bps波特率,22M晶振下,初始值设置为TL2=0xCC,TH2=0xCD,中断服务子程序如图1所示。
图1 发送接收串行中断服务子程序
单片机应答程序是主程序Main()函数中的,详细流程图如图2所示。为满足通讯需求,我们需要分析串口接收的命令,对不同的功能指令做出相应的答复。首先,对接收命令中数据依次进行校验,包括地址码校验、功能码校验、CRC校验、地址范围校验等,若出错则给出相应的出错指令。其次,根据功能码把与单片机相对应的地址、数据等一一写入待发送数组中,具体发送格式依功能码的不同而不同,详细参考《MODBUS中文协议手册》。最后,启动发送函数BeginSend(),将发送数据发送至发送接收缓存区[3]。
应答流程图中只给出了1、3、5、16四种功能码指令,即足以满足实现本文对组态王中离散变量和模拟变量读写操作要求,如需添加强制多个线圈、预置单个寄存器等功能指令,可进行额外拓展,见图中省略部分。
为满足实时调试和监控相关的参数与状态,开发相应的组态王通讯调试界面,如图3所示。其中1号参变量设定为:DI1~DI8分别用两组黄、绿、红、蓝的按键显示输入状态10101100,当为1时按键按下,当为0时按键弹起;DO1~DO8分别用两组黄、绿、红、蓝的LED灯表示输出状态01010011,当为1时灯亮,当为0时灯灭;AI1~AI8分别显示输入寄存器值11,22,33,444,555,666,7777,8888;AO1~AO8则分别表示预置寄存器值8888,7777, 666, 555,444,33,22,11。另外,2号参变量设置:DI1~DI8分别读入00111000;DO1~DO8分别写出11000111;AI1~AI8分别读入6,216,56,7676,356,46,1986,66;AO1~AO8分别写出66,1986,46,356,7676,56,216,6。
从通信结果来看,效果良好,能够实时稳定地读和写数据。针对测试过程中遇到的问题,给出了解决方案,主要有以下两点:1)寄存器数值超出上限0~65535。解决方案——设置智能仪表中变量初始值和原始值,并将实际数据缩小至一定倍数,然后在组态王中将相应的参变量扩大适当的倍数即可。2)多机通讯测试时,部分监控参数错乱变化且无规律。由于在组态王中设置的各从机通讯参数中“采集频率”都是相同的,导致采集数据时出现了数据冲突,因此,设置不同的“采集频率”能够很好地解决以上问题。
在本文设计的组态王与智能仪表通信系统中,采用标准的MODBUS RTU数据传输格式,详细描述了通信参数配置,并给出了《组态王与单片机通信工程》平台的调试方案与测试结果。实验结果表明该方法简单有效、稳定可靠。
图2 单片机应答流程图
图3 组态王与2台单片机通信工程测试平台
[1] MODBUS Application Protocol Specification V1.1b [k].MODBUS-IDA,2006.
[2] 北京亚控科技发展有限公司.组态王6.5使用手册[Z].2010.
[3] 尤慧芳.MODBUS RTU单片机通信程序编写方法[J].工业控制计算机,2009,22(12):86-87.
[4] 胡雄峰,郑应霞.基于MODBUS-RTU通讯协议的组态王与TOP9500通讯[J].工业控制计算机,2010,23(3):9-10.
[5] 刘杰,王慧.组态王与单片机多机串口通信的设计[J].电子设计工程,2009,17(7):7-11.
[6] 吕国芳,唐海龙,李进.基于Modbus RTU的串口调试软件的实现[J].计算机技术与发展,2009,19(9):236-241.