目录
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协议
信息帧的格式:
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校验)。
下行帧中(主机到从机),通过功能码告诉从机执行什么动作。在上行帧(从机返回主机)中,从机发送的功能码与主机发送来的功能码一样,并表明从机已响应主机进行的操作。
2.CRC校验(循环冗余校验码)
是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。
CRC-16 x16+x15+x2+1 简记式8005(1000 0000 0000 0101)
CRC码由发送设备计算,放置于发送信息的尾部。接受信息的设备再重新计算接收到的信息的CRC码,比较计算得到的CRC码是否与接收到的相符(或将接收到的信息除以约定的除数,应无余数),如果不相符(有余数),则表明出错。(模2除,实际上是异或)。上述算式的商为11,余数为1。
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,则说明数据帧没有出错。