1.0 介绍
Modbus是由AEG-Modicon(莫迪康)公司开发的串行通信协议。它最初设计用于可编程逻辑控制器(PLC)。它是一种应用层消息传递协议,运行在开放系统互连(OSI)协议模型的第7层,提供连接在不同类型网络上的设备之间的客户端-服务器通信。
Modbus协议层如下图所示,它定义了一种通过另一设备访问和控制设备的方法,而不考虑所涉及的物理网络的类型。
Modbus不需要接口,就像许多其他总线一样。用户可以选择RS-422, RS-485或20 mA电流回路。与其他总线相比,Modbus速度相对较慢,但在控制仪表制造商和用户中被广泛接受,具有决定性优势。
自1979年以来,Modbus成为工业串行总线的事实标准。Modbus没有正式的认证方式,制造商的责任是确认他们的产品与Modbus设备兼容。协议描述了一个设备访问另一个设备的方式,如何接收信息,以及如何响应查询。在出现错误的情况下,协议提供了一种向用户发送相应命令的机制。通过将Modbus协议作为数据包嵌入到其他网络的协议中,通信可以在Modbus网络上进行,也可以在其他网络(如以太网)上进行。
Modbus串行通信协议基于主/从原理,由主设备发起事务。该协议提供一个主设备和多达247个从设备。
Modbus的一些特性是固定的,一些特性是用户可以选择的。固定的特征是帧格式、帧序列、通信错误和异常条件的处理以及所执行的功能。可选择的特性是传输介质和传输特性。用户特征一旦设置,在系统运行时就不能更改。
2.0 通信栈
Modbus的实现方法如下:
以太网上的传输控制协议(TCP)/互联网协议(IP)。
异步串行传输在不同的媒质,如:EIA/TIA-232E, EIA-422, EIA/TIA-485-A; 光纤, 无线通信等.
Modbus Plus — 一种高速令牌传递方法。
下图,展示了使用TCP/IP、主/从和Modbus Plus物理层实现Modbus通信栈的过程。
3.0 网络结构
Modbus网络架构方案如下图所示。
不同的设备,如PLC、人机界面(HMI)、输入/输出(I/O)等,可以通过单独的网关连接到Modbus TCP/IP。不同的Modbus协议,即MB+上的Modbus, RS-232上的Modbus,RS-485上的Modbus通过TCP/IP发起远程通信。
4.0 通信事务
Modbus串行通信采用主/从协议。主站发起查询,从站通过向主站提供必要的数据或根据请求采取适当的操作来响应。 从站的响应如下:
采取适当的行动
向主站提供必要的数据/信息
通知主站,必要的行动无法执行。
当从站无法按照主站的请求执行所需的操作时,将向主站发送一条错误消息(称为异常响应)。对主站的异常响应包含以下内容:
响应从站的地址
从站被请求执行的动作和
说明行动为什么不能执行。
如果消息包含错误,从站会忽略它。在这种情况下,因为它无法收到从响应的响应,主站将查询重发给从站。
4.1. 主/从和广播通信
主站可以一个一个地对从站寻址(单播模式),也可以同时给所有从站寻址(广播模式)。从站响应单播消息,但不响应多播消息。主/从通信和广播通信方式分别如下图所示:
4.2 查询响应周期
查询由主站发起,从站响应它。查询响应周期是Modbus网络中所有通信事务的基础。来自主站的查询包含四部分:设备地址、功能码、数据/消息和错误检查码。从站的响应结构与主站的响应结构相同。下图显示了查询响应周期。
4.2.1 地址段
主站在其查询中发送的地址字段包含消息所指向的从站的地址。取值范围为 1到247。当从站发送它的响应时,它将自己的地址放在它的地址字段中,以便主站可以知道正确的从站正在响应。地址0指定用于广播。所有从站都读取它们,但不向来自主站的查询提供任何响应。
4.2.2 功能段
虽然不是所有设备都支持所有的功能码,但是功能码的取值范围是1 ~ 255。当功能码在查询中从主站到达从站时,从站就会知道它必须采取的操作。从站所采取的动作的例子可能包括:读取输入状态,读取寄存器内容,改变从站内的状态,操作继电器线圈等。
当从站向主站发送响应时,它重复接收到的佛南功能码。它表示从站已经理解了来自主站的查询并采取了相应的行动。如果从站无法执行指令,则生成异常响应,从站使用功能码和数据字段将异常的原因告知主站。
在生成异常响应的情况下,从站将原始功能码返回给主站,但将MSB设置为1。在这种情况下,从站的响应消息的数据字段向主站指示所发生的错误的性质。因此,主站可以基于此采取适当的操作。主站所采取的行动可能是重复原始消息,或尝试诊断问题,或设置警报等。
4.2.3 数据段
查询中从站接收到的数据字段通常包括寄存器值、寄存器地址或寄存器范围。有些功能不需要数据字段,此时,来自主站的查询中不包含d数据字段。
如果没有发生错误,则从站使用响应的数据字段将数据传递回主主站。当错误发生时,从站的数据字段传递更多的信息,告知主站所检测到的错误的性质。
Modbus本身不编码数据,因此可以采用许多编码方案。用户可以就网络通讯协议做出选择。
4.2.4 错误校验段
错误校验字段允许主站确认从从站接收到的消息的完整性。所采用的错误校验方法取决于所选择的传输模式。在远程终端单元(RTU)模式下,可以采用循环冗余检查(CRC),或者,对ASCII模式的传输采用LRC。
接收设备收到完整消息后,计算错误校验值,并与收到的消息中的错误校验值进行比较。如果两者一致,则没有发生错误并采取相应的行动。如果两个值不一致,接收到的消息将被拒绝。
5.0 协议说明:PDU 和 ADU
Modbus可以在不同类型的总线和网络上实现,但Modbus部分协议数据单元(PDU)必须包含该总线和网络中。PDU由两个字段组成:功能码和数据。
两种最常见的Modbus实现类型是以太网(TCP/IP)和串行通信,串行通信通可以是RS232、RS422或RS485。最常见的Modbus串行协议是Modbus-RTU。无论用于特定应用程序的协议类型是什么,特定于应用程序的寻址和错误校验都附加到PDU上,从而产生应用程序数据单元(ADU)。如下图所示,ADU表示Modbus帧。
6.0 传输模式
在Modbus网络中传输串行数据有两种传输方式:RTU和ASCII。它们在许多方面有所不同:在消息字段中包装信息的方式、解释消息的比特内容的方式、解码消息的方式以及在给定波特率下的操作速度。
不同的模式不能同时使用,用户可以为特定的应用程序选择特定的模式。RTU模式比ASCII模式更快、更健壮。因此,在消息传输方面,它比ASCII形式有更多的应用
RTU传输模式有时被称为Modbus-B, ASCII传输模式被称为Modbus-A。ASCII模式下的典型消息长度大约是等效RTU消息长度的两倍。 在ASCII传输模式下,消息中的每个字节以两个ASCII字符的形式传输,在RTU传输模式下,消息中的每个字节以一个包含两个十六进制数字的8位二进制数的形式发送。
通过将Modbus数据封装在TCP/IP报文中,Modbus报文也可以在局域网和广域网中传输。
7.0 消息分帧
对于消息的传输,在其最终传输之前构造一个帧。帧由开始字符和结束字符、单播设备地址或广播设备地址、功能码、数据和错误校验码组成。
7.1 ASCII 分帧
Modbus ASCII 帧由六个字段组成,如下图所示。
帧以冒号(:)开头,它是ASCII字符3Ah, h表示十六进制。帧以一个end结束,它是一个回车换行符,用两个ASCII字符 0Dh和0Ah表示。中间其余四个字段用十六进制字符 0-9和A-F表示。
ASCII模式允许两个连续传输之间的间隔为1秒,而不会产生任何错误。连接到Modbus网络的所有设备持续监视冒号字符,冒号字符将代表ASCII字符的开始。如果一个特定的设备发现与它自己的地址匹配,那么它将开始解码功能代码和其他字段,并采取相应的行动。
7.2 RTU 分帧
在这种模式下,消息帧以至少3.5倍字符长度的静默时间间隔开始。消息以相同的3.5倍字符长度的时间间隔结束。在开始字段之后,接收设备将监听地址字段,以了解消息是否要发送到该设备。RTU帧格式如下图所示。整个消息帧必须在一个连续流中传输,否则将产生错误。
8.0 Modbus TCP/IP
开放的Modbus TCP/IP规范于1999年引入。使用Modbus TCP/IP协议有几个优点,如简单、使用标准以太网、开放等。在单个站点上可以轻松实现超过1 kB/秒的传输速率。
Modbus TCP/IP是一种互联网协议。它是一个TCP包装过的Modbus协议。因此,Modbus设备可以通过Modbus TCP/IP进行通信。网关设备只需要从物理层(RS-232、RS-485或其他)转换到以太网,并将Modbus协议转换为Modbus TCP/IP。
下图 (a,b)显示了Modbus TCP/IP协议层以及OSI层,以及分别封装在Modbus TCP/IP框架中的Modbus帧:
常规的Modbus帧包含设备地址的任意两个ASCII码(在ASCII模式下)或8位十六进制字节(在RTU模式下),这里被替换为IP地址和设备网络标识符。此外,Modbus帧中的16位校验和被Modbus TCP/IP帧中的TCP的32位CRC所取代。
将Modbus协议的主/从架构修改为Modbus TCP/IP中的客户端-服务器架构。由于TCP是面向连接的协议,对于Modbus TCP/IP中的每个查询,都会有一个响应。