一、Modbus RTU协议介绍
1.协议概述
-
Modbus RTU协议是Modicon公司首先推出的通信协议;2、Modbus RTU协议是一种主从式串行异步半双工通信协议;
-
Modbus RTU协议是一种基于RS485\RS422,RS232物理层的通信协议;
-
RS485
-
-
Modbus RTu 协议通信中每个字符通信格式规定为1个起始位、8个数据位、1个校验位、1/2个停止位;
-
Modbus RTU协议传输过程中每1个字节都以16进制方式直接进行传输;
-
Modbus RTu协议使用CRC校验作为错误检查。
2.协议数据格式
起始符 | 地址码 | 功能码 | 数据区 | 校验码 | 结束符 |
---|---|---|---|---|---|
>=3.5字符时间 | 8位 | 8位 | N*8位 | 16位 | >=3.5字符时间 |
-
起始符:以大于等于3.5个字符时间作为一帧数据的开始;
这个时间是通过通信波特率来计算的。波特率表示单位时间内传送的码元符号的个数,它是对符号传输速率的一种度量,它用单位时间内载波调制状态改变的次数来表示,波特率即指一个单位时间内传输符号的个数。 当波特率为9600 bit/s,其为在1000毫秒中可以传输9600个位,那么传输以为的时间为9.6毫秒。再一个字节由起始位(1)、数据位(8)、校验为(1)、停止位(1),一共为11位。3.5个字符一共为38.5位,再38.5/9.6=4毫秒
-
地址码:从站的地址,其理论范围为1~254,实际为1~27;
-
功能码:主站发送,告诉从站执行的功能,其范围为1~255,常用功能码后续详解;
-
数据区:具体数据内容,不同功能码内容不同,具体内容后续详解﹔
-
校验码:CRC校验码,校验码的范围为由地址码开始到数据区结束,具体算法后续详解;
-
结束符:以大于等于3.5个字符时间作为一帧数据的结束。
3.协议寄存器种类说明
4.协议功能码说明
5.协议CRC校验
生成CRC校验值的过程如下:
-
预置一个值为FFFFH的16位寄存器,此寄存器为CRC寄存器;
-
把通信数据帧的第1个8位二进制数据与CRC寄存器的低8位进行异或运算,异或的结果仍存放于该CRC寄存器中;
-
把CRC寄存器的内容右移1位,用o填补最高位,并检测移出的位是0还是1;
-
如果移出的位为o,则重复步骤3,如果移出的位为1,则cRc寄存器与AOO1H进行异或运算;
-
重复步骤3和4,直到右移8次,这样通信数据帧的第1个8位二进制数据就全部进行了处理;
-
重复步骤2、3、4、5,依次进行通信数据帧中的剩余字节;
-
将该通信数据帧中所有字节数据按上述步骤计算完成后,得到的16位CRC寄存器的高、低8位进行交换;
-
最后得到的CRC寄存器内容即为CRC校验码。
二、Modbus RTU 通信协议03功能码报文格式
Modbus RTU主站发送:
Modbus RTU从站正确返回:
Modbus RTU从站异常返回: