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-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(如 0x1010H)与 DEC(如 16)两种格式输入,由 parseSmartInt() 统一解析并做范围校验。
  • 写入数据格式可切换(HEX / DEC / Binary):在 Write Data 旁可通过 Format 下拉框切换 HexDecimalBinary,输入习惯可以按项目场景自由调整。
  • Raw 模式增强:需要发送自定义 Hex 报文时,可直接切换 Raw 输入并发送,适合非标场景或异常流程验证。Raw 模式内置两个辅助按钮:
    • Append CRC (RTU):自动计算并追加 CRC16 校验值至输入框
    • Add MBAP (TCP):自动封装 Modbus TCP 主站报头(Transaction ID / Protocol ID / Length / Unit ID)至输入框

Modbus-TCP快速下发指令-DEC

线圈 (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,可在 UnsignedSigned 间切换。切换后会立即按新模式重新解析,十进制、Hex、二进制和换算值会同步更新,查看有符号量(如负温度、反向功率)更直观。

倍率换算 (Multiplier Scaling)

很多设备会将浮点量按倍率放大后再上送(例如 220.5V -> 2205)。在解析表格中可按寄存器设置 Scale(如 0.10.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 模式下校验严格,适合正常通信场景的精确验证。

除手动粘贴 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 仓库 体验并反馈建议。