ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

免费开源的Modbus主站调试工具OpenModScan:从设备扫描到串口排障,5分钟读出第一条数据

免费开源的Modbus主站调试工具OpenModScan:从设备扫描到串口排障,5分钟读出第一条数据 免费开源的Modbus主站调试工具OpenModScan从设备扫描到串口排障5分钟读出第一条数据【免费下载链接】OpenModScanOpen ModScan is a Free Modbus Master (Client) Utility项目地址: https://gitcode.com/gh_mirrors/op/OpenModScanOpenModScan 是一款免费、开源的 Modbus 主站客户端调试工具同时支持 Modbus TCP 与 Modbus RTU 两种协议把设备扫描、寄存器轮询、报文解析、全量通讯日志收进一个桌面应用里。适合楼宇自控集成商、机房现场工程师和设备验收测试人员使用——凡是天天和 PLC、变频器、智能仪表打交道的人都值得装一个。验收下午6台变频器3台不应答上周二下午我在一个商业综合体的机房做水系统改造验收。冷冻水泵新装了 6 台变频器VFD调节电机转速的控制器其中 3 台用 Modbus RTU 挂在 485 总线上——这是一种多设备共用一条串行线路、靠设备 ID 区分身份的协议另外 3 台经过 RS485 转以太网网关走 Modbus TCP端口都是 502IP 都落在 10.165.1.x 网段。上午联调时前 3 台全部正常应答后 3 台轮询下去0 请求 0 响应。我把集成商给的点位表打印出来对着手册逐条核对了地址没有错换通用串口工具给网关手发原始帧依然没有回音。验收节点定在当天下午 4 点只剩两个小时。那一刻我明白了一个道理排障时帧就是证据而缺的是一套能把证据拆开摆在我眼前的工具。五分钟验证法连上再读回一个数把安装、建连、读回三步当成一条连续动作走完。⏱安装。Windows 直接跑官方 Release 里的安装程序如qt6-omodscan_1.16.0_x64.exeDebian/Ubuntu 执行sudo apt install ./qt6-omodscan_*.debFedora/Rocky 执行sudo dnf install ./qt6-omodscan_*.rpm也可以用 Flatpak 一条命令装好。想编译的话git clone https://gitcode.com/gh_mirrors/op/OpenModScan后运行./build.sh。预期桌面菜单里出现 OpenModScan。不对时确认包的 qt5/qt6 前缀和 32/64 位与系统匹配用uname -m核对架构。建立连接。菜单“连接”→“连接详情”。TCP 选“远程 TCP/IP 服务器”填设备 IP 和端口 502RTU 选串口填 9600 波特率、8 数据位、无校验、1 停止位。预期主界面左下状态栏显示形如“远程 TCP/IP 服务器 10.165.1.14:502”的连接信息表格不再提示“数据未初始化”。不对时Linux 下串口用户需加入dialout组sudo usermod -a -G dialout $USER后重新登录再确认端口没被别的程序占用。读回一个数。参数区设地址基 1-based、起始地址 1、长度 100、功能码03: HOLDING REGISTER保持寄存器即设备里可读写的数据区点轮询。预期表格里出现十六进制与数值右下角“轮询次数”“响应次数”同步递增。不对时整列全 0 说明该地址区为空日志里出现异常码 0x01 说明设备不支持此功能码翻手册。我这套流程从装好到第一个数值出现用了 4 分多钟离 5 分钟上限还有余量。核心能力拆解从找到设备到留下证据的一条链设备发现用扫描器把“不应答”的3台变频器找出来 卡点点位表只写了网段具体哪台 IP、哪个端口、什么设备 ID全靠猜。扫描器对话框选协议 Modbus TCP/IP地址范围填 10.165.1.110.165.1.254端口范围填 502最大并行连接数调 10设备 ID 探测范围设 164探测请求用功能码 03点“开始”等进度条走完看右侧“扫描结果”表。结果254 台主机约 40 秒扫完命中 3 台分别在 10.165.1.14、.15、.16。其中一台的真实设备 ID 是 21而不是点位表模板里的默认值 1——上午 0 响应的问题就此定性。读对数据切换显示格式数值立刻变样卡点数据回来了数值却离谱。多半是显示格式或字节序多字节数值里两个字节谁在前和设备内部映射不一致。工具栏选择数据列的显示格式i16、u32、f32、f64 等按需点亮字节序/字序交换按钮保持连接不中断让轮询继续跑。结果温度通道按 u16 显示是 -8.4切到 f32 单精度浮点并交换字序后变成25.6与变频器面板读数一致。连续跑 34 次轮询34 次有效响应0 丢包。读懂报文把一串十六进制拆成字段表卡点原始字节看起来没错设备却报异常需要按 Modbus 帧结构逐字段对账。把十六进制帧粘进解析器选 RTU Message 或 TCP Message 页签勾选 Request声明这是一帧请求点 Parse看逐字段拆解。结果一帧 12 字节的报文被一次拆成 8 个字段——类型、事务 ID 0x442D帧序号收发两端靠它配对、协议 ID 0x0000、长度 0x0006、设备 ID 0x01、功能码 0x03、起始地址 0x00000-based、长度 100。我这次的病因三十秒就现了形长度字段写了 100而这台网关单帧只认 50 以内超出的请求直接被丢弃。留下证据日志记下每一帧让偶发故障没法跑 卡点99% 的请求都正常偏偏那 1% 的偶发丢帧要拿去跟集成商对质。工具栏打开日志窗口让它跑一段时间每帧的时间戳、方向Tx/Rx、原始十六进制和解析结果自动归档对比相邻两帧的时间戳找间隔异常的那一处。结果51 次发送、50 次响应丢的那 1 帧前后间隔超过 1 秒相邻正常帧只有 0.2 秒左右。设备固件看门狗重启的窗口期被坐实集成商当场认账。批量核对999个寄存器一次扫完卡点验收前要把整段寄存器区和点位表逐条核对手动逐地址读不现实。打开地址扫描对话框起始地址 1、长度 999、功能码 03设定每次查询的寄存器数量与地址基1-based点 Scan结束后点 Export… 导出结果表。结果999 个保持寄存器999/999 有效耗时 7 秒对话框右下角计时 00:00:07。结果表按十寄存器一行分组直接附进验收记录。横向对比OpenModScan 和“串口助手抓包”维度串口助手 抓包组合OpenModScan组帧方式逐字节手拼错一位要肉眼找功能码表预置请求自动成帧异常码直接标出数值不对时翻手册改格式、断开重发显示格式与字节序当场切换连接不中断找新设备自己写脚本逐个 IP 试扫描器并行扫网段IP、端口、设备 ID 同表输出偶发故障取证碰运气抓帧抓不到只能口述全帧日志带时间戳间隔异常一眼可比交接成本截图发群口头补充导出结果表直接归档故障速查六个高频症状症状原因解法串口打不开Linux当前用户无 /dev/ttyUSB* 读写权限sudo usermod -a -G dialout $USER重新登录能连上但无应答校验位或停止位与设备不一致波特率、数据位、校验、停止位四项对照设备手册逐一对轮询全部超时、设备明明在线设备 ID 不符工具发 1 而设备实际是 21用扫描器扫一遍设备 ID 范围核对真实 IDPing 通但 502 无响应设备不是 502 端口或防火墙拦截扫描时放宽端口范围Linux 侧ss -ltn查监听、查防火墙规则数据全 0 或巨大数值显示格式/字节序与映射不符f32 被当 u16 读轮换格式与字节序组合和设备面板显示值对表偶发丢一帧设备看门狗重启或 485 总线未加终端电阻日志比对丢帧前后间隔检查总线两端 120Ω 终端电阻给想改代码的人从哪几处读起MIT 许可意味着商用、分发、二次改造都没有门槛。仓库按层组织二次集成可以从这几个入口下手src/modbusclient.cpp 与 src/modbustcpclient.cpp、src/modbusrtuclient.cpp、src/modbusrtutcpclient.cpp协议层和传输层分离想换串口换 TCP 只动传输层src/modbusmessages/每个功能码对应一对请求/响应类继承自统一的ModbusMessage基类新增功能码只在这里加文件src/modbusscanner.cpp设备扫描算法的核心可复用度最高的一段抽出来做网段巡检组件很顺src/dialogs/扫描器、解析器、日志等全部 UI 对话框集成进自有框架时从这里替换src/controls/功能码框、地址基框、字节序框等可复用控件自己的应用里可直接拿来用。多语言资源在 src/translations/简体中文、繁体中文、俄语界面已经就绪。行动清单下次验收前后各做一件事今天装好对应平台的发行版连最近的一台设备或模拟器读回一个寄存器下次验收前用扫描器把目标网段扫一遍结果存档作为设备台账基线遇到故障先把帧贴进报文解析器拆解再开全量日志让它跑满 10 分钟交接前导出地址扫描结果表附进验收记录需要定制按 README 克隆仓库先读src/modbusmessages/从加一个功能码开始【免费下载链接】OpenModScanOpen ModScan is a Free Modbus Master (Client) Utility项目地址: https://gitcode.com/gh_mirrors/op/OpenModScan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表