• modbus协议


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

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

    1、modbus的概况

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

    2、master/slave结构

    Reques&Response

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

     

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

    3、modbus消息体

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

    4、modbus消息解析

        

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

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

    5、modubs rtu和moudus ASCII协议区别

      

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

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

    6、PDU和ADU

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

     7、设备内存分布

     8、常用功能码

     9、modbus实际应用

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

    10、小结

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

  • 相关阅读:
    SPSS—回归—曲线估计方程案例解析
    SPSS—非线性回归(模型表达式)案例解析
    SPSS—回归—二元Logistic回归案例分析
    SPSS-两变量相关性分析
    SPSS-单因素方差分析(ANOVA) 案例解析
    SPSS-比较均值-独立样本T检验 案例解析
    做MFC的时候引用了头文件但VC还是报missing storage-class or type specifiers
    GetDocument missing storage-class or type specifiers的解决方法
    Python如何安装模块
    AE IRasterCursor 改变栅格图层像素值
  • 原文地址:https://www.cnblogs.com/wangqiang3311/p/14915242.html
Copyright © 2020-2023  润新知