Modbus 轮询不通:按这个顺序排查,别再瞎换设备
Modbus Polling Dead: A Systematic Order
"Modbus 轮询不通"是最常见的物联网通信故障。从物理层到协议层,按顺序排查:终端电阻、波特率、从站地址、CRC、超时设置——十有八九问题出在前三个。
本文涉及的条目7 条 · 自动匹配自标签与标题
先把故障分层
Modbus RTU 通信栈有四层,故障现象不同,对应层不同:
| 现象 | 层 |
|---|---|
| 完全无响应、串口无波形 | 物理层(接线、供电、终端电阻) |
| 有响应但 CRC 错误 | 物理层干扰 / 波特率失配 |
| 请求超时无应答 | 从站地址 / 功能码 / 寄存器配置 |
| 响应正常但数据不对 | 字节序 / 寄存器映射 / 数据类型 |
排查原则:从物理层向上,逐层排除。 多数人一上来就怀疑从站设备,其实 60% 的"轮询不通"死在物理层。
第一步:确认物理层通不通
- 从站上电:万用表测从站供电电压(在从站端子处测,不是电源端)——长线缆压降可能导致从站欠压,表现就是"时通时不通";
- A/B 线:RS-485 是差分信号,A 接 A、B 接 B,A/B 接反是全站无响应的头号原因;
- 终端电阻:总线两端各一个 120 Ω。没有终端电阻 → 长线反射,波形振铃,通信时好时坏;有且只在两端,中间站点不要接;
- 偏置电阻:总线空闲时 A/B 之间要有确定电平(A > B)。没有偏置电阻的总线,空闲时电平不确定,第一个报文大概率丢失——表现是"第一次轮询不通,第二次就通"。
现场快速验证:用示波器(或支持示波功能的串口工具)看从站响应波形。没有示波器就用"二分法":把从站从总线断开,用 USB-485 转换器单独直连测试——单点直连通了,问题在总线;单点直连也不通,问题在从站或转换器。
第二步:查波特率与格式
主站和从站的波特率、数据位、校验位、停止位必须完全一致:
- 波特率失配:请求发出去,从站无响应(从站收到的全是乱码,CRC 过不了);
- 校验位失配(无校验 vs 偶校验):帧结构错,从站可能响应错误或直接忽略;
- 常见默认值:9600-8-N-1 和 9600-8-E-1 都常见,配错一个字节就是不通。
注意:部分从站出厂默认波特率是 4800 或 19200,主站按 9600 配,自然不通。查从站说明书确认默认值,或用"自动波特率检测"功能。
第三步:查从站地址
Modbus RTU 地址范围 1~247,0 是广播地址。
- 从站地址与主站请求地址不一致:无响应;
- 两个从站地址相同:两个设备都响应,总线冲突,主站收到 CRC 错误或超时——这是"时通时不通、换了设备又好了"的经典原因(详见本站专题《Modbus 从站地址冲突》);
- 部分从站地址为 0 时是"自动寻址/配置模式":不响应正常轮询。
排查动作:逐个从站检查拨码/软件设置地址,确认唯一;主站请求地址与之一致。
第四步:查功能码与寄存器
从站通了、地址对了,但读取数据超时或报异常码:
| 异常码 | 含义 | 排查 |
|---|---|---|
| 01 | 非法功能码 | 从站不支持该功能码(如只支持 03 读保持寄存器,你发了 04) |
| 02 | 非法数据地址 | 寄存器地址超范围 |
| 03 | 非法数据值 | 写入值超范围 |
| 04 | 从站设备故障 | 从站内部故障 |
寄存器地址偏移陷阱:Modbus 协议里的地址是 0-based(如 40001 对应地址 0x0000),很多组态软件显示的是 1-based 地址(40001 对应地址 0x0000 或 0x0001,视厂商而定)。地址差 1 是读不到正确数据的常见原因。
第五步:查超时与重试设置
- 响应超时:主站默认超时 100~1000 ms。从站响应慢(多从站轮询、从站内部忙)时,超时太短 → 误判超时。现场按从站手册的典型响应时间 + 2~3 倍余量设置;
- 轮询周期:轮询间隔必须 ≥ 从站响应时间 + 主站处理时间。轮询过快,从站忙不过来,返回忙状态或丢响应;
- 重试策略:设 2~3 次重试,重试间隔递增(如 200 ms、500 ms、1 s),避免"疯狂重试"把从站打死。
第六步:数据对不对
响应正常但数据不对:
- 字节序:Modbus 寄存器 16 位,32 位浮点/整型有"ABCD / CDAB / BADC"四种字节序,主站与从站配置不一致 → 数据错乱(如温度 25.5 显示为 21845 之类);
- 数据类型:从站寄存器可能是 INT16/UINT16/FLOAT32,按错类型解析数据全错;
- 缩放系数:从站输出原始值 × 系数 = 工程值(如 0.1 ℃/LSB),漏乘系数读数差 10 倍。
一张排查总表
| 步骤 | 检查项 | 工具 |
|---|---|---|
| 1 | 供电、A/B 极性、终端电阻、偏置 | 万用表、示波器 |
| 2 | 波特率/校验位/停止位 | 串口工具 |
| 3 | 从站地址唯一性 | 拨码/软件查看 |
| 4 | 功能码、寄存器地址、异常码 | 串口监视 |
| 5 | 超时、轮询周期、重试 | 主站配置 |
| 6 | 字节序、数据类型、缩放 | 寄存器表对照 |
先物理后协议,先单点后总线,先地址后数据。 按这个顺序,Modbus 故障 90% 可以在现场半小时内定位,而不是靠"换设备试试"。