Modbus协议解析及串⼝通讯原理
1.Modbus 协议通讯⽅式区别
Modbus RTU协议报⽂间隔需要⼤于3.5个字符计算:
2.Modbus RTU数据帧格式
3.Modbus ASCII 数据帧格式
4.Modbus TCP 数据帧格式
5.串⼝通讯
串⾏通讯分类
RS485接⼝标准同步通信和异步通信的区别
RS232接⼝标准
1.Modbus 协议通讯⽅式区别
Modbus协议分为三种通信⽅式:Modbus RTU、Modbus ASCII以及Modbus TCP。
⾸先,Modbus TCP的通信格式和Modbus RTU⾮常相似,唯⼀的差别只是Modbus RTU最后带两个字节的CRC校验,⽽Modbus TCP没有,Modbus TCP 加了消息头。
下表是MODBUS ASCII协议和RTU协议的⽐较:
协议开始标记结束标记校验传输效率程序处理
CR,LF LRC低直观,简单,易调试
ASCII:(冒
号)
RTU⽆⽆CRC⾼稍复杂
从上表的⽐较我们可以看到, MODBUS ASCII的协议和RTU协议相⽐, MODBUS ASCII协议拥有开始和结束标记,⽽ MODBUS
RTU却没有,所以ASCII协议的程序中对数据包的处理能更加⽅使。 MODBUS ASCII协议的DATA域传
输的都是可见的ASCII字符,因此在调试阶段就显得更加直观,另外它的LRC校验程序也⽐较容易编写,这些都是 MODBUS ASCII的优
点; MODBUS ASCII的主要缺点是传输效率低,因为它传输的都是可见的ASCII字符,原来⽤RTU传输的数据每⼀个字节⽤ ASCII的话都要把这个字节拆分两个字节,⽐如RTU传输⼀个⼗六进制数OXF9, AsCII需要传输字符F和字符9,对应的 ASCII码0x46和0×39两个字节,这样它的传输的效率肯定就⽐RTU 低。所以⼀般来说,如果所需要传输的数据量较⼩可以考虑使⽤ASCII协议,如果所需传输的数据量⽐较⼤,最好能使⽤RTU协议。
另外,由于ASCII协议有开始标志和结束标志,所以⼀个数据包之间的各字节间的传输间隔时间可以⼤于1秒,⽽ MODBUS RTU⽅式下,由于没有规定开始和结束标记,所以协议规定每两个字节之间发送或者接收的时间间隔不能超过3.5倍字符传输时间。如果两个字符时间间隔超过了3.5倍的字符传输时间,就认为⼀帧数据已经接收,新的⼀帧数据传输开始,所以RTU⽅式下两个字节间传输间隔有时间要求, MODBUS的 ASCII和RTU两种协议的这⼀区别可能决定某些应⽤场合只能选⽤其中⼀种协议。
Modbus RTU协议报⽂间隔需要⼤于3.5个字符计算:
1.1、有检验位
1个字符=1(起始位)+8(数据位)+1(奇偶校验位)+1(停⽌位)=11位3.5个字符=3.5*11=38.5位
如果波特率=9600bps,则3.5个字符间隔时间为38.5/9.6=4.0104167毫秒1.2、⽆校验位
1个字符=1(起始位)+8(数据位)+0(⽆校验位)+1(停⽌位)=10位3.5个字符=3.5*10=35位
如果波特率=9600bps,则3.5个字符间隔时间为35/9.6=3.6458毫秒
2、通常可以将传输45位的时间四舍五⼊后做为报⽂时间间隔。
如果波特率=9600bps,则45位传输时间为45/9.6=4.6875≈5毫秒
2.Modbus RTU数据帧格式
报⽂模型:
主从站报⽂解析:
3.Modbus ASCII 数据帧格式报⽂模型:
4.Modbus TCP 数据帧格式
请求:00 00 00 00 00 06 01 03 00 00 00 01
响应:00 00 00 00 00 05 01 03 02 12 34
⼀次modbus tcp读取保持寄存器的通信分析(省略了ip/tcp头):从左向右分析该数据报⽂:
请求:
00 00为此次通信事务处理标识符,⼀般每次通信之后将被要求加1以区别不同的通信数据报⽂;
00 00表⽰协议标识符,00 00为modbus协议;
00 06为数据长度,⽤来指⽰接下来数据的长度,单位字节;
01为设备地址,⽤以标识连接在串⾏线或者⽹络上的远程服务端的地址。以上七个字节也被称为modbus报⽂头;
03为功能码,此时代码03为读取保持寄存器数据;
00 00为起始地址;
00 01为寄存器数量,(word数量)。
响应:
00 00为此次通信事务处理标识符,应答报⽂要求与先前对应的请求保持⼀致;
00 00为协议标识符,与先前对应的请求保持⼀致;
00 05为数据长度,⽤来指⽰接下来数据的长度,单位字节;
01为设备地址,应答报⽂要求与先前对应的请求保持⼀致;
03为功能码,正常情况下应答报⽂要求与先前对应的请求保持⼀致,如果出错则返回80h+先前的功能码;
02指⽰接下来数据的字节长度;
12 34为被读取的保持寄存器中的数据值,即要求被读取的地址为00 00的保持寄存器中的数值为1234h。
5.串⼝通讯
串⾏通讯分类
1、按照数据传送⽅向,分为:
单⼯:数据传输只⽀持数据在⼀个⽅向上传输;
半双⼯:允许数据在两个⽅向上传输。但是,在某⼀时刻,只允许数据在⼀个⽅向上传输,它实际上是⼀种切换⽅向的单⼯通信;它不需要独⽴的接收端和发送端,两者可以合并⼀起使⽤⼀个端⼝。例:485⽅式通讯
全双⼯:允许数据同时在两个⽅向上传输。因此,全双⼯通信是两个单⼯通信⽅式的结合,需要独⽴的接收端和发送端。例:232⽅式通讯2、按照通信⽅式,分为:
同步通信:带时钟同步信号传输。⽐如:SPI,IIC通信接⼝。
异步通信:不带时钟同步信号。⽐如:UART(通⽤异步收发器),单总线。
在同步通讯中,收发设备上⽅会使⽤⼀根信号线传输信号,在时钟信号的驱动下双⽅进⾏协调,同步数据。例如,通讯中通常双⽅会统⼀规定在时钟信号的上升沿或者下降沿对数据线进⾏采样。
在异步通讯中不使⽤时钟信号进⾏数据同步,它们直接在数据信号中穿插⼀些⽤于同步的信号位,或者将主题数据进⾏打包,以数据帧的格式传输数据。通讯中还需要双⽅规约好数据的传输速率(也就是波特率)等,以便更好地同步。常⽤的波特率有4800bps、9600bps、115200bps等。
在同步通讯中,数据信号所传输的内容绝⼤部分是有效数据,⽽异步通讯中会则会包含数据帧的各种标识符,所以同步通讯效率⾼,但是同步通讯双⽅的时钟允许误差⼩,稍稍时钟出错就可能导致数据错乱,异步通讯双⽅的时钟允许误差较⼤。
常见的串⾏通信接⼝
RS485接⼝标准
采⽤正负两根信号线作为传输线路。⼯作模式采⽤串⾏半双⼯形式,在任意时刻只允许由⼀⽅发送数据,另⼀⽅接收数据。
数据传输采⽤异步⽅式,传输的单位是字符,收发双⽅以预先约定的传输速率,在时钟的作⽤下,传送这个字符中的每⼀位。⼀个字符⼀个字符地传输,每个字符⼀位⼀位地传输.
字符概念
1.1、有检验位
1个字符=1(起始位)+8(数据位)+1(奇偶校验位)+1(停⽌位)=11位1.2、⽆校验位
1个字符=1(起始位)+8(数据位)+0(⽆校验位)+1(停⽌位)=10位
字符传输从最低位开始,空闲线⾼电平、起始位低电平、停⽌位⾼电平。字符传输时间取决于波特率。
数据发送可以是连续的也可以是断续的。所谓连续的数据发送,是指在⼀个字符格式的停⽌位之后,⽴即发送下⼀个字符的起始位,之间没有空闲线时间。⽽断续的数据发送,是指当⼀个字符帧发送后,总
线维持空闲的状态,新字符起始位可以在任意时刻开始发送,即上⼀个字符的停⽌位和下⼀个字符的起始位之间有空闲线状态。
⽰例:⽤PLC连续的发送两个字符(16#55和16#EE),通过⽰波器测量CPU通讯端⼝管脚3/8之间的电压,波形如下图1.:
图1.两个字符(16#55和16#EE)的波形图
⽰例说明:
16进制的16#55换算成2进制等于2#01010101,16进制的16#EE换算成2进制等于2#11101110。如图所
⽰,当数据线上没有字符发送时总线处于空闲状态(⾼电平),当PLC发送第⼀个字符16#55时,先发送该字符帧的起始位(低电平),再发送它的8个数据位,依次从数据位的最低位开始发送(分别为1、0、1、0、1、0、1、0),接着发送校验位(⾼电平或低电平或⽆)和停⽌位(⾼电平)。因为本例中PLC连续的发送两个字符,所以第⼀个字符
帧的停⽌位结束后便⽴即发送下⼀个字符帧的起始位,之间数据线没有空闲状态。假如PLC断续的发送这两个字符,那么当PLC发送完第⼀个字符帧的停⽌位后,数据线将维持⼀段时间空闲状态,再发送下⼀个字符帧。
字符传输的时间取决于波特率,如果设置波特率为9.6k,那么传输⼀个字符帧中的⼀位⽤时等于1/9600*1000000=104us,如果这个字符帧有11位,那么这个字符帧的传输时间等于11/9600*1000=1.145ms.
485总线随着传输距离的延长,会产⽣回波反射信号,如果485总线的传输距离如果超过100⽶,建议施⼯时在485通讯的开始端和结束端加120欧姆的终端电阻。
RS232接⼝标准
RS232-C接⼝连接器⼀般使⽤型号为DB-9的9芯插头座,只需3条接⼝线,即"发送数据"、"接收数据"和"信号地"即可传输数据。
在RS232的规范中,电压值在+3V~+15V(⼀般使⽤+6V)称为"0"或"ON"。电压
在-3V~-15V(⼀般使⽤-6V)称为"1"或"OFF";计算机上的RS232"⾼电位"约为9V,⽽"低电位"则约为-9V。
RS232为全双⼯⼯作模式,其信号的电压是参考地线⽽得到的,可以同时进⾏数据的传送和接收。在实际应⽤中采⽤RS232接⼝,信号的传输距离可以达到15m。不过RS232只具有单站功能,即⼀对⼀通信。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论