在开发Modbus程序的过程中,也可以发现经常需要使用诸如Modbus Poll和Modbus Slave等辅助调试工具,
用于验证MODBUS通讯消息是否正确。但是,Modbus Poll和Modbus Slave都属于共享软件,
价格都在百美元左右,在未购买的情况下有时间或功能限制,怎么办呢?
其实,我们完全可以开发自己的MODBUS辅助调试工具。
那么先定一个小目标,开发一个简化版的Modbus Poll,能够方便调试MODBUS通讯,
支持RTU模式和TCP模式,支持以下最常用MODBUS功能码,如:
² 01: Read coil status 读线圈状态
² 02: Read input status 读输入状态
² 03: Read holding register读保持寄存器
² 04: Read input registers 读输入寄存器
² 05: Force single coil 强制单线圈
² 06: Preset single register 预置单(保持)寄存器
² 15: Force multiple coils 强制写多线圈
² 16: Preset multiple registers 预置写多个(保持)寄存器
RTU模式下,支持设置串口参数,如串口号、波特率、数据位、停止位、校验位等;TCP模式下,支持设置IP地址和端口号。
另外,如果采用图形化界面,则将花较大的篇幅过多关注于GUI部分的代码编写,
为了不影响关注重点,这里采用命令行方式开发,假设程序命名为modpoll.exe,命令行设定规则如下:
modpoll.exe [--debug] [-m {rtu|tcp}] [-a
[-r
[{rtu-params|tcp-params}] serialport|host [
命令行各参数的意义如下:
l [--debug]:设置为debug模式,在debug模式下,将以十六进制方式打印通信数据。
l [-m {rtu|tcp}]:选择RTU或TCP模式,如-mrtu,-mtcp等。
l [-a
l [-c
l [-r
l [-t
l [-o
l [{rtu-params|tcp-params}]:设置串口或者TCP配置参数:
RTU模式下,包括
b
d{7|8}
s{1|2}
p{none|even|odd}=even 校验位,缺省默认为even偶校验
TCP模式下,为p
l serialport|host:设置串口号或者IP地址,如COM1, COM2 ..或127.0.0.1等。
l [
具体使用方法举例如下:
ü 写数据(TCP方式):modpoll --debug -mtcp -t0x10 -r0 -p1502 127.0.0.1 0x01 0x02 0x03
ü 写数据(RTU方式):modpoll --debug -mrtu -t0x06 -r10 -b19200 COM3 0x33
ü 读数据(TCP方式):modpoll --debug -mtcp -t0x03 -r0 -c3 -p1502 127.0.0.1
ü 读数据(RTU方式):modpoll --debug -mrtu -t0x03 -r0 -c3 -b19200 COM3
至此,软件功能需求基本分析完毕,下面开始具体开发过程。
待续。。。