Modbus 异常代码

异常响应

主设备(客户端)或从设备(服务器)中的任何一个出现异常晌应,都会导致数据处理错误。在主设备(客户端)发出一个请求以后,可能出现以下事件中的一种:

o如果从设备(服务器)从主设备(客户端)接收了请求,其中没有出现通讯错误,并且正确处理了请求,那么它会返回一个正常晌应。

o如果从设备(服务器)因为通讯错误而没有从主设备(客户端)接收请求,那么它不会返回晌应。主设备程序最终会为请求处理一个超时条件。

o如果从设备(服务器)从主设备(客户端)接收了请求,但是检测到了一个通讯错误,那么它不会返回晌应。主设备程序最终会为请求处理一个超时条件。

o如果从设备(服务器)从主设备(客户端)接收了请求,其中没有出现通讯错误,但是无法处理它(比如该请求是读取一个不存在的寄存器),那么从设备就会返回一个异常晌应,以通知主设备出现了何种错误。

异常帧

从设备向主设备发送了一个异常帧,以报告异常晌应。一个异常帧包括四个域:

定义 大小 说明
1 从设备号 1 个字节 请求的目的地址o1–247:唯一的目的地址
2 异常功能代码 1 个字节 请求功能代码 +128 (0x80)
3 异常代码 n 字节 参见下节
4 检查 2 字节 CRC16(检查传输错误)

异常代码

异常晌应帧有两个将其区别于普通晌应帧的字段:

o异常晌应的异常功能代码等于原请求的功能代码加上 128 (0x80)。

o异常代码取决于从设备所遇到的通讯错误。

下表介绍了由断路器处理的异常代码:

异常代码 名称 说明
01 (0x01) 非法功能 在请求中接收的功能代码不是从设备的一个授权操作。从设备可能处于错误状态,无法处理特定请求。
02 (0x02) 非法数据地址 从设备接收的数据地址不是从设备的一个授权地址。
03 (0x03) 非法数据值 在请求数据栏中的数值不是从设备的一个授权值。
04 (0x04) 从设备故障 从设备未能执行一个请求的操作,因为出现了一个无法修复的错误。
05 (0x05) 确认 从设备接受了请求,但是需要较长的时间来处理它。
06 (0x06) 从设备繁忙 从设备忙于处理另一个命令。主设备必须在从设备空闲后发送请求。
07 (0x07) 否定确认 从设备无法执行主设备发送的编程请求。
08 (0x08) 存储器奇偶校验错误 从设备在尝试读取扩展存储器的时候从存储器中检测到一个奇偶校验错误。
10 (0x0A) 网关通道不可用 网关过载,或者没有正确配置。
11 (0x0B) 网关目标设备未能晌应 在网络中不存在从设备。