QModMaster:ModBus 调试工具使用指南
QModMaster:ModBus 调试工具使用指南
【免费下载链接】qModbusMasterFork of QModMaster (https://sourceforge.net/p/qmodmaster/code/ci/default/tree/)项目地址: https://gitcode.com/gh_mirrors/qm/qModbusMaster
它是什么,能干什么
QModMaster 是一款免费开源的 ModBus 调试工具,基于 Qt 开发,Windows 和 Linux 都能跑。它同时支持 ModBus RTU(串口)和 ModBus TCP 两种通信方式,直接读从站设备的寄存器和线圈,也能抓总线上跑的所有数据帧。通信底层用的是 libmodbus,代码按 GPL v3 协议发布。
- 支持 8 个标准功能码读写
- 周期性轮询采集,扫描速率可设
- 总线监控,抓全部请求与响应帧
先跑起来
拿到软件有两条路。
git clone https://gitcode.com/gh_mirrors/qm/qModbusMaster cd qModbusMaster qmake && make源码编译需要机器上装好 Qt 5。Windows 用户更省事,直接从上游项目页拿预编译的 qModMaster 包,解压即用,不装 Qt 也不需要安装。
连上第一台设备:在工具栏打开对应配置窗口(RTU 串口设置或 TCP 设置),最小要填这几项:
| 参数 | 说明 |
|---|---|
| 协议 | RTU(串口)或 TCP |
| 地址 | RTU 填从站 ModBus 地址;TCP 填对方 IP,端口默认 502 |
| 波特率 | 仅 RTU 需要,必须和设备一致,常见 9600 |
保存配置后,回主界面勾选 Connect 完成连接。状态栏会实时显示报文计数和错误计数,连没连上一目了然。
日常操作
读:主界面工具栏先选功能码(比如 Read Holding Registers 0x03),填起始地址和寄存器数量,点一次 Read/Write 按钮发出请求,结果会填进下方的寄存器表格。RTU 模式下从站地址要先填对,请求才能到对应设备。
写:选 Write Single Register(0x06)这类写功能码,设好目标地址和数值,同样方式发出。地址进制(十六进制/十进制)和数值显示基(2/8/10/16 进制)都可在工具栏切换。写错范围时从站通常返回异常帧,状态栏的错误计数会加一。
看:勾选 scan cycle 后轮询定时器按设定的扫描速率自动跑,表格数据自己刷新,不用一直手动点。要看原始报文,打开总线监控窗口(Bus Monitor),所有请求和响应的 PDU 都会解析后列出,还能把记录存成文件。程序自身日志也可以从菜单直接打开查看。
一个完整任务怎么走
任务:对一台 ModBus RTU 从站,从地址 0 开始每 5 秒读一次 8 个温度寄存器。
- 打开 RTU 配置,设串口号、波特率 9600、8 数据位、无校验、1 停止位,填从站地址。
- 主界面选功能码 Read Holding Registers(0x03),起始地址填 0,寄存器数量填 8。
- 勾选 Connect,先手动发一次请求,确认表格里有正常数值,不是全 0 或全 F。
- 把扫描速率设成 5 秒间隔,勾上 scan cycle,程序自动轮询;需要时打开总线监控,确认请求帧在按时发出。
如果第 3 步发出去没任何响应,多半是 ModBus RTU 串口配置里的从站地址或波特率没对上,逐项核对一遍即可。
踩坑记录
现象:串口列表是空的,找不到设备。原因 + 解法:Windows 下去设备管理器核对 COM 口号;Linux 下普通用户对
/dev/ttyUSB0没有权限,执行sudo usermod -a -G dialout $USER后重新登录再试。现象:TCP 连接建立成功,但每次读取都超时。原因 + 解法:典型的 ModBus TCP 连接超时。先 ping 目标 IP 确认网络通,再查防火墙放没放 502 端口,最后确认对端确实跑的是 ModBus TCP 而不是串口转出来的 RTU。
现象:数据读回来了,但数值完全不对。原因 + 解法:多是地址进制或字节序不匹配。工具栏切一下地址基(十六进制/十进制),再对照设备手册确认数据是大端还是小端。
想看源码 / 想改点东西
- src/modbusadapter.cpp:连接建立、读写请求、轮询定时器都在这,是所有 ModBus 通信的核心。
- src/mainwindow.cpp:主界面逻辑,参数控件、连接状态、会话保存加载。
- forms/busmonitor.cpp:总线监控窗口,负责解析请求/响应 PDU 和日志保存。
想加非标准功能码,改src/modbusadapter.cpp里的功能码分发,再在forms/mainwindow.ui的cmbFunctionCode下拉框里加一项即可。语言包在translations/目录,用 Qt Linguist 加新语言后重新编译。
更多资料
- 协议规范:Docs/Modbus_Application_Protocol_V1_1b3.pdf
- 项目手册(HTML):ManModbus/index.html
- 编译配置:qModMaster.pro
- 日志级别:程序旁
QModMaster.ini的LoggingLevel字段 - 许可证:LICENSE
【免费下载链接】qModbusMasterFork of QModMaster (https://sourceforge.net/p/qmodmaster/code/ci/default/tree/)项目地址: https://gitcode.com/gh_mirrors/qm/qModbusMaster
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
