Modbus 异常代码
异常响应
客户端或服务器中的任何一方出现异常响应,都会导致数据处理错误。在客户端发出请求以后,可能出现以下事件中的一种:
-
如果服务器从客户端接收了请求,其中没有出现通讯错误,并且正确处理了请求,那么它会返回一个正常响应。
-
如果服务器因为通讯错误而没有从客户端接收到请求,那么服务器不会返回响应。客户端程序最终会为请求处理一个超时条件。
-
如果服务器从客户端接收到请求但检测到通讯错误,那么服务器不会返回响应。客户端程序最终会为请求处理一个超时条件。
-
如果服务器从客户端接收了请求,其中没有出现通信错误,但是无法处理它(比如该请求是读取一个不存在的寄存器),那么服务器会返回一个异常响应,以通知客户端出现了何种错误。
异常帧
服务器向客户端发送了异常帧,以报告异常响应。一个异常帧包括四个字段:
字段 |
定义 |
大小 |
描述 |
---|---|---|---|
1 |
服务器编号 |
1 个字节 |
请求的目的地址
|
2 |
异常功能代码 |
1 个字节 |
请求功能代码 +128 (0x80) |
3 |
异常代码 |
n 个字节 |
参见下节 |
4 |
检查 |
2 字节 |
CRC16(检查传输错误) |
异常代码
异常响应帧有两个令其区别于普通响应帧的字段:
-
异常响应的异常功能代码等于原请求的功能代码加上 128 (0x80)。
-
异常代码取决于服务器所遇到的通讯错误。
下表介绍了由 ATSE 处理的异常代码:
异常代码 |
名称 |
描述 |
---|---|---|
01 (0x01) |
非法功能 |
请求所收到的功能代码并非服务器的授权操作。服务器可能处于错误状态,无法处理特定请求。 |
02 (0x02) |
非法数据地址 |
服务器接收的数据地址不是服务器的授权地址。 |
03 (0x03) |
非法数据值 |
请求数据字段中的值并非服务器的授权值。 |
04 (0x04) |
服务器设备故障 |
由于存在不可逆的错误,服务器未能执行所请求的操作。 |