目录

  • 前言
  • MODBUS应用协议
  • 应答方式
  • 无应答
  • 正常应答
  • RTU模式
  • TCP模式
  • 异常应答
  • RTU模式
  • TCP模式


前言

学习了MODBUS通信方式.之后。学习一下MODBUS的应答和错误检测机制。
这篇文章在学习过程中作为记录,如有错误,请多指教。

MODBUS应用协议

MODBUS是一种简单的客户机/服务器应用协议。
通信时客户机(主机)发起请求,服务器(从机)对请求作出应答。请求和应答构成了一次完整的通信。
服务器在应答时间必须在客户机规定的时间之内,否则客户机会采用超时处理,回应的格式也要遵循通信协议的规定。

应答方式

MODBUS有三种应答情况,分别是无应答,正常应答,异常应答(指令有错误的时候)。

无应答

我们知道回应请求要在主机规定的时间内,否则主机会进入超时处理。
无应答一般发生在以下错误的时候:

  1. 通信格式不正确,比如波特率不统一。
  2. 通信双方正常通信,但是帧校验不通过,此时从机不发送消息。
  3. 通信地址错误,没有从机发起回应。

正常应答和异常应答是在通信成功时的应答

正常应答

主站发来的指令正常,从站用相同的数据格式正常回应,客户机复制原始功能码。

java modbus校验位怎么算 modbus校验错误处理_数据区

RTU模式

请求:

起始码

地址码

功能码

数据区

校验码

停止码

至少3.5字符间隔时间

01-F7

功能码

请求数据

CRC

至少3.5字符间隔时间

响应:

起始码

地址码

功能码

数据区

校验码

停止码

至少3.5字符间隔时间

01-F7

功能码

响应数据

CRC

至少3.5字符间隔时间

除了数据区和校验码,其他部分都要相同。

TCP模式

请求格式:

事物处理标识符

协议标识符

长度

单元标识符

功能码

请求数据

回应格式:

事物处理标识符

协议标识符

长度

单元标识符

功能码

响应数据

响应数据满足功能码的指定的格式。
MBAP报文头中除长度外都应一致。

异常应答

对于请求有错或异常的情况下,从站回应是要将功能码最高位置1,数据区存放错误代码(异常码)用于告诉主站发生的错误。

MODBUS规定了功能码,对应的异常功能码也自然有了规定,但是MODBUS没有规定错误代码(异常码),错误代码(异常码)由用户规定。

java modbus校验位怎么算 modbus校验错误处理_数据区_02

RTU模式

请求:

起始码

地址码

功能码

数据区

校验码

停止码

至少3.5字符间隔时间

01-F7

功能码

请求数据

CRC

至少3.5字符间隔时间

响应:

起始码

地址码

功能码

数据区

校验码

停止码

至少3.5字符间隔时间

01-F7

异常功能码(功能码最高位置1)

异常码(说明具体错误)

CRC

至少3.5字符间隔时间

响应帧数据除了标记区域都应与请求帧相同。

TCP模式

请求格式:

事物处理标识符

协议标识符

长度

单元标识符

功能码

请求数据

回应格式:

事物处理标识符

协议标识符

长度

单元标识符

异常功能码(功能码最高位置1)

异常码(说明具体错误)

响应帧数据除了标记区域都应与请求帧相同。
MBAP报文头中除长度外都应一致。