【Modbus】

      最后更新:4个月前 手机定位技术交流文章

      网络结构模型(Network Model)

      1、应用层(Application Layer
      应用层确定进程之间通信的性质,以满足用户的需要。不仅要提供引用进程所需要的信息交换和远程操作,而且还要作为应用进程的用户代理,为完成一些为进行信息交换所必需的功能。应用层为操作系统或网络应用程序提供访问网络服务的接口。典型的协议:HTTP FTP TFTP SMTP DNS TELNET HTTPS POP3 DHCP

      2、表示层(Presentation Layer
      主要用于处理两个通信系统中交换信息的表示方式。它包括数据格式交换、数据加密与解密、数据压缩与恢复等功能。

      3、会话层(Session Layer
      在两个节点之间建立端连接。此服务包括建立连接是以全双工还是以半双工的方式进行设置,尽管可以在层4中处理双工方式。本层管理主机之间的会话进程,负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。

      4、传输层(Transport Layer
      传输层负责将上层数据分段并提供到端的、可靠的或不可靠的传输。传输层还要处理端到端的差错控制和流量控制问题。包括全双工或半双工、流控制和错误恢复服务;本层的数据称为“数据段”。传输层协议的代表包括:TCP UDP 等。

      5、网络层(Network Layer
      本层通过寻址来建立两个节点之间的连接,它包括通过互连网络来路由和中继数据;网络层负责对子网间的数据包进行路由选择。本层的数据称为“数据包”。

      6、数据链路层(DataLink Layer
      在此层将数据分帧,并处理流控制。指定拓扑结构,物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。本层的数据称为“数据帧”。

      7、物理层(Physical Layer
      物理层的主要功能是利用物理传输介质为数据链路层提供物理连接,以便透明的传送比特流。规定了激活、维持、关闭通信端点之间的机械特性、电器特性、功能特性以及过程特性。在这一层,数据的单位称为比特(bit)。

      什么是 Modbus

      Modbus是工业界常用的一种通讯协议,可以理解为是一种通讯的约定。

      虽然Modbus已经发展到了极为成熟的阶段,但由于其协议的简单性以及便于在多种通信媒介上实施的应用特点,Modbus仍然是当前工业电子设备之间常用的连接方式之一。在某种程度上来说,Modbus通信协议就是工业领域通信协议的业界标准。在物联网蓬勃发展的当下,了解并掌握广泛应用的Modbus通信协议意义重大。

      Modbus 的起源与发展

      Modbus协议于1979年由Modicon公司(现被Schneider公司收购)设计开发,一经面世因其简单开放的通信方式逐渐成为工业系统中流行的标准,是全球第一个真正用于工业现场的总线协议。

      后来,为了更好地普及和推动Modbus基于以太网(TCP/IP)的分布式应用,施耐德公司将Modbus协议的所有权移交给IDAInterface for Distributed Automation,分布式自动化接口)组织,并成立了Modbu-IDA国际组织,负责推广Modbus标准以及对Modbus产品进行认证。

      Modbus的应用

      应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。
      当在同一Modbus网络上通信时,此协议决定了每个控制器需要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。
      此协议支持传统的RS-232RS-422RS-485和以太网设备。许多工业设备,包括PLCDCS,智能仪表等都在使用。

      Modbus 通信协议特点

      Modbus协议定义了一个控制器能够认识使用的消息结构,而不管它们是经过何种网络进行通信的。因此,底层通信方式可以使用RS232RS485等串行链路,也可以使用TCP/IP以太网链路。当在Modbus网络上通信时,控制器必须要知道该网络中其他从设备的地址,才能识别按地址发来的消息,并作出相应行为。

      简单来说,Modbus通信协议具有以下几个特点:

      • Modbus协议标准开放、公开发布且无版税要求,用户可以免费获取并使用Modbus协议,不需要缴纳许可证费;
      • Modbus最开始使用RS232RS485等串行链路作为底层通信方式,串行总线的接口芯片成本低,而且布线也简单方便;
      • Modbus协议支持多种电气接口,如RS232RS485TCP/IP等,还可以在各种介质上传输,如双绞线、光纤、红外、无线等;
      • Modbus是简单地应用层协议,其协议消息帧格式简单、紧凑、通俗易懂,便于用户理解和使用、厂商开发和集成,方便形成工业控制网络。

      Modbus 硬件与通信

      Modbus协议是一个master/slave架构的协议。有一个节点是master节点,其他使用Modbus协议参与通信的节点是slave节点。每一个slave设备都有一个唯一的地址。在串行和MB+网络中,只有被指定为主节点的节点可以启动一个命令(在以太网上,任何一个设备都能发送一个Modbus命令,但是通常也只有一个主节点设备启动指令)。

      一个Modbus命令包含了打算执行的设备的Modbus地址。所有设备都会收到命令,但只有指定位置的设备会执行及回应指令(地址0例外,指定地址0的指令是广播指令,所有收到指令的设备都会运行,不过不回应指令)。所有的Modbus命令包含了检查码,以确定到达的命令没有被破坏。基本的ModBus命令能指令一个RTU改变它的寄存器的某个值,控制或者读取一个I/O端口,以及指挥设备回送一个或者多个其寄存器中的数据。

      其通信遵循以下的过程:

      • 主设备向从设备发送请求
      • 从设备分析并处理主设备的请求,然后向主设备发送结果
      • 如果出现任何差错,从设备将返回一个异常功能码

      在这里插入图片描述
      主设备从从设备请求信息,最多可达247个 . 每个从设备由1247之间的从设备地址标识。主设备查询从设备并接收从设备返回的信息的过程是Modbus通信的意思。除了从从设备请求信息之外,主设备还可以写入从设备的内部寄存器。

      串行数据在比特流中的设备之间交换,其中每个比特是电压。 二进制数据用1表示,用负电压表示,零用正电压表示。

      Modbus协议定义了功能代码和编码方案,用于将数据传输为单点(1位,线圈)或16位数据寄存器。 根据使用的传输方法封装数据包。Modbus协议使用四个不同的表来存储从设备中的数据。 存在两个存储离散开或关值的线圈和两个存储数值的寄存器。 对于Modbus ASCII,消息使用ASCII字符集传递,使人们更容易阅读。

      Modbus 支持的部分功能代码

      代码 中文名称 寄存器PLC地址 位操作/字操作 操作数量
      01 读线圈状态 00001-09999 位操作 单个或多个
      02 读离散输入状态 10001-19999 位操作 单个或多个
      03 读保持寄存器 40001-49999 字操作 单个或多个
      04 读输入寄存器 30001-39999 字操作 单个或多个
      05 写单个线圈 00001-09999 位操作 单个
      06 写单个保持寄存器 40001-49999 字操作 单个
      15 写多个线圈 00001-09999 位操作 多个
      16 写多个保持寄存器 40001-49999 字操作 多个

      以十进制表示。功能码可以分为位操作和字操作两类。位操作的最小单位为BIT,字操作的最小单位为两个字节。

      线圈寄存器,实际上就可以类比为开关量,每一个bit都对应一个信号的开关状态。所以一个byte就可以同时控制8路的信号。线圈寄存器支持读也支持写,写在功能码里面又分为写单个线圈寄存器和写多个线圈寄存器。对应上面的功能码也就是:0x01 0x05 0x0f

      离散输入寄存器,如果线圈寄存器理解了这个自然也明白了。离散输入寄存器就相当于线圈寄存器的只读模式,他也是每个bit表示一个开关量,而他的开关量只能读取输入的开关信号,是不能够写的。比如我读取外部按键的按下还是松开。所以功能码也简单就一个读的0x02

      保持寄存器,这个寄存器的单位不再是bit而是两个byte,也就是可以存放具体的数据量的,并且是可读写的。比如我我设置时间年月日,不但可以写也可以读出来现在的时间。写也分为单个写和多个写,所以功能码有对应的三个:0x03 0x06 0x10

      输入寄存器,只剩下这最后一个了,这个和保持寄存器类似,但是也是只支持读而不能写。一个寄存器也是占据两个byte的空间。类比我我通过读取输入寄存器获取现在的AD采集值。对应的功能码也就一个0x04

      Modbus报文模型

      在这里插入图片描述

      Modbus协议两种传输方式

      常用的MODBUS通讯规约有两种,一种是MODBUS ASCII,一种是MODBUS RTU。每个设备必须都有相同的传输模式。所有设备都支持RTU模式,ASCII传输模式是选项。

      MODBUSASCII协议和RTU协议相比,MODBUS ASCII协议拥有开始和结束标记,而MODBUS RTU却没有,所以ASCII协议的程序中对数据包的处理能更加方便。MODBUS ASCII协议的DATA域传输的都是可见的ASCII字符,因此在调试阶段就显得更加直观,另外它的LRC校验程序也比较容易编写,这些都是MODBUS ASCII的优点。

      MODBUS ASCII的主要缺点是传输效率低,因为它传输的都是可见的ASCII字符,原来用RTU传输的数据每一个字节,用ASCII的话都要把这个字节拆分两个字节,比如RTU传输一个十六进制数0xF9ASCII就需要传输字符'F'和字符'9',对应的ASCII0x460x39两个字节,这样它的传输的效率肯定就比RTU低。所以一般来说,如果所需要传输的数据量较小可以考虑使用ASCII协议,如果所需传输的数据量比较大,最好能使用RTU协议。

      还有一种Modbus要考虑的东西,那就是Modbus TCP。 这只是在TCP / IP网络上运行的Modbus的实现。Modbus ASCIIModbus TCP之间的主要区别在于,Modbus ASCII所需的LRC错误检查由IP层执行。

      (1)Modbus ASCII
      ASCIIAmericanStandard Code for Information Interchange)传输模式下,消息帧以英文冒号(“:”,ASCII3A Hex)开始,以回车和换号(CRLF,ASCII 0D and 0A Hex)符号结束,允许的传输的字符集为十六进制的0~9A~F;网络中的从设备监视传输通路上是否有英文冒号(“:”),如果有的话,就对消息帧进行解码,查看消息中的地址是否与自己的地址相同,如果相同的话,就接收其中的数据;如果不同的话,则不予理会。
      在这里插入图片描述
      ASCII模式下,每个8位的字节被拆分成两个ASCII字符进行发送,比如十六进制数0xAF,会被分解成ASCII字符“A”“F”进行发送,发送的字符量比RTU增加一倍。ASCII模式的好处是允许两个字符之间间隔的时间长达1s而不引发通信故障,该模式采用纵向冗余校验(Longitudinal Redundancy Check ,LRC) 的方法来检验错误。

      (2)Modbus RTU
      RTURemoteTerminal Unit)模式下,每个字节可以传输两个十六进制字符,比如十六进制数0xAF,直接以十六进制0xAF(二进制:10101111)进行发送,因此它的发送密度比ASCII模式高一倍;RTU模式采用循环冗余校验(CRC),下面是对RTU模式的总结:

      具体格式如图 所示。

      在这里插入图片描述
      (3)Modbus TCP
      modbus TCPmodbus RTU基本相同,但是也存在一些区别

      a. 从机地址变得不再重要,多数情况下忽略。从某种意义上说从机地址被IP地址取代

      b.CRC校验变得不再重要,甚至可以忽略。由于TCP数据包中已经存在校验,为了不重复造轮子,modbus TCP干脆取消了CRC校验。

      TCP模式是为了让Modbus数据顺利在以太网上传输产生的,使用TCP 502端口。该协议物理层,数据链路层,网络层,传输层都是基于TCP协议,只在应用层,将Modbus协议修改后封装进去; 接收端将该TCP数据包拆封后,重新获得原始Modbus帧,然后按照Modbus协议规范进行解析,并将返回的数据包重新封装进TCP协议中,返回到发送端。与串行链路传输的数据格式不同,TCP模式去除了附加地址和校验,增加了报文头。
      在这里插入图片描述

      专业术语

      Modbus开发中的常用专业术语如下:

      • Master:主(站)设备(工业自动化用语)
      • Slave:从(站)设备(工业自动化用语)
      • Client:客户端(IT用语,等同于Master)
      • Server:服务器端(IT用语,等同于Slave)
      • ADU:应用数据单元(Application Data Unit)
      • PDU:协议数据单元(Protocol Data Unit)
      • MSB:最高有效位(Most Significant Bit)
      • LSB:最低有效位(Least Significant Bit)
      • MBAP:Modbus 应用协议(Modbus Application Protocol)
      • PLC:可编程逻辑控制器(Programmable Logic Controller)

      Coil和Registerd的区别

      Modbus中定义的两种数据类型。Coil是位(bit)变量;Register是整型(Word,即16-bit)变量。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:http://www.wangsu123.cn/news/16769.html

          热门文章

          文章分类