目录

1. Modbus 协议

1.1 Modbus RTU协议

1.2  3.5个字符的计算方法

2.CRC校验(循环冗余校验码)


1. Modbus协议

Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议。Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。

  • 主设备向从设备发送请求;
  • 从设备分析并处理主设备的请求,然后向主设备发送结果;
  • 如果出现任何差错,从设备将返回一个异常功能码。

Modbus有下列三种通信方式:

(1)以太网:对应的通信模式是Modbus TCP/IP

(2)异步串行传输(各种介质如有线RS-232-/422/485/;光纤、无线等):对应的通信模式是Modbus RTU或Modbus  ASCII

(3)高速令牌传递网络:对应的通信模式是Modbus PLUS。

1.1 Modbus RTU协议

信息帧的格式:

java modbus rtu协议数据对接 modbus rtu协议解析_多项式

 

java modbus rtu协议数据对接 modbus rtu协议解析_校验码_02

1.2  3.5个字符的计算方法

1个字符包括1位起始位、8位数据位(一般情况)、1位校验位(或者没有)、1位停止位(一般情况下)=11位;

假设你选择的波特率为9600baud(又满足每个信号波形包含一个二进制位),即9600bit/s,那么1bit所需的传输时间就是1/9600秒,这样3.5个字符时间=3.5*11*1/9600秒。

主要分为:地址码,功能码,数据,CRC校验(下文会仔细介绍CRC校验)。

java modbus rtu协议数据对接 modbus rtu协议解析_校验码_03

下行帧中(主机到从机),通过功能码告诉从机执行什么动作。在上行帧(从机返回主机)中,从机发送的功能码与主机发送来的功能码一样,并表明从机已响应主机进行的操作。

2.CRC校验(循环冗余校验码)

是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。

CRC-16        x16+x15+x2+1         简记式8005(1000 0000 0000 0101)

CRC码由发送设备计算,放置于发送信息的尾部。接受信息的设备再重新计算接收到的信息的CRC码,比较计算得到的CRC码是否与接收到的相符(或将接收到的信息除以约定的除数,应无余数),如果不相符(有余数),则表明出错。(模2除,实际上是异或)。上述算式的商为11,余数为1。

java modbus rtu协议数据对接 modbus rtu协议解析_多项式_04

CRC校验码计算示例

现假设选择的CRC生成多项式为G(X) = X4 + X3 + 1,要求出二进制序列10110011的CRC校验码。下面是具体的计算过程:

①将多项式转化为二进制序列,由G(X) = X4 + X3 + 1可知二进制一种有五位,第4位、第三位和第零位分别为1,则序列为11001(除数的最高位和最低位必须为1。)

②多项式的位数位5,则在数据帧的后面加上5-1位0,数据帧变为101100110000,然后使用模2除法除以除数11001,得到余数。

③将计算出来的CRC校验码添加在原始帧的后面,真正的数据帧为101100110100,再把这个数据帧发送到接收端。

④接收端收到数据帧后,用上面选定的除数,用模2除法除去,验证余数是否为0,如果为0,则说明数据帧没有出错。

参考:

Modbus通讯协议(二)——RTU - 简书