Modbus协议是应用非常广泛的一种通信协议规约,也是最早应用在工业现场的协议。

早在1979年出现工业串行链路以来,Modbus的应用就开始普遍起来,它使得各种自动化设备之间的互相通信得到实现,做嵌入式产品开发的朋友应该不会陌生,Modbus的身影是随处可见的。并且在中国Modbus都已经形成了规范的标准,都有相应的国标的文件可以查阅到的。

有兴趣的朋友可以查阅标准文件:

《GBT19582.1-2008基于Modbus协议的工业自动化网络规范第1部分:Modbus应用协议》

《GBT19582.2-2008基于Modbus协议的工业自动化网络规范第2部分:Modbus协议在串行链路上的实现指南》

《GBT19582.3-2008基于Modbus协议的工业自动化网络规范第3部分:Modbus协议在TCP∕IP上的实现指南》

虽然有标准文件的存在,查阅也很方便,但是对初学者和从没接触过Modbus的朋友来说,想要用于开发需要花费不少的时间去研究国标文件,费时间也费脑子。所以我想根据自己在项目开发中使用Modbus协议的经验对该协议进行拆解,有顺序的讲解Modbus的重要内容,帮助大家快速理解Modbus协议,可以做到快速应用于项目中进行协议的开发。


灵魂一问:Modbus是什么?

Modbus本质上是一种应用层上的报文协议,属于OSI模型上的应用层,它可以支持在多种不同类型总线上的设备之间进行通信,当然也一样支持以太网中应用。看下面的图片:

forum.jpg



Modbus协议在设备端上实现的是一种主/从的通信协议结构,即请求/应答的通信模型。这怎么理解呢?其实就是使用了Modbus协议进行通信的设备中有一个设备要作为主机,其他的都作为从机,通信就是在主机和从机之间进行的。示意图如下:

forum.jpg



Modbus常见的通信链路

Modbus应用很广泛,几乎可以应用在任何能够进行数据交互的场景中。在设备之间应用Modbus协议时,对使用何种物理链路进行数据流动并没有限制。

比如常用的有线方式:EIA/TIA-232-E、EIA-422、EIA/TIA-485-A、光纤、网线等。以及很多的无线方式等等的。实现的都是串行链路上的异步通信方式,同一时刻允许数据流向某一端的设备,不能同时出现两端流动。Modbus的通信栈如下:

forum.jpg



Modbus应用中常见的一些专业名词

在应用Modbus的时候经常可以看到一些专业名词以及英文缩写,它们都是有着专业的含义和代表意义的。常见的缩略语如下:

ADU:应用数据单元HDLC:高级数据链路控制HMI:人机界面IETF:因特网工程工作组I/O:输入/输出设备IP:互连网协议MAC:介质访问控制MB:MODBUS 协议MBAP:MODBUS 协议PDU:协议数据单元PLC:可编程逻辑控制器TCP:传输控制协议2W:在 “电气接口” 一章中定义的两线制配置,或其中的一个接口。4W:在 “电气接口” 一章中定义的四线制配置,或其中的一个接口。2W+2W:在两线制系统中使用四线制接口的特殊配置。(需要时可参见 Schneider Electric Momentum 文件 870 USE 101 10)。AUI:连接单元接口 (Attachment Unit Interface)公共端:EIA/TIA 标准中的信号公共端 (Common)。在两线制或四线制 RS485 Modbus 网络中,信号和可选的电源的公共端。Power Supply 公共端DCE:一个 Modbus 设备。例如, 实现了 RS232 数据电路设备 (Data-Circuit Equipment) 的可编程序控制器适配器。也称作数据通信设备(DataCommunication Equipment)。设备:Modbus 设备驱动器:发生器,或发送器DTE:一个 Modbus 设备。例如, 实现了 RS232 数据终端设备 (Data Terminal Equipment)编程终端或 PCITr:干缆侧的物理总线接口 (Interface on Trunk Side)。IDv:设备侧的物理总线接口 (Interface on Derivation Side)。LT:线路终端(Line Termination)。Modbus:设备 实现了 Modbus 串行链路并遵循技术规范的设备。RS232:EIA/ TIA -232 标准。RS485:EIA/ TIA -485 标准。RS485:Modbus 与该技术标准一致的两线制或四线制网络