Modbus 异常响应
前面 Modbus 功能码 中提到,对于广播模式以外的查询报文,如果一切正常,从站设备会返回一个正常响应报文。但是,如果出现差错,会怎么办呢?—— 没错,从站设备会返回异常响应报文。
异常响应
通常来说,在 Modbus 主设备(客户端)和从设备(服务器)的通信过程中,存在以下 4 种处理反馈:
- 正常接收,正常处理,返回正常响应报文。
- 因为通信错误等原因,造成从站设备没有接收到查询报文,主站设备将按超时处理。
- 从站设备接收到查询报文,但报文存在错误(例如 LRC、CRC 错误等),从站设备将丢弃报文不响应,主站设备将按超时处理。
- 从站设备接收到正确的报文,但是超过处理范围(例如不存在的功能码或者寄存器等),从站设备将按返回包含异常码(Exception Code)的响应报文。
下图大致展示了 Modbus 的查询报文、正常响应报文和异常响应报文的帧格式。
异常功能码
异常响应报文由从站地址、功能码以及异常码构成。其中,功能码与正常响应报文不同,在异常响应报文中,功能码最高位(即 MSB)被设置为 1。
因为 Modbus 协议中功能码占用一个字节,因此可以用如下表达式描述正常功能码和异常功能码的关系:
异常功能码 = 正常功能码 + 0x80