有效功能码说明(十进制)
| 功能码 | 说明 |
|---|---|
| 01 | 读取线圈状态 |
| 02 | 读取输入状态 |
| 03 | 读取保持寄存器 |
| 04 | 读取输入寄存器 |
| 05 | 强置单线圈 |
| 06 | 预置单寄存器 |
| 07 | 读取异常状态 |
| 08 | 回送诊断校验 |
| 09 | 编程(只用于484) |
| 10 | 控询 |
| 11 | 读取事件计数 |
| 12 | 读取通信事件记录 |
| 13 | 编程(184/384/484/584等) |
| 14 | 探寻 |
| 15 | 强置多线圈 |
| 16 | 预置多线圈 |
| 17 | 报告多寄存器 |
| 18 | 可使主机模拟编程功能 |
| 19 | 重置通信链路 |
| 20 | 读取通用参数 |
| 21 | 写入通用参数 |
| 22 | 屏蔽写寄存器 |
| 23 | 读/写多个寄存器 |
| 43 | 读设备别识码 |
| 22-42, 44-64 | 保留作为扩展功能 |
| 65-72 | 保留以备用功能所用 |
| 73-119 | 非法功能 |
| 120-127 | 保留,留作内部作用 |
| 128-255 | 保留,用于异常应答 |
异常响应
主设备(客户端)或从设备(服务器)中的任何一个出现异常晌应,都会导致数据处理错误。在主设备(客户端)发出一个请求以后,可能出现以下事件中的一种:
- 如果从设备(服务器)从主设备(客户端)接收了请求,其中没有出现通讯错误,并且正确处理了请求,那么它会返回一个正常晌应。
- 如果从设备(服务器)因为通讯错误而没有从主设备(客户端)接收请求,那么它不会返回晌应。主设备程序最终会为请求处理一个超时条件。
- 如果从设备(服务器)从主设备(客户端)接收了请求,但是检测到了一个通讯错误,那么它不会返回晌应。主设备程序最终会为请求处理一个超时条件。
- 如果从设备(服务器)从主设备(客户端)接收了请求,其中没有出现通讯错误,但是无法处理它(比如该请求是读取一个不存在的寄存器),那么从设备就会返回一个异常晌应,以通知主设备出现了何种错误。
异常帧
从设备向主设备发送了一个异常帧,以报告异常晌应。一个异常帧包括四个域:
| 域 | 定义 | 大小 | 说明 |
|---|---|---|---|
| 1 | 从设备号 | 1 个字节 | 请求的目的地址1–247:唯一的目的地址 |
| 2 | 异常功能代码 | 1 个字节 | 请求功能代码 +128 (0x80) |
| 3 | 异常代码 | n 字节 | 参见下节 |
| 4 | 检查 | 2 字节 | CRC16(检查传输错误) |
异常代码
异常晌应帧有两个将其区别于普通晌应帧的字段:
- 异常晌应的异常功能代码等于原请求的功能代码加上 128 (0x80)。
- 异常代码取决于从设备所遇到的通讯错误。
下表介绍了由断路器处理的异常代码:
| 异常代码 | 名称 | 说明 |
|---|---|---|
| 01 (0x01) | 非法功能 | 在请求中接收的功能代码不是从设备的一个授权操作。从设备可能处于错误状态,无法处理特定请求。 |
| 02 (0x02) | 非法数据地址 | 从设备接收的数据地址不是从设备的一个授权地址。 |
| 03 (0x03) | 非法数据值 | 在请求数据栏中的数值不是从设备的一个授权值。 |
| 04 (0x04) | 从设备故障 | 从设备未能执行一个请求的操作,因为出现了一个无法修复的错误。 |
| 05 (0x05) | 确认 | 从设备接受了请求,但是需要较长的时间来处理它。 |
| 06 (0x06) | 从设备繁忙 | 从设备忙于处理另一个命令。主设备必须在从设备空闲后发送请求。 |
| 07 (0x07) | 否定确认 | 从设备无法执行主设备发送的编程请求。 |
| 08 (0x08) | 存储器奇偶校验错误 | 从设备在尝试读取扩展存储器的时候从存储器中检测到一个奇偶校验错误。 |
| 10 (0x0A) | 网关通道不可用 | 网关过载,或者没有正确配置。 |
| 11 (0x0B) | 网关目标设备未能晌应 | 在网络中不存在从设备。 |
