Modbus-Tools
C++20 | Qt6 | Industrial Protocols
本文基于 Modbus-Tools 最新版本编写,更新于 2026-04-21
在工业自动化和嵌入式开发中,Modbus 协议几乎是日常工作的一部分。真正进入现场联调后,时间往往消耗在重复动作上:手动组帧、反复核对日志、逐条做倍率换算。
开发 Modbus-Tools 的目标很直接:把“发帧、看日志、解帧”三件高频操作做顺手。它不追求功能堆叠,而是优先保证调试效率和可用性。实现上采用 channel / transport / session / parser 分层设计,并配套 CI/CD、多语言与自动更新能力,方便工具持续迭代。
下面按实际使用顺序,快速介绍这款工具的核心用法。
1. 快速连接与报文构建
打开软件后,无论是走 Modbus RTU(串口)还是 Modbus TCP(网络),连接参数都在左侧面板,一目了然。

在调试阶段,最需要的是“快速试错”。Modbus-Tools 将参数输入与功能码操作拆分得非常清晰:
- 一键发送常用功能码:填好
从机地址 (Slave ID)、起始地址和数量/数据,点击01/02/03/04/05/06/0F/10等按钮即可发送。底层自动组帧并计算 CRC/LRC。功能码覆盖 0x01–0x04(读)、0x05–0x06(单写)、0x0F–0x10(多写)。 - HEX / DEC 智能识别:
Slave ID与起始地址支持 HEX(如0x10、10H)与 DEC(如16)两种格式输入,由parseSmartInt()统一解析并做范围校验。 - 写入数据格式可切换(HEX / DEC / Binary):在
Write Data旁可通过Format下拉框切换Hex、Decimal或Binary,输入习惯可以按项目场景自由调整。 - Raw 模式增强:需要发送自定义 Hex 报文时,可直接切换 Raw 输入并发送,适合非标场景或异常流程验证。Raw 模式内置两个辅助按钮:
- Append CRC (RTU):自动计算并追加 CRC16 校验值至输入框
- Add MBAP (TCP):自动封装 Modbus TCP 主站报头(Transaction ID / Protocol ID / Length / Unit ID)至输入框

线圈 (Coils) 二进制下发交互
针对位操作场景,工具提供了直观的 Binary 输入模式:
- Binary 输入:支持直接输入比特串(如
1 0 1 1),系统自动编码并配合0x05(单线圈写入)或0x0F(多线圈写入)功能码下发。 - 位级读取:配合
0x01/0x02读取指令,实现对远程设备线圈与离散输入状态的高效验证。
2. 盯日志与一键复制 (Traffic Monitor)
联调阶段的核心是快速定位问题。Traffic Monitor 重点优化了日志可读性和复用效率。
- 收发分离显示:TX(发送)与 RX(接收)采用不同高亮,并附毫秒级时间戳,便于还原交互顺序。
- 一键复制:可直接复制关键报文用于缺陷复现、团队沟通或测试记录。
- 按方向过滤:支持仅显示 TX 或 RX,在高频轮询场景下更容易聚焦关键数据。
- 日志可保存:支持将当前通信记录导出保存,便于归档现场问题与形成测试留痕。
3. 帧解析器 (Frame Analyzer):告别计算器
Frame Analyzer 是日常使用频率最高的模块之一。将 Hex 报文粘贴后点击解析,即可自动拆解报文结构并输出可读表格。


对现场调试最有价值的,是以下几个能力:
解码模式切换 (Unsigned / Signed)
解析器顶部提供 Decode Mode,可在 Unsigned 与 Signed 间切换。切换后会立即按新模式重新解析,十进制、Hex、二进制和换算值会同步更新,查看有符号量(如负温度、反向功率)更直观。
倍率换算 (Multiplier Scaling)
很多设备会将浮点量按倍率放大后再上送(例如 220.5V -> 2205)。在解析表格中可按寄存器设置 Scale(如 0.1、0.01),系统会实时展示换算后的工程值(显示 2205 -> 220.5V )。
多维字节序分析 (Byte Order)
不同厂商的 PLC 和仪表可能采用不同的数据排列方式。解析器支持 四种字节/字序模式,适配各类设备:
- ABCD (Big Endian):大端模式,高位在前
- CDAB (Little Endian Byte Swap):小端字节交换
- BADC (Big Endian Byte Swap):大端字节交换
- DCBA (Little Endian):小端模式,低位在前
切换字节序后,寄存器值会重新计算并展示。
寄存器功能注释 (Description)
支持为寄存器地址添加描述(如"A 相电压"“电机转速”)。解析结果与注释并排展示,减少来回翻表的时间。

配置持久化与模板 (JSON / CSV 导入导出)
配置可自动保持,并支持导入/导出 JSON / CSV 模板。
- 自动保存:保留最近使用的倍率与描述配置。
- 模板复用:按设备或项目保存独立模板,切换调试对象时可直接导入。
其他实用细节
- Format Hex 按钮:可一键清洗并规范 Hex 输入格式,粘贴长报文后更易读。
- 响应起始地址可配置:针对响应帧解析可设置
Start Address,让地址映射和点位表保持一致。 - 协议识别可选:支持
Auto Detect / Modbus TCP / Modbus RTU,便于混合抓包场景快速判别。
强制解析 (Force Parse)
现场抓包时,报文可能因截断、中间设备修改等原因导致校验不通过。当用户在 Protocol 下拉框中手动指定 TCP 或 RTU(而非 Auto Detect)时,解析器进入强制模式:
- RTU 强制模式:CRC 不匹配时不再直接报错终止,而是标记
checksumValid = false并在 warnings 中记录"CRC Mismatch (Forced)",同时继续解析 PDU 数据字段。 - TCP 强制模式:MBAP length 字段异常或帧尾有多余字节时,记录对应 warning 后仍按实际字节长度提取 PDU。
此机制适用于分析被网关/中继修改过、或从串口抓包工具截取的不完整报文。Auto Detect 模式下校验严格,适合正常通信场景的精确验证。
Link to Analyzer (实时联动)
除手动粘贴 Hex 报文外,Frame Analyzer 还支持从 Traffic Monitor 接收实时数据:
- 自动推送:在 Modbus TCP / RTU 视图中开启 Linkage 开关后,RX 响应报文的 PDU 会自动送入解析器,无需手动拷贝。
- 暂停 / 恢复:点击
Pause Refresh可驻留当前帧,方便编辑 Scale 或 Description;再次点击Resume Refresh恢复自动刷新。 - 停止联动:点击
Stop Link断开数据流,解析器恢复为手动模式。 - 异步执行:解析逻辑运行于
QThread后台线程,不阻塞 Traffic Monitor 的列表滚动。
如果你同时维护多个型号设备,按设备或项目保存独立模板后,切换调试对象时可直接导入,减少重复配置。
4. 顺手的辅助小工具
除 Modbus 核心流程外,工具也提供了两个轻量能力,便于处理临时调试任务:
- TCP Client:用于快速验证自定义网络报文。
- Serial Port:用于基础串口收发测试(ASCII/Hex)。
5. 工程质量与测试保障
作为持续迭代的开源工具,Modbus-Tools 在代码质量方面投入了相当精力:
自动化测试
项目采用 Google Test (GTest) 与 Google Mock (GMock) 框架进行自动化质量检测,覆盖以下核心模块:
- 会话管理:连接/断开逻辑、请求超时重试及异常状态恢复
- 协议传输:TCP/RTU 报文封装、解包、校验和计算及完整性验证
- 解析逻辑:针对多种有效指令及畸形报文的鲁棒性验证
- 数据处理:字节序转换、工程量缩放及格式化算法的计算准确性
目前全量 42 个自动化测试用例(TEST + TEST_F),覆盖会话管理、协议传输、解析逻辑、数据处理及格式化等模块,每次 Release 发布均执行回归测试。
CI/CD 集成
- GitHub Actions 流水线集成 MSVC AddressSanitizer (ASan),用于内存损坏与泄漏的自动化监测
- 支持自动构建、测试及 Release 解析包分发
自动更新 (OTA)
工具集成了基于 GitHub Releases 的自动更新机制:启动时静默检测新版本 + 菜单栏手动检查。更新包通过 SHA256 校验后执行替换,支持 UpdateOnly(增量)和 Full Package 两种模式。
写在最后
Modbus-Tools 的设计目标是将高频调试操作(发帧、看日志、解帧)封装为可复用的工作流,使开发者能更专注于业务逻辑和问题定位。
功能概要:
- 快速组帧:HEX/DEC 智能识别(
parseSmartInt)+ Raw 模式 CRC/MBAP 辅助计算 - 实时联动:Link to Analyzer 支持 RX 报文自动推送至解析器
- 深度分析:倍率换算(Scale Factor)+ 四种字节序(ABCD/BADC/CDAB/DCBA)+ 寄存器描述
- 位级控制:线圈 Binary 输入模式,支持 0x05/0x0F 功能码
- 质量保障:42 个自动化测试 + CI/CD 集成 MSVC AddressSanitizer
如果你也在做嵌入式或上位机开发,欢迎前往 GitHub 仓库 体验并反馈建议。