说起协议,我们对http协议比较熟悉,因为每天上网都离不开它。

http协议暂且不表,今天我介绍下modbus协议。modbus是一种应用层协议,它主要在工控场景下使用,比如PLC控制设备,上位机和PLC通过modbus协议通信。

1、modbus的概况

modbus协议-LMLPHP

 注意:数组长度只是个参考,后面会有详细说明。数据类型也没有列举完。modbus的网络拓扑结构也不是只有master/slave结构,还有其它的结构,比如peer to peer,每一个网络节点既可以是master,也可以充当slaver。不过master/slave结构还是比较典型的网络拓扑。

2、master/slave结构

Reques&Response

modbus协议-LMLPHP

正常的请求相应如上图所示,如果发生异常的情况,请看下图:

 modbus协议-LMLPHP

注意,在modbus协议文档中,提到Query和Response,Query就是Request,Request&Response更多地是参考了Http。上图中的Client相当于Master,Server相当于Slave。为什么呢?因为Client首先发起了请求,所以它就是Master,Master发起查询,Slave收到查询后,解析消息,然后返回。这一点,可能初学者容易混淆。

3、modbus消息体

modbus协议-LMLPHP

这里的Start和End  3.5 Char time,意思是消息的每一帧前后间隔的时间。要明确一点,3.5个字符时间是最小间隔时间。为什么需要前后间隔呢?因为modbus rtu是一个流式数据,也就是数据流,它不像modbus  ASCII协议,开始位置用:标识。既没有标识,还不停顿,收到消息的一方,就懵逼了,心想:“我该如何处理呢?”

4、modbus消息解析

    modbus协议-LMLPHP

这是请求包的解析,通俗地说,就是:让哪个Slave,在哪个寄存器上做什么。这就涉及到三个要素: 从机地址、功能码、偏移地址(寄存器地址)。上面的含义:地址为1的从机,从00 0E寄存器开始读取10个寄存器的值。最后两个字节是CRC校验位,验证数据的完整性。如果网络传输过程中,出现数据丢失,就会知道。

modbus协议-LMLPHP

Response消息,01和04都是请求时就包含的,表示从机的当前操作返回了数据。20表示10个寄存器的数据量,后面紧接着是数据,最后两位仍然是校验位。

5、modubs rtu和moudus ASCII协议区别

  modbus协议-LMLPHP

注意:上图中的Function  04,ASCII码这边,缺失一个4,它是把十六进制的每一位都当字符来传,每个字符占一个字节,所以Rtu用一个字节,它就得两个字节。

modbus协议-LMLPHP

从上面两个图上可以看出,modbus rtu的优点很明显,在相同的速率下,传输的字节数基本上是modbus  ASCII的两倍。那moubus  ASCII的优势在哪里?它在传输过程中,字符之间的传输时间间隔是可以长一点的,而不会出现问题。

6、PDU和ADU

modbus协议-LMLPHP

从上图可以看出,ADU是一个完成的数据包,PDU是解析时,最后要拿出来的数据。modbus rtu的数据量最大不能超过256个字节。所以,PDU最大字节数是253。同时,说明了modbus Tcp和Rtu的区别,就是有前导字节,没有校验位。

 7、设备内存分布

modbus协议-LMLPHP

 8、常用功能码

modbus协议-LMLPHP

 9、modbus实际应用

modbus协议-LMLPHP

油田注水仪数据接收及解析

10、小结

本篇就modbus协议的方方面面做了介绍,尤其是modbus不同协议及消息帧的解析,主从服务的交互等,希望对初入这一行的同伴有所帮助。

06-22 03:03