微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Modbus协议的常用基本定义——(RS485总线系统应用之2)续

Modbus协议的常用基本定义——(RS485总线系统应用之2)续

时间:12-15 来源:互联网 点击:

U模式:

当选用RTU模式时,错误检测域包含一个16Bits值(用两个8位的字符来实现)。错误检测域的内容是通过CRC(循环冗长检测)方法得出的。CRC域附加在消息的最后,CRC的高位字节是发送消息的最后一个字节。

4. Modbus的错误检测方法

标准的Modbus串行网络采用两种错误检测方法。奇偶校验对每个字符都可用,帧检测(LRC或CRC)应用于整个消息。它们都是在消息发送前由主设备产生的,从设备在接收过程中检测每个字符和整个消息帧。

用户要给主设备配置一个预先定义的超时时间间隔,这个时间间隔要足够长,以使任何从设备都能作出正常反应。如果从设备检测到传输错误,消息将不会被接收,也不会向主设备作出回应。这样产生的超时事件将触发主设备来处理错误。发往不存在的从设备的地址也会产生超时。

4.1奇偶校验

用户可以配置控制器是奇校验或偶校验,也可以是无校验。如果指定了奇或偶校验,将计算每个字符(8个Bit)中“1”的位数(ASCII模式7个数据Bit,RTU中8个数据Bit)。例如字符C5H包含以下8个数据Bit:

1 1 0 0 0 1 0 1

整个字符“1”的位数是4个。如果便用了偶校验,因为4是偶数,帧的奇偶校验位将是0,使得整个帧的“1”的个数仍是偶数(4)。如果使用了奇校验,帧的奇偶校验位将是1,便得整个帧的“1”的个数是奇数(4+1=5)。

如果没有指定奇偶校验位,传输时就没有校验位,也不进行校验检测。此时,在要传输的字符帧中增加一个停止位。

4.2 LRC校验

被应用于ASCII模式,消息包括了一个基于LRC方法的错误检测域。LRC域检测了消息域中除开始的冒号及结束的回车换行号以外的内容。

LRC域是一个包含8位二进制值的字节。LRC值由发送设备计算并放到消息帧中,接收设备在接收消息的过程中重新计算LRC,并将它和接收消息中的LRC值比较,如果两值不等,说明有错误。

LRC方法是将消息中的8Bit的字节连续累加,丢弃了进位。

4.3 CRC校验

被应用于RTU模式,消息包括了一个基于CRC方法的错误检测域。CRC域检测了整个消息的内容。

CRC域是两个字节,包含一个16位的二进制值。它由传输设备计算后加入到消息中。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。

CRC方法比LRC方法繁琐得多,受篇幅限制在此不作介绍。如需了解,请参见本人发表的《CRC校验原理与程序设计》一文。

一个通信实例:

表3是一个以RTU方式读取整数数据的例子。主机向01H号从机发出04H号(读取输入寄存器)功能码,要求读取从0000H地址开始的2个(16Bit)输入寄存器的值。CB71H是01H、04H、00H、00H、00H、02H六个数据的CRC校验值。从机应答时将地址和功能码原样发回,并将2个(16Bit)输入寄存器的值0107H和0251H分成4个(8Bit)数据01H、07H、02H、51H发回。258BH是01H、04H、04H、01H、07H、02H、51H七个数据的CRC校验值。

主机请求消息帧(8个字节)

地址

功能码

被读首个寄存器的高位地址

被读首个寄存器的低位地址

被读寄存器的数量的高位

被读寄存器的数量的低位

CRC低位

CRC高位

01

04

00

00

00

02

71

CB

从机应答消息帧(9个字节)

地址

功能码

数据个数

第1个数据

第2个数据

第3个数据

第4个数据

CRC低位

CRC高位

01

04

04

01

07

02

51

8B

25

表3.以RTU方式读取整数数据

参考文献:

①GB/T 19582.1-2008《基于Modbus协议的工业自动化网络规范》

②Modbus协议中文版可在互联网上下载

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top