# Modbus异常码实例 ## 非法功能码 - 请求:`01 02 00 00 00 01 B9 CA` - 请求帧长度:8字节 - 返回帧:`01 82 01 81 60` - 返回帧长度:5字节 - 解释:从站未实现功能码`0x02`,返回功能码`0x82`和异常码`0x01`,表示非法功能。 ## 03功能码读取非法地址 - 请求:`01 03 27 10 00 01 8F 7B` - 请求帧长度:8字节 - 返回帧:`01 83 02 C0 F1` - 返回帧长度:5字节 - 解释:起始地址`0x2710`等于10000,超出标准保持寄存器有效地址`0~9999`,返回异常码`0x02`,表示非法数据地址。 ## 03功能码读取数量为0 - 请求:`01 03 00 00 00 00 45 CA` - 请求帧长度:8字节 - 返回帧:`01 83 03 01 31` - 返回帧长度:5字节 - 解释:读取寄存器数量为0,不符合功能码要求,返回异常码`0x03`,表示非法数据值。 ## 05功能码写入非法线圈值 - 请求:`01 05 00 00 12 34 C0 BD` - 请求帧长度:8字节 - 返回帧:`01 85 03 02 91` - 返回帧长度:5字节 - 解释:05功能码只允许使用`FF 00`表示ON或`00 00`表示OFF,写入值`12 34`非法,返回异常码`0x03`。 ## 06功能码写入非法地址 - 请求:`01 06 27 10 00 01 43 7B` - 请求帧长度:8字节 - 返回帧:`01 86 02 C3 A1` - 返回帧长度:5字节 - 解释:写入地址`0x2710`等于10000,超出标准保持寄存器有效地址`0~9999`,返回异常码`0x02`。 ## 0F功能码字节数错误 - 请求:`01 0F 00 00 00 09 01 01 6E 95` - 请求帧长度:10字节 - 返回帧:`01 8F 03 04 31` - 返回帧长度:5字节 - 解释:请求写入9个线圈时应携带2个数据字节,但帧中的字节数字段为1,返回异常码`0x03`。 ## 10功能码写入数量为0 - 请求:`01 10 00 00 00 00 00 09 50` - 请求帧长度:9字节 - 返回帧:`01 90 03 0C 01` - 返回帧长度:5字节 - 解释:写入寄存器数量为0,不符合功能码要求,返回异常码`0x03`。 ## 48功能码读取非法大地址 - 请求:`01 48 01 11 6F 00 01 CD 69` - 请求帧长度:9字节 - 返回帧:`01 C8 02 F6 01` - 返回帧长度:5字节 - 解释:起始地址`0x01116F`等于69999,超出扩展保持寄存器有效地址`0~69998`,返回异常码`0x02`。 ## 48功能码读取数量为0 - 请求:`01 48 00 00 00 00 00 04 48` - 请求帧长度:9字节 - 返回帧:`01 C8 03 37 C1` - 返回帧长度:5字节 - 解释:读取寄存器数量为0,不符合功能码要求,返回异常码`0x03`。 ## 从站地址不匹配 - 请求:`02 03 00 00 00 01 84 39` - 请求帧长度:8字节 - 返回帧:无 - 返回帧长度:0字节 - 解释:当前从站地址为`0x01`,请求帧的目标从站地址为`0x02`,因此当前从站直接忽略该帧,不返回正常响应或异常响应。