OpenModScan:免费又完整的 Modbus 协议测试工具,快速搞定从站调试

📅 发布时间:2026/8/23 0:41:07
OpenModScan:免费又完整的 Modbus 协议测试工具,快速搞定从站调试 OpenModScan免费又完整的 Modbus 协议测试工具快速搞定从站调试【免费下载链接】OpenModScanOpen ModScan is a Free Modbus Master (Client) Utility项目地址: https://gitcode.com/gh_mirrors/op/OpenModScanOpenModScan 是一款开源免费的 Modbus 主站Master调试工具支持 Modbus RTU、Modbus TCP 和 RTU over TCP内置从站扫描、寄存器读写、字节序转换和通讯日志分析。手里一台串口 PLC怎么快速判断它到底通不通上次去现场客户递过来一台串口温控器说明书上只写了一句Modbus RTU9600 波特率从站 ID 是 1 还是 245 没提。这时候你要是不熟 Modbus用商业工具得先掏许可证自己写脚本又得先啃 CRC 校验。我一般是把 OpenModScan 打开选 Modbus RTU串口指到/dev/ttyUSB09600 8N1从站 ID 先填 1点连接发一条 0x03 读保持寄存器的请求。活数据直接躺在表格里不活日志里能告诉你断在哪一层。整个过程不到一分钟这就是它和抓包工具最大的区别——你不用先懂协议才能开始调试。第一次打开它三个区域各管什么主界面不复杂从上到下扫一眼就能建立心智模型参数配置区上方协议选择RTU / TCP / RTU over TCP、设备 ID、超时、地址基数。注意地址基数这个开关——手册上写的 40001在 Modbus 里到底是偏移 0 还是偏移 1不同厂商不一样切一下 1-based / 0-based 就不用手动换算。数据显示区中部大表一行一个地址左边是寄存器/线圈编号右边是解析后的数值。你选什么数据格式它就按什么格式显示。状态监控区底部轮询次数、有效响应数。连上没连上、轮询有没有在跑看这里比看连接图标靠谱。想改这块布局或行为代码入口在src/mainwindow.cpp界面定义在src/mainwindow.uiQt Creator 里打开就能直接看。从连不上到连得上两个最小可跑配置连接参数看着多其实每种协议都只有一组最小集先照着填再微调。Modbus TCP以太网设备协议类型 Modbus TCP/IP 服务器地址 192.168.1.100 端口号 502 设备 ID 1 超时 1000 msModbus RTU串口设备协议类型 Modbus RTU 串口设备 /dev/ttyUSB0 波特率 9600 数据位/校验 8 / None 停止位 1 设备 ID 1两个容易踩的坑先说在前面设备 ID 不对 连不上。TCP 也要求正确的从站号很多人默认它是 1 就完事结果设备是 245。走网关时选 RTU over TCP。老 RTU 设备挂在串口转以太网网关后面此时协议要选 RTU over TCP而不是裸 TCPPDU 封装方式不一样。TCP 侧协议栈在src/modbustcpclient.cpp串口侧在src/modbusrtuclient.cpp两边走的都是src/modbusclient.cpp里统一的接口所以 UI 上切换协议时操作方式完全一致。如何 5 分钟发现网段里所有 Modbus 从站不知道 192.168.1.0/24 里躺着几台设备、各自 ID 是多少用它的扫描器Scanner四步设IP 范围和端口比如 192.168.1.1 ~ 192.168.1.255端口 502设设备 ID 范围代码里默认是 1~10见src/modbusscanner.h的ScanParams现场设备多就放大到 247定扫描请求功能码常用 0x03 读保持寄存器填起始地址和数量比如地址 0 读 2 个点开始。超时默认 1000 ms并发连接数默认 10IP 段越大可以适当调高并发。扫描是并行跑的发现一台亮一台还标出可疑结果比如响应格式对不上不用等全部扫完才看结果。RTU、TCP、RTU over TCP 三种协议都能扫逻辑都在src/modbusscanner.cpp。读到的数是对的吗寄存器读写与字节序先看它覆盖的功能码基本够你现场用尽离散量线圈/输入0x01 读线圈、0x02 读离散输入、0x05 写单个线圈、0x0F 写多个线圈寄存器0x03 读保持寄存器、0x04 读输入寄存器、0x06 写单个寄存器、0x10 写多个寄存器、0x16 掩码写寄存器只改某几个位不碰其他位真正让人头疼的是显示。同一个 32 位数据字节序不同出来的数是两回事37 90 00 00按 Big-Endian 是 972800000按 Little-Endian 则是 0.5。OpenModScan 的显示格式支持16 / 32 / 64 位整数有符号和无符号都有单精度 / 双精度浮点IEEE 754Big-Endian 与 Little-Endian 自动转换另外还有字节交换Swapped变体对付那些高字节低字节颠倒的非标设备切换格式只是改列显示原始值不动转换逻辑在src/byteorderutils.h。我的习惯是读数对不上时先别怀疑设备先把字节序切一遍八成是 16 位读 32 位、或者大端当小端了。通讯日志和进阶玩法日志先看懂再调参。打开通讯日志每条记录两半上半是十六进制原始报文下半是解析结果——时间戳、事务 ID、协议 ID、设备地址、功能码、长度一个不少。抓包工具给你的是发生了什么这里直接告诉你这是干什么的。底部还有统计发了多少次、回了多少次、成功率多少长时间轮询的稳定性一眼可见。异步响应处理在src/modbusreply.cpp所以高轮询频率下日志也不会丢帧。批量操作。不用一个一个写选一段地址一次写 10 个寄存器0x10或者对某位做脉冲发完自动复位操作批量线圈写入0x0F同理。数据模拟。手上没设备也能跑通整条链路——在src/datasimulator.cpp里可以给任意寄存器挂模拟随机值、自增、自减、线圈翻转四种模式按你设的周期自动更新。联调上位机时用它顶替真实 PLC比空手对协议快得多。连不上、读不对先查这几条按命中率排序的排查清单物理层网线 ping 不通 / 串口线没插好先排除。Linux 下串口打不开多半是权限把用户加进dialout组再登录一次。设备 ID和实际从站号对不上TCP 一样会失败。串口参数9600 8N1 是默认中的默认确认波特率、停止位、校验一致。防火墙TCP 502 端口、RTU 的串口设备权限。如果设备回了异常码直接对照错误码含义先查什么0x01非法功能码设备不支持该功能换 0x03 试试0x02非法数据地址起始地址或数量超出设备范围0x03非法数据值写入值超出设备允许范围0x04从站设备故障设备内部错误看现场指示灯再深一层数据读得出来但数值离谱回到上一节——数据格式、字节序、地址基数三个开关挨个切一遍十次有九次是这三处之一。能装、能改、能接进系统装。各平台都有现成产物Windowsqt5-omodscan_1.16.0_x86.exe32 位、qt5-omodscan_1.16.0_x64.exe或qt6-omodscan_1.16.0_x64.exeDebian / Ubuntusudo apt install ./qt6-omodscan_1.16.0-1_amd64.debRHEL / Fedorasudo dnf install ./qt6-omodscan_1.16.0-1.x86_64.rpmFlatpak先加 flathub 源再flatpak install --user io.github.sanny32.omodscan改。想从源码编译项目是标准 CMake 工程要求 Qt ≥ 5.15git clone https://gitcode.com/gh_mirrors/op/OpenModScan cd OpenModScan ./build.sh -qt6 # 或 -qt5脚本自动装依赖、配 Qt二次开发从三个文件入手src/modbusclient.cpp是客户端总接口src/modbusdataunit.cpp管数据单元和格式转换src/modbusmessages/modbusmessage.cpp是协议解析本体读懂这三个基本能改任何功能。接。它支持命令行启动-h看帮助、-v看版本、-p profile.ini加载配置剖面把参数写进 ini 就能在自动化脚本里复现同一套测试场景。进 SCADA 走 OPC UA 桥接或 Modbus 网关导出历史数据自己接 SQLite / MySQL 均可——它把协议层做干净了上层怎么接是自由的。最后说点选型和学习建议对比项OpenModScanModbus PollQModMaster开源免费是否是跨平台是否仅 Windows是从站扫描有有无批量寄存器操作有有无可二次开发是否是一句话要免费、跨平台、还要能扫从站和改代码OpenModScan 基本是唯一解如果项目硬性要求 7×24 厂商支持或行业认证再考虑商业工具。学习路径建议按这条走先读src/modbusmessages/modbusmessage.cpp搞懂一条报文怎么被拆成字段再看src/mainwindow.cpp理解界面怎么驱动请求最后看src/modbusscanner.cpp学会并行扫描的组织方式。读完这三个文件你自己搭一个 Modbus 调试器的骨架就不难了。【免费下载链接】OpenModScanOpen ModScan is a Free Modbus Master (Client) Utility项目地址: https://gitcode.com/gh_mirrors/op/OpenModScan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考