Modbus工具之Modbus Poll与Modbus Slave
Modbus Poll与Modbus Slave是两款我们在调试modbus时常用的两款第三方的调试工具。
Modbus通信包含串口(RTU,ASCLL)和网络(TCP/IP)三种协议。Modbus Poll与Modbus Slave支持三种协议,更好的帮助开发者测试Modbus主从设备
1. Modbus Poll
1.1. 界面主要功能介绍
菜单栏Connection -> Connection Setup 包含基础连接参数配置
- 连接方式(串口、TCP/IP)
- 端口号设置、波特率、数据位、校验位、停止位、连接模式选择(RTU、ASCLL)
- IP地址、IP端口
菜单栏Setup -> Read/Write Definition 包含Modbus协议设置
- 从机地址、功能码
- 查询地址、数据读取时间,寄存器起始地址、寄存器连续个数
菜单栏Display 可以调整寄存器数据显示方式
菜单栏Display -> Communication Traffic 用来监视/查看分析收发数据帧内容
主窗口 展示状态和寄存器回读结果
- Tx = 0: Err = 0: ID = 9: F = 03: SR = 1000ms(查询次数、错误次数、从机设备ID、功能码、扫描周期)
1.2. Modbus功能码
功能码(十进制) | 功能码(十六进制) | 功能名称 | 功能概述 |
---|---|---|---|
01 | 0x01 | Read Coils | 读取线圈(可读写布尔量,如继电器状态) |
02 | 0x02 | Read Discrete Inputs | 读取离散输入(只读布尔量,如传感器信号) |
03 | 0x03 | Read Holding Registers | 读取保持寄存器(可读写16位数据,如设备参数) |
04 | 0x04 | Read Input Registers | 读取输入寄存器(只读16位数据,如传感器模拟量) |
05 | 0x05 | Write Single Coil | 写入单个线圈(设置单个继电器开/关) |
06 | 0x06 | Write Single Register | 写入单个保持寄存器 |
15 | 0x0F | Write Multiple Coils | 写入多个线圈(批量设置继电器状态) |
16 | 0x10 | Write Multiple Registers | 写入多个保持寄存器(批量写入) |
22 | 0x16 | Mask Write Register | 对保持寄存器进行位掩码写入(按位与/或操作) |
23 | 0x17 | Read/Write Multiple Registers | 同时执行读取和写入多个寄存器的复合操作 |
24 | 0x18 | Read FIFO Queue | 读取FIFO(先进先出)队列中的数据(特殊设备使用) |
说明:
- Modbus TCP 和 RTU 的功能码相同,仅传输格式不同。
2. Modbus Slave
2.1. 界面主要功能介绍
菜单栏Setup -> Slave Definition 包含从机参数设置
其他的化界面基本功能和Modbus Poll差不多
3. Modbus Poll/Slave模拟通信
想要模拟通信的化,首先需要通过vpsd虚拟串口工具,建立两个模拟端口连接
配置好Modbus Poll与Modbus slave,端口、波特率、数据位等基本信息就可以实现数据收发。(需要注意,这里两个工具的Slave ID需要保持一致)
下面是我通过Modbus poll工具Communication Traffic捞回的日志,这里我将地址0的数据从原来的0x01修改位0x00。如果从从从机接收日志,收发关系会对调一下。
# 请求设备地址(0x08)读保持寄存器(0x03),起始地址(0x0000),读10个寄存器(0x000a),CRC校验(c5 54)
Tx:000032-08 03 00 00 00 0A C5 54
# 响应设备地址(0x08)读保持寄存器(0x03),字节数(0x14,20字节,对应10个16位寄存器,就是每个寄存器用两个八位字节存表示),数据(第一个寄存器为0x0001,其他为0x0000),CRC校验(34 a1)
Rx:000033-08 03 14 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 34 A1
# 请求设备地址(0x08)写单个寄存器(0x06),起始入地址(0x0000),写入值(0x0000),CRC校验(89 53)
Tx:000034-08 06 00 00 00 00 89 53
# 响应与请求完全相同,表示写入成功确认
Rx:000035-08 06 00 00 00 00 89 53
# 内容同Tx:000032,完成两次定时请求与响应动作
Tx:000036-08 03 00 00 00 0A C5 54
Rx:000037-08 03 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 09 5D
Tx:000038-08 03 00 00 00 0A C5 54
Rx:000039-08 03 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 09 5D