调试与排障
口诀:先物理层 → 再链路参数 → 再地址/FC → 最后字节序与业务缩放
1. 工具
| 工具 |
用途 |
| pymodbus / 交互脚本 |
快速试读 |
| libmodbus 例程 |
C 层对照 |
| Wireshark |
TCP:502 解码 |
| 串口监视 / 逻辑分析 |
RTU 帧、CRC、间隔 |
| 厂商调试软件 |
对照“权威读数” |
2. 分层排障
物理 / 串口
| 现象 |
检查 |
| 完全无响应 |
线序 A/B、接地、供电、终端电阻 |
| 偶发 CRC 错 |
干扰、波特率、缺少终端、星型拓扑 |
| 只错第一个字节 |
485 DE 方向切换过慢/过快 |
链路参数
| 现象 |
检查 |
| 全员超时 |
波特率、校验位、停止位 |
| 单个从站超时 |
地址冲突/地址错、设备故障 |
协议
| 现象 |
检查 |
| 异常 01 |
FC 不支持 |
| 异常 02 |
地址/数量越界;点号换算错 |
| 异常 03 |
数量或数据非法 |
| 数值离谱 |
字序、缩放、有符号解释 |
TCP
| 现象 |
检查 |
| 连不上 |
端口 502、防火墙、IP |
| 连上无数据 |
Unit ID、设备仅支持短连接 |
| 配对错乱 |
Transaction ID 处理错误 |
3. 最小 Python 试读(示意)
1 2 3 4 5 6
| from pymodbus.client import ModbusTcpClient client = ModbusTcpClient('192.168.1.10', port=502) assert client.connect() rr = client.read_holding_registers(0, 10, slave=1) print(rr.registers if not rr.isError() else rr) client.close()
|
(以你克隆的 pymodbus 版本文档为准。)
4. 本地项目入口
| 目的 |
目录 |
| C 库 |
../开源项目/libmodbus |
| Python |
../开源项目/pymodbus |
| ros2_control |
../开源项目/modbus_hardware_interface |
| ROS2 TCP 节点 |
../开源项目/ros2_modbus |
| ROS2 RTU |
../开源项目/modbus_rtu |
下一篇:09-规范与资料索引.md
正在加载留言…