异常响应怎么看
当从站无法正常处理请求时会返回异常响应:功能码最高位置 1,随后一个字节说明原因。例如请求功能码 0x03 的异常响应为 0x83 加异常码。异常码的价值在于把问题定位到具体层面:地址越界、数据非法、功能不支持、设备忙还是网关后端无响应。不会解析异常码,排查就会停留在「通信有问题」这种没有结论的状态。
常见异常码
| 0x01 | 非法功能,设备不支持该功能码 |
|---|---|
| 0x02 | 非法数据地址,地址超出支持范围 |
| 0x03 | 非法数据值,数量或取值超出允许范围 |
| 0x04 | 从站设备故障,设备内部错误 |
| 0x05 | 确认,请求已被接受但需要时间处理 |
| 0x06 | 从站设备忙,暂时无法处理请求 |
| 0x07 | 否定确认,无法执行该功能 |
| 0x08 | 存储奇偶校验错误,部分设备特有 |
| 0x0A | 网关路径不可用,网关配置或链路问题 |
| 0x0B | 网关目标设备无响应,后端从站未应答 |
按异常码定位
| 异常码 | 含义 | 常见原因与处理 |
|---|---|---|
| 0x01 | 非法功能 | 功能码不在设备支持范围,核对手册 |
| 0x02 | 非法数据地址 | 地址超范围或偏移错误,核对地址约定 |
| 0x03 | 非法数据值 | 单次数量超限或取值非法,核对数量上限 |
| 0x04 | 从站故障 | 设备内部异常,查看设备诊断信息 |
| 0x06 | 设备忙 | 请求过于频繁,降低轮询频率 |
| 0x0A | 网关路径不可用 | 网关映射或链路配置错误 |
| 0x0B | 后端设备无响应 | 串口侧设备离线或参数不符 |
处理原则
- 先区分无响应与异常响应:前者多为链路、地址或参数问题,后者说明设备已收到请求并拒绝
- 记录异常码与出现频率,作为设备健康度与通信质量的指标
- 对忙与确认类响应降低轮询频率或延后重试,避免加剧拥塞
- 对本应支持的地址却返回地址类异常的情况,优先核对地址约定
- 网关类异常码要结合网关日志与串口侧状态一起分析
部分厂商会使用扩展异常码或自定义含义,规范中未定义的取值应查阅设备手册。另外一些设备对不支持的请求直接静默丢弃而不返回异常码,此时表现为超时,需要按链路与协议一致性问题排查。
出现异常码后立即快速重试会让设备进一步拥塞:忙与确认类响应提示处理能力已达上限,正确做法是降低频率并保留足够的重试间隔。