| Mobus通讯调试的实用经验总结 | |
| 发表时间:2026-05-25 阅读次数:22 | |
下面这份是现场工程最实用、最接地气的 Modbus 调试总结,偏实战、少理论,适合 PLC、仪表、DCS、组态软件互调时直接用。Modbus 通信调试实用技巧 一、接线与物理层(先搞定这个,再谈协议) RS485 优先排查 A、B 别接反:一般 A+ B-,部分设备标 DATA+ / DATA- 终端电阻:远距离 / 干扰大 / 多从站时,首尾两端加 120Ω 终端电阻 屏蔽层单端接地,不要两端都接,避免地环流干扰 网线 / TCP 模式 先 ping 通,再谈 Modbus TCP 交换机不要用家用廉价款,工业现场容易丢包 同一网段、子网掩码一致,网关可先不配 二、参数必须完全一致(90% 问题都在这) Modbus RTU 四大关键参数: 波特率(常见 9600、19200、115200) 数据位(固定 8 位) 校验位(None、Even、Odd) 停止位(1 位或 2 位) 任何一个不一致 → 直接 无响应 / 乱码。 三、从站地址(Slave ID) 从站地址必须 唯一,不能重复 地址范围:1~247 调试时先只接 1 个从站,通了再加其他设备 有些仪表默认地址是 1 或 11,一定要看手册 四、寄存器地址最容易踩坑
0x:Coil 线圈(DO)——读/写 bit 1x:Discrete Input 离散输入(DI)——只读 bit 3x:Input Register 输入寄存器(AI)——只读 16bit 4x:Holding Register 保持寄存器——读/写 16bit
很多设备手册写: 保持寄存器地址:40001 但调试软件里要填: 40001 → 0 40002 → 1 也就是: 地址 = 手册地址 - 40001 不注意这一条,永远读不对。 五、功能码用对 常用就这几个: 01:读线圈 02:读离散输入 03:读保持寄存器(最常用) 04:读输入寄存器 05:写单个线圈 06:写单个寄存器 16(0x10):写多个寄存器 用错功能码直接报异常码。 六、异常码快速判断故障 01:功能码不支持 → 设备不支持你发的指令 02:寄存器地址不存在 → 地址错/越界 03:数据值非法 → 写的数据超限 04:设备故障 → 仪表/模块本身问题 05:拒绝执行 → 权限/保护 06:设备忙 → 重试即可 出现异常码,基本就是地址/功能码/数据长度错了。 七、数据格式(float、高低字节反转) 很多仪表、变频器、电表的浮点数是: 32位 float 占两个连续寄存器 常见两种排列: ABCD(正常) BADC / CDAB(高低字节反转) 读出来数值奇怪时,优先换字节序。 八、调试工具(强烈推荐) Modbus Poll / ModbusScan(Windows 神器) 主站用 Poll 读仪表 从站用 Slave 模拟设备 串口调试助手 发原始报文,看是否回包 Wireshark 抓 Modbus TCP 包,定位问题 九、现场快速排查步骤(万能流程) 只接 1 台从站,断电重插 核对 波特率、校验、从站地址 用 Modbus Poll 发 03 功能码 确认寄存器地址是否 减 1 或减 40001 看是否返回异常码,按异常码定位 仍不通:换串口线、USB 转 485 模块、接地 长距离:加终端电阻、降低波特率 十、常见坑总结 485 总线 手拉手,不要星型接法 多从站时,逐个上电排查 同一总线上不能混用不同波特率/校验 不要用劣质 USB 转 485,容易丢包、无响应 有些仪表必须加 CRC 校验,软件会自动算,手动发报文别自己算错 |
|