-
Modbus 通讯协议是什么?(Modbus RTU和Modbus TCP的区别)
2022-11-01 14:08:33Modbus 通讯协议是什么?Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。为更好地普及和推动Modbus在基于以太网上的分布式应用,目前施耐德公司已将Modbus协议的所有权移交给IDA(Interface for Distributed Automation,分布式自动化接口)组织,并成立了Modbus-IDA组织,为Modbus今后的发展奠定了基础。MODBUS是一种国际标准的通讯协议,用于不同厂商之间的设备交换数据(一般是工业用途);Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。Modbus是一种单主站的主/从通信模式。一条Modbus网络上同时只能有一台主站,从站可以有若干个。Modbus具有以下几个特点:1.标准、开放,用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。目前,支持Modbus的厂家超过400家,支持Modbus的产品超过600种。2.Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。3.Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。一般情况下,两台设备通过MODBUS协议传输数据:最早是用RS232作为硬件接口,(也就是普通电脑上的串行通讯口(串口));也有用RS422的,也有常用的RS485,这种接口传输距离远,在一般工业现场用的比较多。MODBUS协议著名的又分MODBUS RTU,MODBUS ASCII和后来发展的MODBUS TCP三种模式。Modbus RTU和Modbus TCP的区别Modbus RTU和Modbus TCP是Modbus通信中比较好用的两个协议,两者协议很相似。
在工业现场一般都是采用Modbus RTU协议,一般而言,大家说的基于串口通信的Modbus通信协议都是指Modbus RTU通信协议。与Modbus RTU协议相比较,Modbus TCP协议则是在RTU协议上加一个MBAP报文头,并且由于TCP是基于可靠连接的服务,RTU协议中的CRC校验码就不再需要,所以在Modbus TCP协议中是没有CRC校验码的,所以就常用一句比较通俗的话来说:Modbus TCP协议就是Modbus RTU协议在前面加上五个0以及一个6,然后去掉两个CRC校验码字节就OK。虽然这句话说得不是特别准确,但是也基本上把RTU与TCP之间的区别说得比较清楚了。Modbus的功能码有: 功能码 含义 功能码 含义 0x01 读线圈 0x04 读输入寄存器 0x05 写单个线圈 0x03 读保持寄存器 0x0F 写多个线圈 0x06 写单个保持寄存器 0x02 读离散量输入 0x10 写多个保持寄存器 一、Modbus RTU RTU协议中的指令由地址码(一个字节),功能码(一个字节),起始地址(两个字节),数据(N个字节),校验码(两个字节)五个部分组成。 数据由数据长度(两个字节,表示的是寄存器个数,假定为M)和数据正文(M乘以2个字节)组成。 发:01 03 01 8E 00 04 25 DE //读(0x03),从寄存器地址01 8E 开始读,读4个寄存器00 04 回:01 03 08 00 01 00 01 00 01 00 01 28 D7 // 08表示数据长度 ,00 01 00 01 00 01 00 01读到的数据 发:00 10 00 20 00 01 02 00 00 AC A0 // 写(0x10),从寄存器地址 00 20开始写,写一个寄存器 00 01,写入值 00 00 回:00 10 00 20 00 01 01 D2 二、Modbus TCP Modbus TCP协议是在RTU协议前面添加MBAP报文头,由于TCP是基于可靠连接的服务,RTU协议中的CRC校验码就不再需要,所以在Modbus TCP协议中是没有CRC校验码。 MBAP报文头: 事务处理标识 协议标识 长度 单元标识符 2字节 2字节 2字节 1字节 事务处理标识 可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文 协议标识符 00 00表示ModbusTCP协议 长度 表示接下来的数据长度,单位为字节 单元标识符 可以理解为设备地址 发:00 00 00 00 00 06 00 03 00 20 00 01
回:00 00 00 00 00 05 00 03 02 00 00发:00 00 00 00 00 06 00 04 00 30 00 01
回:00 00 00 00 00 05 00 04 02 00 08发:00 00 00 00 00 09 00 10 00 20 00 01 02 00 00 回:00 00 00 00 00 06 00 10 00 20 00 01
三、总结(注:16进制发送) 1、读指令对比(0x04) MBAP报文头 地址码 功能码 寄存器地址 寄存器数量 CRC校验 Modbus RTU 无 01 04 00 00 00 16 71 C4 Modbus TCP 00 00 00 00 00 06 01 04 00 00 00 16 无 2、写指令对比(0x10) MBAP报文头 地址码 功能码 寄存器地址 寄存器数量 数据长度 正文 CRC校验 Modbus RTU 无 00 10 00 20 00 01 02 00 00 AC A0 Modbus TCP 00 00 00 00 00 09 00 10 00 20 00 01 02 00 00 无
免责声明:本网站部分文章、图片等信息来源于网络,版权归原作者平台所有,仅用于学术分享,如不慎侵犯了你的权益,请联系我们,我们将做删除处理!