Modbus协议是应用非常广泛的一种通信协议规约,也是最早应用在工业现场的协议。
早在1979年出现工业串行链路以来,Modbus的应用就开始普遍起来,它使得各种自动化设备之间的互相通信得到实现,做嵌入式产品开发的朋友应该不会陌生,Modbus的身影是随处可见的。并且在中国Modbus都已经形成了规范的标准,都有相应的国标的文件可以查阅到的。
有兴趣的朋友可以查阅标准文件:
《GBT 19582.1-2008 基于Modbus协议的工业自动化网络规范 第1部分:Modbus应用协议》
《GBT 19582.2-2008 基于Modbus协议的工业自动化网络规范 第2部分:Modbus协议在串行链路上的实现指南》
《GBT 19582.3-2008 基于Modbus协议的工业自动化网络规范 第3部分:Modbus协议在TCP∕IP上的实现指南》
虽然有标准文件的存在,查阅也很方便,但是对初学者和从没接触过Modbus的朋友来说,想要用于开发需要花费不少的时间去研究国标文件,费时间也费脑子。所以我想根据自己在项目开发中使用Modbus协议的经验对该协议进行拆解,有顺序的讲解Modbus的重要内容,帮助大家快速理解Modbus协议,可以做到快速应用于项目中进行协议的开发。
灵魂一问:Modbus是什么?
Modbus本质上是一种应用层上的报文协议,属于OSI模型上的应用层,它可以支持在多种不同类型总线上的设备之间进行通信,当然也一样支持以太网中应用。看下面的图片:
Modbus协议在设备端上实现的是一种主/从的通信协议结构,即请求/应答的通信模型。这怎么理解呢?其实就是使用了Modbus协议进行通信的设备中有一个设备要作为主机,其他的都作为从机,通信就是在主机和从机之间进行的。示意图如下:
Modbus常见的通信链路
Modbus应用很广泛,几乎可以应用在任何能够进行数据交互的场景中。在设备之间应用Modbus协议时,对使用何种物理链路进行数据流动并没有限制。
比如常用的有线方式:EIA/TIA-232-E、EIA-422、EIA/TIA-485-A、光纤、网线等。以及很多的无线方式等等的。实现的都是串行链路上的异步通信方式,同一时刻允许数据流向某一端的设备,不能同时出现两端流动。Modbus的通信栈如下:
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) 的
可编程序控制器适配器。也称作数据通信设备(Data Communication Equipment)。
设备 :Modbus 设备
驱动器 :发生器,或发送器
DTE :一个 Modbus 设备。例如, 实现了 RS232 数据终端设备 (Data Terminal Equipment)编程终端或 PC
ITr :干缆侧的物理总线接口 (Interface on Trunk Side)。
IDv :设备侧的物理总线接口 (Interface on Derivation Side)。
LT :线路终端(Line Termination)。
Modbus :设备 实现了 Modbus 串行链路并遵循技术规范的设备。
RS232 :EIA/ TIA -232 标准。
RS485 :EIA/ TIA -485 标准。
RS485 :Modbus 与该技术标准一致的两线制或四线制网络