zoukankan      html  css  js  c++  java
  • 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不同协议及消息帧的解析,主从服务的交互等,希望对初入这一行的同伴有所帮助。

  • 相关阅读:
    课堂作业02
    模仿JavaAppArguments.java示例,编写一个程序,此程序从命令行接收多个数字,求和之后输出结果。
    Feign使用Hystrix无效原因及解决方法
    解决Spring Boot 使用RedisTemplate 存储键值出现乱码 xacxedx00x05tx00
    consul怎么在windows下安装
    java运行jar命令提示没有主清单属性
    Maven parent.relativePath
    Maven的pom.xml文件结构之基本配置packaging和多模块聚合结构(微服务)
    redis开启远程访问
    kibana使用
  • 原文地址:https://www.cnblogs.com/wangqiang3311/p/14915242.html
Copyright © 2011-2022 走看看