首页 理论教育现场总线和工业以太网错误检测方法

现场总线和工业以太网错误检测方法

【摘要】:标准的Modbus串行网络采用两种错误检测方法。它们都是在消息发送前由主设备产生的,从设备在接收过程中检测每个字符和整个消息帧。这样超时事件将触发主设备来处理错误。帧中“1”的总数是4个。LRC域检测消息域中除开始的冒号及结束的回车换行符以外的内容。LRC方法是将消息中的8bit的字节连续累加,不考虑进位。CRC域检测整个消息的内容。

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

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

1.奇偶校验

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

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

帧中“1”的总数是4个。如果使用了偶校验,帧的奇偶校验位将是0,使“1”的个数仍是偶数(4个);如果使用了奇校验,帧的奇偶校验位将是1,使“1”的个数是奇数(5个)。

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

2.LRC检测

使用ASCII模式,消息包括基于LRC(Longitudinal Redundancy Check,纵向冗余校验)方法的错误检测域。LRC域检测消息域中除开始的冒号及结束的回车换行符以外的内容。

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

LRC方法是将消息中的8bit的字节连续累加,不考虑进位。

3.CRC检测(www.chuimin.cn)

使用RTU模式,消息包括基于CRC(Cyclic Redundancy Check,循环冗余校验)方法的错误检测域。CRC域检测整个消息的内容。

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

CRC是先调入一个数值是全“1”的16位寄存器,然后调用一个过程,将消息中连续的8bit字节和当前寄存器中的值进行处理。仅每个字符中的8bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。

CRC产生过程中,每个8bit字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值相或;如果LSB为0,则不进行相或。整个过程要重复8次。在最后一位(第8位)完成后,下一个8bit字节又单独和寄存器的当前值相或。最终寄存器中的值是消息中所有的字节都执行之后的CRC值。

CRC添加到消息中时,低字节先加入,然后加入高字节。

CRC的简单函数如下:

如果采用MCS-51汇编语言,则程序设计如下:

主程序:

校验子程序:

入口:被校验数据首地址送R0,被校验字节数送R7。

出口:CRC校验结果在CRCLO和CRCHI单元中。