目录
- 前言
- MODBUS应用协议
- 应答方式
- 无应答
- 正常应答
- RTU模式
- TCP模式
- 异常应答
- RTU模式
- TCP模式
前言
学习了MODBUS通信方式.之后。学习一下MODBUS的应答和错误检测机制。
这篇文章在学习过程中作为记录,如有错误,请多指教。
MODBUS应用协议
MODBUS是一种简单的客户机/服务器应用协议。
通信时客户机(主机)发起请求,服务器(从机)对请求作出应答。请求和应答构成了一次完整的通信。
服务器在应答时间必须在客户机规定的时间之内,否则客户机会采用超时处理,回应的格式也要遵循通信协议的规定。
应答方式
MODBUS有三种应答情况,分别是无应答,正常应答,异常应答(指令有错误的时候)。
无应答
我们知道回应请求要在主机规定的时间内,否则主机会进入超时处理。
无应答一般发生在以下错误的时候:
- 通信格式不正确,比如波特率不统一。
- 通信双方正常通信,但是帧校验不通过,此时从机不发送消息。
- 通信地址错误,没有从机发起回应。
正常应答和异常应答是在通信成功时的应答
正常应答
主站发来的指令正常,从站用相同的数据格式正常回应,客户机复制原始功能码。
RTU模式
请求:
起始码 | 地址码 | 功能码 | 数据区 | 校验码 | 停止码 |
至少3.5字符间隔时间 | 01-F7 | 功能码 | 请求数据 | CRC | 至少3.5字符间隔时间 |
响应:
起始码 | 地址码 | 功能码 | 数据区 | 校验码 | 停止码 |
至少3.5字符间隔时间 | 01-F7 | 功能码 | 响应数据 | CRC | 至少3.5字符间隔时间 |
除了数据区和校验码,其他部分都要相同。
TCP模式
请求格式:
事物处理标识符 | 协议标识符 | 长度 | 单元标识符 | 功能码 | 请求数据 |
回应格式:
事物处理标识符 | 协议标识符 | 长度 | 单元标识符 | 功能码 | 响应数据 |
响应数据满足功能码的指定的格式。
MBAP报文头中除长度外都应一致。
异常应答
对于请求有错或异常的情况下,从站回应是要将功能码最高位置1,数据区存放错误代码(异常码)用于告诉主站发生的错误。
MODBUS规定了功能码,对应的异常功能码也自然有了规定,但是MODBUS没有规定错误代码(异常码),错误代码(异常码)由用户规定。
RTU模式
请求:
起始码 | 地址码 | 功能码 | 数据区 | 校验码 | 停止码 |
至少3.5字符间隔时间 | 01-F7 | 功能码 | 请求数据 | CRC | 至少3.5字符间隔时间 |
响应:
起始码 | 地址码 | 功能码 | 数据区 | 校验码 | 停止码 |
至少3.5字符间隔时间 | 01-F7 | 异常功能码(功能码最高位置1) | 异常码(说明具体错误) | CRC | 至少3.5字符间隔时间 |
响应帧数据除了标记区域都应与请求帧相同。
TCP模式
请求格式:
事物处理标识符 | 协议标识符 | 长度 | 单元标识符 | 功能码 | 请求数据 |
回应格式:
事物处理标识符 | 协议标识符 | 长度 | 单元标识符 | 异常功能码(功能码最高位置1) | 异常码(说明具体错误) |
响应帧数据除了标记区域都应与请求帧相同。
MBAP报文头中除长度外都应一致。