本节摘要:从站答不上来不是沉默——它会把功能码最高位置 1 并附异常码。本节讲清异常响应格式、八类异常码的现场含义,以及"从站沉默"这种更隐蔽的故障怎么排查。位置:3.2 会发报文了,本节处理"发出去没下文"的所有情况。
从站发现请求有问题,响应不是沉默而是报错:
异常响应:地址(1) + (功能码|0x80) + 异常码 + 校验 例:请求 01 03 00 64 00 02 → 地址越界 应答 01 83 02 [CRC] ← 83 = 03|0x80,02 = 非法数据地址
最高位置 1(功能码 + 0x80)是"这条是异常响应"的标记,解析时先看这一位,再看异常码。
| 异常码 | 名称 | 现场典型原因 | 处置方向 |
|---|---|---|---|
| 01 | 非法功能码 | 设备不支持该功能码(如老表不支持 16) | 查点表支持矩阵,改用 06 |
| 02 | 非法数据地址 | 地址/偏移超出设备映射范围 | 核对偏移,别忘减 1 |
| 03 | 非法数据值 | 数量超上限或数值非法 | 拆小批量、校验范围 |
| 04 | 从站设备故障 | 设备内部错误,无法处理 | 查设备日志、看状态灯 |
| 05 | 已接受延迟处理 | 设备忙,稍后处理 | 稍后重试 |
| 06 | 从站忙 | 正在处理上一条 | 加大轮询间隔重试 |
| 08 | 存储奇偶错 | 设备存储区校验失败 | 联系厂商 |
现场排障口诀:02 先怀疑地址,03 先怀疑数量,04 之后查设备。02/03 是配置类错误,九成是主站侧程序的问题;04+ 才需要摸设备。
比异常响应更常见的是完全沉默——主站发出去,等不到任何回应。按链路一层层查:
| 层次 | 怀疑点 | 验证手段 |
|---|---|---|
| 物理层 | 接线、终端电阻、波特率 | 示波器看波形、串口助手试波特率 |
| 链路层 | 地址是否匹配、CRC 是否对 | 用抓包工具算 CRC 比对 |
| 应用层 | 功能码/数据是否合法 | 用调试器发同一条报文观察 |
| 配置 | 从站是否被禁用、网关路由 | 读设备配置、查网关映射表 |
特别提醒:地址不匹配与 CRC 错误的沉默是最像的两种——前者设备根本没听,后者设备听了但扔了。用串口抓包把原始字节抓下来算一次 CRC,立刻能区分。
把异常排障串成一个标准流程,现场照着走:
主站报"从站无响应" → 抓包看有没有响应帧? 无响应 → 看有没有请求帧发出? 无请求 → 主站软件/轮询配置问题 有请求 → 算 CRC → 对地址 → 查波特率 → 查物理层 有响应 → 看是正常响应还是异常响应? 正常 → 解析数据是否符合点表(可能是点表口径问题) 异常 → 查异常码:01 查功能码支持,02 查地址,03 查数值
不同异常码的重试策略完全不同:01/02/03(非法请求)重试也没用——是配置/程序错误,应停止重试并记录日志告警;05/06(设备忙)适合重试——加大间隔重试几次可能成功;04(设备故障)重试意义有限——先查设备状态再决定。把异常码分"不可重试/可重试/需人工"三类处理,程序才不会在错误方向上反复浪费带宽。
怀疑物理层时,最直接的验证是回环测试:把 RS-485 的 A/B 线在从站端短接或拆下,主站自发自收(把主站 TX 接到自己的 RX 看是否能收到自己发的帧)。能收到说明主站侧物理链路正常;收不到说明主站串口配置或线缆问题。再配合示波器看 A/B 差分波形(静默时应是稳定的偏置电平,通信时应有清晰的方波翻转),物理层问题基本能定位到"哪一段线"。
要点回顾:异常响应 = 功能码最高位置位 + 异常码;02 查地址、03 查数量、04+ 查设备;沉默按物理→地址→CRC→配置分层排。报文与异常都摸透了,下一章看三种传输模式怎么把这套报文搬上不同的线。
某自动化仓库项目,堆垛机的读操作偶尔报"超时重试 3 次后失败"。抓包发现:请求正常发出,从站偶发不响应,且集中在堆垛机急停动作的瞬间。深入排查:急停时从站(变频器)忙于安全逻辑,Modbus 处理被挤到几十毫秒之后,而主站超时设的是 30ms——从站不是没响应,是响应慢了。
修正:把该从站的超时从 30ms 提到 200ms,重试次数从 3 次降到 1 次(减少拥塞),问题消失。复盘结论:超时与重试要按"最慢从站的最坏响应时间"设置,而不是按理想值;从站忙(急停、自检、写 Flash)导致的慢响应是正常现象,应该用更长的超时包容,而不是用更多重试去轰炸。
生产系统的异常处理要有日志:记录时间、从站地址、功能码、异常码、连续失败次数。连续失败次数超过阈值(如 5 次)自动告警;异常码分布按周统计,能暴露"某台设备长期报 02"这类被忽略的系统性问题。没有日志的异常处理等于没处理——现场排障第一件事永远是翻日志。
小结:异常响应=功能码最高位置位+异常码;02 查地址、03 查数值、04 以上查设备;沉默按物理-地址-CRC-配置分层排;超时按最慢从站的最坏响应设定。
延伸练习:搭一套串口回环(主站经 USB 转 485 连一台从站模拟器),故意制造三类故障——地址错、功能码不支持、从站忙——观察异常码与沉默行为,并把处置流程写成你自己的排障速查表。完成练习后对照本节要点自查:遇到从站沉默,能否按物理层、地址、CRC、配置的顺序独立排查?能,则三种传输模式的学习可以开始了。