行业常识_Modbus

1 Modbus

1.1 Modbus是啥

Modbus是一种协议。
其名称源于Modicon + Bus,其中Modicon是现在施耐德公司旗下的品牌,Bus是总线的意思。所以Modbus是Modicon公司在1979年为PLC通信而发表的一种串行通信协议。

1.2 应用

通过此协议,控制器(如PLC)可以相互之间、也可以经由网络(以太网)和其他设备之间通信。由于它早期的开放、公开、无版权要求、免费,并且使用简单,现在已经成为了通用的工业标准。有了它,不同厂商生产的设备可以连成工业网络,进行集中监控。

该协议采用主从通信的模式,典型的主设备(master)包括现场仪表、工控机、显示面板,典型的从设备(slave)为可编程逻辑控制器(PLC)。

1.3 协议变体及区别

Modbus协议包括ASCII、RTU、TCP,并没有规定物理层。
此协议定义了控制器能够识别和使用的消息结构,而不管它是经过何种网络进行通信的。

Modbus的两种常见变体:Modbus RTU和Modbus TCP。下面讨论一下两者的区别。

1.3.1 物理层

Modbus RTU采用串行通信方式,利用RS-232或RS-485进行数据传输(规定了传输的电气标准、机械接口标准等)。它使用二进制编码来实现通信。与之相反,Modbus TCP采用以太网的通信方式,使用TCP/IP协议栈在网络上进行数据传输。(由此可见,Modbus协议是在物理层之上的,它不依赖于具体的物理实现;也是网络层之上的,因为它可以用TCP/IP传输;它是应用层的协议)

1.3.2 帧结构

Modbus RTU采用紧凑的二进制格式对数据帧进行封装。每个数据帧包含从站地址、功能码、数据和错误校验等字段。而Modbus TCP则采用基于TCP/IP的报文结构,将Modbus数据帧封装在TCP报文中,然后通过IP网络进行传输。

在这里插入图片描述

1.3.3 传输速率

由于Modbus RTU是基于串行通信的,因此其传输速率受限于串行接口的性能。通常情况下,Modbus RTU的传输速率较低,在几千比特每秒到几十千比特每秒之间。与之相比,Modbus TCP使用以太网作为物理介质,支持更高的传输速率,可以达到以太网的标准速率,如10Mbps、100Mbps或1Gbps。

1.3.4 连接方式

Modbus RTU采用点对点的连接方式,也就是一对一的通信模式。一个主站可以连接多个从站,但每次只能与一个从站进行通信。相反,Modbus TCP采用基于IP的客户端-服务器模型,支持多对多的连接方式。多个客户端可以同时与一个Modbus TCP服务器进行通信。

1.3.5 网络依赖性

Modbus RTU不依赖于网络基础设施,可以在简单的串行连接上进行通信,适用于较小的局域网。Modbus TCP则依赖于TCP/IP网络,需要可靠的网络基础设施支持,适用于更大规模的分布式系统。

1.3.5 安全性

Modbus RTU没有内置的安全机制,通信数据未经加密,因此容易受到安全威胁。Modbus TCP可以利用TCP/IP的安全特性,例如加密和认证,提供更高的安全性。

1.4 传输方式

1.4.1 协议数据单元

Protocol Data Unit,即协议数据单元,缩写PDU,由功能码+数据组成,
在这里插入图片描述
功能码——1字节,表示要执行的功能;
数据长度——表示要读取的地址或要写入的值,不同的功能码对应的数据有所不同。

PDU有三种类型:

  • 请求型协议数据单元(Request PDU);
  • 应答型协议数据单元(Response PDU);
  • 异常应答型协议数据单元(Exception Response PDU)。

PDU是Modbus协议通用数据结构,它与底层物理结构无关。但通信时,需要依赖于物理网络。因此要把PDU映射到物理网络上,这就形成了应用数据单元(Application Data Unit,ADU)。由于底层网络不同,RTU应用数据单元的结构与TCP应用数据单元的结构不通。
在这里插入图片描述

在这里插入图片描述
TCP ADU在PDU的基础上,添加了一个叫MBAP头的结构,即 ModBus Application 应用数据单元。

名称 长度 描述 客户端 服务器
Transaction Identifier /传输标识符 2字节 用来标识请求/应答帧 由客户端初始化 服务器拷贝该标识
Protocol Identifier 协议标识符 2字节 0 = Modbus 由客户端初始化 服务器拷贝该标识
Length 长度 2字节 接下来发送数据的长度 由客户端初始化 服务器拷贝该标识
Unit Identifier 单元标识符 1字节 串行链路或其他总线上的站标识 由客户端初始化 服务器拷贝该标识

其中:

  • 传输标识符:用于标识ADU,即请求和应答之间的配对;客户端对该部分进行初始化,服务端将其拷贝到自己的ADU中;
  • 协议标识符:系统间的协议标识,0代表Modbus;
  • 长度:接下来要发送的数据长度,即:单元标识符+PDU的总长度,以字节为单位;
  • 单元标识符:用于系统间的站寻址,比如在以太网+串行链路中,远程站的地址;

1.5 Modbus协议数据模型

Modbus协议允许设备将四种数据分别映射到不同的存储区中,各个区块之间相互独立,使用不同的功能码可以读取到相应的数值,如下图:
在这里插入图片描述
Modbus数据模型映射到不同的存储区块
协议也允许设备将四种数据映射到同一存储区块中,这样通过不同的功能码读取数据可能会得到相同的数据(比如:输入寄存器和保持寄存器位于同一物理区块)。

数据模型中的数据最大允许有65536个元素,编号从1开始:1~65536,元素地址从0开始:0~65535。
需要说明的是,65536只是协议允许的最大元素范围,但并不要求全部实现。Modbus协议允许设备根据自己的实际情况实现部分元素,甚至不要求实现模型中的全部四种数据。

1.6 Modbus地址模式

为了简化数据模型与设备存储区的对应关系,引入了一种地址模型,该模型通过编号的方式对不同类型数据区分,各数据的地址编号如下:

Modbus数据模型/数据区 Modbus地址编号
线圈 0
离散量输入 1
输入寄存器 3
保持寄存器 4

Modbus地址模型
Modbus地址模型的编号从1开始,由于每种数据最大支持65536个元素,因此理论上,

  • 线圈型数据,地址范围为:000001~065536;
  • 离散型输入,地址范围为:100001~165536;
  • 输入寄存器,地址范围为:300001~365536;
  • 存储寄存器,地址范围为:400001~465536;

由于65536是较大的数值,实际应用一般不需要过大的存储区,因此PLC厂家普遍采用的是10000以内的地址范围,即:

  • 线圈型数据:00001~09999;
  • 离散型输入:10001~19999;
  • 输入寄存器:30001~39999;
  • 存储寄存器:40001~49999;

下面是两款PLC的地址表:

各PLC厂家根据PLC的实际情况,将Modbus的地址模型映射到实际的存储区。一般来说:

  • 线圈——过程输出区(Q);
  • 离散量输入——过程输入区(I);
  • 输入寄存器——模拟量输入(AI);
  • 保持寄存器——数据块或V存储区或M存储区。

Modbus地址模型对RTU、ASCII和TCP都适用。

猜你喜欢

转载自blog.csdn.net/BadAyase/article/details/132292933