刘心红 郭福田
摘 要:在工业测控相关的教学实践课程中,常常涉及上位机与智能仪器设备通信问题,而智能仪器仪表广泛采用Modbus通信协议。鉴于工业用Modbus协议的设备价格昂贵,实验过程复杂,本文开发了用于实验的ModbusASCII仿真器,实现了ModbusASCII通信协议。
关键词:通信协议;上位机;ModbusASCII;仿真
中图分类号:TP2 文献标识码:B
引言
在工业测控相关的教学实践课程中,常常购买大量昂贵的工业测控智能仪器、仪表和实验台,硬件设备维护工作量巨大。工业测控课程主要是通过计算机或PLC等上位机对测控仪器仪表(下位机)发送控制命令并从其采集数据实现测量与控制,主要涉及双方的通信问题。由于智能仪器仪表都是用在工业控制系统中的,其功能强、可靠性高,价格昂贵,用于教学操作复杂,也过于奢侈浪费。为了降低测控实验教学成本,本文开发了一个ModbusASCII仿真器,可构成虚拟的测控系统,用于学习编写、运行及调试计算机测控程序,进行测控实验。这样,充分利用学校的计算机资源,减少了智能仪器仪表的费用和维护工作量,同时也可为学生提供了形象直观的实验过程。
1 ModbusASCII通信协议
Modbus协议已经成为工业领域通信协议的业界标准,是智能仪器仪表之间常用的通信方式。Modbus协议支持传统的RS-232、RS-422、RS-485和以太网设备,有ASCII、RTU和TCP三种通信格式,其标准性和多样性非常适合作为测控软件的教学内容。其中ModbusASCII通信数据格式比较简单,使用ASCII即字符串格式,字符传输间隔要求不高,小于1秒就行,数据串可读性强,易于实现。本文在分析了ModbusASCII通信格式的基礎上实现了相应的软件仿真器。
Modbus 通信协议通常用于RS-485工业总线上,采用一主多从的通信方式,由于从机多,需要为每一个从机分配一个地址,主从之间采用异步传输方式,1位起始位,8位数据位,可不用奇偶校验位,可采用1位停止位。
本文以ModbusASCII的2个常用功能03和06进行说明。03功能为读取一个或多个寄存器的数据;06功能把1个16位的数据写入某一寄存器。主机通过03和06号功能对从机的寄存器操作来读写其中任意存储器中的数据,实现主从机的远程测控。
以ModbusASCII的03功能为例(其它功能类似),其通信格式如下“:AA 03 XX XX YY YY LRC CR LF”,通信数据字符串可分为由2个16进制数构成的1个字节形式的2个字符对,连在一起构成命令或响应数据串。这里,“:”为数据串的起始位,AA(01到FF之间)为从机地址,03即功能码,XXXX为起始寄存器号,YYYY为读取寄存器数量,LRC为纵向校验码,由前面的2位数对求和取补得到,以检测数据串传输是否有误。CRLF为回车和换行符号,表示数据串结束。
2 ModbusASCII仿真器设计
ModbusASCII下位机仿真仿真器的设计思想是程序运行后处于字符串接收状态,当从串行口收到命令串后,在接收事件中处理,根据命令要求,将需要的寄存器值构成应答串。
为了在VB中实现串行通信[1],仿真器设计中采用了微软的MSCOMM控件,其属性设置为:CommPort=3,即仿真器连接在串口3上;Rthreshold=1,即事件接收方式;InputMode=0为字符串收发方式,对应ModbusASCII的数据串格式;Settings=”9600,n,8,1”,即通信波特率为9600,无校验,8位数据位,1个停止位。
Modbus协议是针对线圈和寄存器操作的,在仿真器程序中设计了10个16位寄存器,用户可通过键盘输入或显示主机发来的4位16进制数。主机可通过ModbusASCII命令串读取或改写这些寄存器中的值。仿真器运行时,处于等待被查询状态,随时接收上位机发来的命令串。在接收事件中对收到的命令串进行分析。首先检查地址,确定是否接收命令串;然后再对数据串进行纵向冗余校验,无错则进一步查看是被读命令还是写命令;如果是被读则发送需要的寄存器值,如果被写则按设定值改写相应寄存器的值。
3 仿真实验测试
为了在一台计算机上进行测试,首先建立实验测试环境,测试环境搭建需要3个软件,一个是本文设计的仿真器;一个是测控工程中常用的Modbus Poll测试软件;一个是模拟主从设备通过串口连接的虚拟串口软件[2]。
如下图所示,测试软件用03功能读取仿真器的10个寄存器数据,也可以通过双击测试软件中的数据改写仿真器端对应寄存器中的值。可以看到主从双方数据传输一致,仿真器测试成功。
测试成功后就可以将仿真器作为PLC、变频器或各种智能仪器仪表使用。上位机测控软件可以采用VB、VC或VC#等编程软件设计,方便地通过字符串命令读写仿真器中寄存器数据,实现工业测控上位机监控系统。
4 结束语
本文分析了ModbusASCII通信协议,开发了相应的实验教学用的仿真器,可代替ModbusASCII通信协议的工业智能仪器仪表,该仿真器已经用于工控软件设计等实验教学中,替代了工业测控教学中一大类字符串通信的实验设备。仿真器的使用提高了实验效率,并节约了大量的经费,同时去除了硬件设备的维护工作量。用仿真器的实验教学方法在测控课程学习方面具有一定的推广意义。
参考文献
[1] 曾丽丽,刘心红,赵忖,张昕编著. VB通信编程技术[M]. 北京:中国石化出版社. 2014.106-128
[2] 刘心红,郭福田,开关控制器仿真设计及其在教学中的应用[J].北京:知识-力量:2019,8(23),80-81
作者简介:刘心红(1966-),女(汉族),黑龙江大庆市人,工学学士,副教授,教师。现从事计算机软件应用方面的教学与研究工作。
基金项目:秦皇岛市科学技术研究与发展计划课题:Modbus通信协议仿真及其在教学中的应用(201902A006)