【Modbus】

网络结构模型(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)变量。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值