一个类似 ModScan32 的 Modbus TCP / RTU 主站调试工具,报文检测界面更直观。
- 双击
ModbusDebug.exe即用(免安装,单文件) - 无 PLC / 无从站设备也能体验:内置了一个 TCP 从站模拟器
一、30 秒上手(无设备体验)
- 双击打开软件
- 点右上 「启动内置从站」 —— 自动切到 TCP 127.0.0.1:1502 并连接
- 功能码选
03 读保持寄存器,点 「读取一次」 或 「开始轮询」 - 看下方报文区:蓝 TX / 绿 RX 逐帧滚动,hex 按协议域着色,注释行逐字段解释
- 保持寄存器 100~109 每 0.5 秒自增,轮询时能看到数据区黄色高亮(值变化)
二、连接真设备
| 参数 | Modbus TCP | Modbus RTU |
|---|---|---|
| 地址 | 设备 IP + 端口(默认 502) | COM 口 + 波特率(默认 9600) |
| 校验 | — | 无 / 偶 / 奇(要对上从站) |
| 从站地址 | 单元标识 Unit ID | 站号 1~247 |
| 超时 | 默认 1000 ms,线路慢可加大 | 同左 |
RTU 接线:D+ → D+、D- → D-(485),USB 转 485 即可。串口下拉框点击时会自动刷新列表。
三、报文区怎么读(这是本工具的重点)
每帧占三行:
19:10:01.123 TX→ 读保持寄存器 addr=0(40001) qty=10 值=1 2 ...
01 03 00 00 00 0A C5 CD
└ 功能码 0x03(读保持寄存器) · 起始地址 0 (40001) · 数量 10
19:10:01.131 ←RX 读保持寄存器 响应 10 个值 8.2 ms ✓
01 03 14 00 01 00 02 ...
└ 功能码 0x03 · 字节计数 20 (10 个寄存器) · CRC C5 CD(校验 OK)
- 颜色:TX 深蓝、RX 深绿、异常红 ⚠、超时橙 ⏱、错误红 ✗
- hex 按域着色 + 自动折行:每行固定 16 字节(Wireshark 风格),缩进对齐、着色跨行不断——紫=从站地址/MBAP头、蓝=功能码、橙=地址数量等参数、深灰=数据、浅灰=CRC,读 100 个寄存器的长帧也整整齐齐
- 地址双记法:注释行同时给 0 基地址和 ModScan 风格引用(线圈 0xxxx、离散 1xxxx、输入寄存器 3xxxx、保持寄存器 4xxxx)
- 顶部统计栏:TX/RX 帧数、异常、超时、成功率、平均响应时间
- 导出报文:存成 txt(含统计头),贴给同事或存档都方便
四、数据区与在线改写
- 列:地址 / 引用 / HEX / DEC / BIN
- 值变化自动黄色高亮(轮询观察模拟量、心跳位很直观)
- 双击线圈行 = 取反写入(05 写单线圈)
- 双击保持寄存器行 = 弹窗改写(06 写单寄存器,支持 0x 十六进制)
五、支持的功能码
| 码 | 功能 | 码 | 功能 |
|---|---|---|---|
| 01 | 读线圈 | 05 | 写单线圈 |
| 02 | 读离散输入 | 06 | 写单寄存器 |
| 03 | 读保持寄存器 | 0F | 写多线圈 |
| 04 | 读输入寄存器 | 10 | 写多寄存器 |
写值支持:十进制、0x1F4 十六进制、0b101 二进制、on/off;多值用逗号分隔(0F/10)。写 0F/10 时"数量"自动与值个数同步。
六、命令行解析(彩蛋)
ModbusDebug.exe --parse "01 03 00 00 00 0A C5 CD"
不连设备也能解析一帧报文(自动识别 TCP/RTU、校验 CRC、按域分段输出),适合离线分析抓包数据。
七、常见坑
- TCP 连不上:先 ping 设备;502 端口被防火墙拦很常见;网关型设备 Unit ID 要填对
- RTU 排查口诀(报文区现象直接定位问题):
- 红灯"连接失败" → COM 口被占用(关掉其他串口软件)/ 口号选错
- 有蓝 TX 帧,橙 ⏱ 超时 → 从站没应答:波特率/校验位/停止位不匹配、A/B 线接反、站号不对、从站没上电
- 有 RX 帧但 CRC 错误 → 波特率偏差过大,换标准波特率
- 收到异常 0x02 → 地址越界,从站没这个寄存器区(这是通了!)
- 逐项试校验:9600 波特率下依次试「无→偶→奇」,很多仪表/PLC 默认 8E1(偶校验),西门子 S7-200 SMART 集成口默认就是 9600 8E1
- 异常 0x02 非法数据地址:地址或数量超出从站映射区,不是软件坏了
- 轮询别太狠:间隔 < 50ms 容易堵总线,RTU 建议 ≥ 100ms
- 内置从站端口 1502 被占用:关掉占用程序再启动(报错会提示)
- 地址风格:本工具填 0 基地址(0 = 40001),和有些文档的 1 基记法差 1,报文区注释行已同时标出两种
- RTU 一个主站原则:轮询时别让组态软件/其他调试工具同时占着 COM 口
八、文件清单
| 文件 | 说明 |
|---|---|
ModbusDebug.exe | 成品,双击即用 |
modbus_gui.py | 界面源码(含 CLI) |
modbus_core.py | 协议栈源码(帧/CRC/传输层/模拟从站) |
test_modbus_core.py | 协议栈自动化测试(38 项) |
verify_gui.py | GUI 无头验证 + 端到端(32 项) |
make_icon.py | 图标生成脚本 |
_小野 (WorkBuddy) 制作 · 2026-09-18_