首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

实用资料——Modbus通信协议4

实用资料——Modbus通信协议4

7、字符的连续传输
当消息在标准的Modbus系列网络传输时,每个字符或字节以如下方式发送(从左到右):


最低有效位...最高有效位


使用ASCII字符帧时,位的序列是:


有奇偶校验
















启始位

1

2

3

4

5

6

7

奇偶位

停止位


无奇偶校验
















启始位

1

2

3

4

5

6

7

停止位

停止位


图4. 位顺序(ASCII)


使用RTU字符帧时,位的序列是:


有奇偶校验

















启始位

1

2

3

4

5

6

7

8

奇偶位

停止位


无奇偶校验

















启始位

1

2

3

4

5

6

7

8

停止位

停止位


图4. 位顺序(RTU)


四、错误检测方法


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


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


1、奇偶校验


用户可以配置控制器是奇或偶校验,或无校验。这将决定了每个字符中的奇偶校验位是如何设置的。


如果指定了奇或偶校验,“1”的位数将算到每个字符的位数中(ASCII模式7个数据位,RTU中8个数据位)。例如RTU字符帧中包含以下8个数据位:

1 1 0 0 0 1 0 1


整个“1”的数目是4个。如果便用了偶校验,帧的奇偶校验位将是0,便得整个“1”的个数仍是4个。如果便用了奇校验,帧的奇偶校验位将是1,便得整个“1”的个数是5个。


如果没有指定奇偶校验位,传输时就没有校验位,也不进行校验检测。代替一附加的停止位填充至要传输的字符帧中。


2、LRC检测


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


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


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


LRC简单函数如下:


static unsigned char LRC(auchMsg,usDataLen)

unsigned char *auchMsg ; /* 要进行计算的消息 */

unsigned short usDataLen ; /* LRC 要处理的字节的数量*/

{ unsigned char uchLRC = 0 ; /* LRC 字节初始化 */

while (usDataLen--) /* 传送消息 */

uchLRC += *auchMsg++ ; /* 累加*/

return ((unsigned char)(-((char_uchLRC))) ;

}
返回列表