Modbus协议最初由Modicon公司开发出来,在1979年末该公司成为施耐德自动化(Schneider Automation)部门的一部分。Modbus通信协议采用的是主从通信模式(即Master/Slave通信模式),其在分散控制方面应用极其广泛,由于其免费公开发行,使用该协议的厂家无需缴纳任何费用,从而使得Modbus协议在全球得到了广泛的应用,现在Modbus已经是工业领域全球最流行的协议。
Modbus协议支持传统的RS-232、RS-485和以太网设备,许多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为它们之间的通讯标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通,因此Modbus协议的可靠性较好。
Modbus协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的,协议支持串口(主要是RS-485)、以太网等多个版本,其中最着名的是Modbus RTU、Modbus ASCII和Modbus TCP三种。Modbus RTU与Modbus ASCII均为支持RS-485总线的通信协议,由于Modbus RTU采用二进制表现形式,具有数据结构紧凑,通信效率较高的特点,应用比较广泛。而Modbus ASCII采用ASCII码传输,并且利用特殊字符作为其字节的开始与结束标识,传输效率要远远低于Modbus RTU协议,一般只有在通信数据量较小的情况下才考虑使用Modbus ASCII通信协议。在工业现场一般都是采用Modbus RTU协议,一般而言,大家说的基于串口通信的Modbus通信协议都是指Modbus RTU通信协议。
下表是ASCII协议和RTU协议进行的比较:
协议
| 开始标记
| 结束标记
| 校验位
| 传输效率
| 程序处理
| ASCII
| :(冒号)
| CR,LF
| LRC
| 低
| 简单,直观
| RTU
| 无
| 无
| CRC
| 高
| 不直观,稍复杂
|
对于Modbus的RTU和TCP协议来说,二者非常相似,Modbus TCP协议是在RTU协议上加一个MBAP报文头,由于TCP是基于可靠连接的服务,RTU协议中的CRC校验码就不再需要,所以在Modbus TCP协议中是没有CRC校验码的,这个MBAP报文头共7个字节(分别为Transaction identifier(事务标识符) 2 Bytes,Protocol identifier(协议标识符) 2 Bytes,Length(长度) 2 Bytes,Unitidentifier(单元标识符) 1 Byte组成),除了Length字段外,其余的基本上都不变。所以我们只要把RTU协议两个字节的校验码去掉,然后在RTU协议的开始加上MBAP报文头,通过TCP/IP网络协议502端口发送出去即可。
Modbus RTU与Modbus TCP读指令对比:
协议
| MBAP报文头
| 地址码
| 功能码
| 寄存器地址
| 寄存器数量
| CRC校验
| RTU
| 无
| 01
| 03
| 01 8E
| 00 04
| 25 DE
| TCP
| 00 00 00 00 00 06 01
| 无
| 03
| 01 8E
| 00 04
| 无
|
指令释义:从地址码为01(TCP协议单元标志为01)的模块0x18E(01 8E)寄存器地址开始读(03)四个(00 04)寄存器。
Modbus RTU与Modbus TCP写指令对比:
协议
| MBAP报文头
| 地址码
| 功能码
| 寄存器地址
| 寄存器数量
| 数据长度
| 正文
| CRC校验
| RTU
| 无
| 01
| 10
| 01 8E
| 00 01
| 02
| 00 00
| A8 7E
| TCP
| 00 00 00 00 00 09 01
| 无
| 10
| 01 8E
| 00 01
| 02
| 00 00
| 无
|
指令的释义:从地址码为01(TCP协议单元标志为01)的模块0x18E(01 8E)寄存器地址开始写(10)一个(00 01)寄存器,具体数据长度为2个字节(02),数据正文内容为00 00(00 00)。
|