我们可以将 Modbus 通信想象成一场问答游戏:
- Master (主站/客户端):提问者(如 PLC、上位机软件)。
- Slave (从站/服务器):回答者(如 传感器、电表、IO 模块)。
常用调试软件
- Modbus Poll (主站仿真器)
- 典型场景:你刚买了一个温湿度传感器(从站),想看看它好不好使。你用 Modbus Poll 连接传感器,发送“读取 03 寄存器”的指令,观察它返回的温度数值。
- Modbus Slave (从站仿真器)
- 典型场景:你在写 Python 代码开发一个数据采集系统。你打开 Modbus Slave,在地址 40001 填入 25.5。如果你的代码能成功读到 25.5,说明你的采集程序写对了。
- ModSim(Modbus Simulator)
- 它的功能与 Modbus Slave 类似,主要用于模拟设备响应
- ModScan (Modbus Scanner)
- 搜索者/诊断者
- 典型场景:如果你接手了一个复杂的 RS485 总线,上面挂了 10 几个设备,你不知道它们的 ID 分别是多少。这时候用 Modbus Scan 扫描 1-247 地址,能快速定位存活的设备。
Modbus 地址空间
| 区域前缀 | 寄存器类型 | 英文全称 | 读写属性 | 对应功能码 | 形象比喻 |
|---|---|---|---|---|---|
| 0x | 线圈状态 | Coil Status | 可读可写 | 01(读), 05(写) | 开关/继电器:只有开/关两种状态。 |
| 1x | 离散输入 | Discrete Input | 只读 | 02 | 限位开关/报警:外部传进来的开关信号。 |
| 3x | 输入寄存器 | Input Register | 只读 | 04 | 仪表读数:温度、压力,主站不能改。 |
| 4x | 保持寄存器 | Holding Register | 可读可写 | 03(读), 06/16(写) | 控制参数:如设定压力、变频器频率。 |
- 3x 区域 (功能码 04):最初设计是用来映射外部物理输入(如传感器采集到的模拟量信号)。因为这些数据是来自外部物理世界的,你作为主站(监控者)去改它没有意义,所以它是只读的。
- 4x 区域 (功能码 03):设计用来存储设备运行参数或配置信息。这些数据不仅要能读出来查看,还需要能被主站修改(下发指令),所以它是可读写的。