工业通信中的检错码技术
扫描二维码
随时随地手机看文章
0 引言
在变频器等工业现场,在传输数据的过程中,往往由于噪声或瞬时中断等干扰,使接收到的信息出现错误。如果信息传输出现错误而不被发现,会引起灾难性的后果,可以采取检错码的办法来发现这一错误。常用的检错码有两类:奇偶校验码与循环冗余校验码(CRC,cyclic redundancy code)。奇偶校验方法简单,感兴趣的读者可以查阅相关资料,本文要讨论的是CRC检错码。
1 CRC检错码简要介绍
检错码方法是将要发送的数据比特序列当作一个多项式f(x)的系数,再用收发双方预先约定的生成多项式G(x)去除,求得一个余数多项式,将余数多项式加到数据多项式之后发送到接收端。接收端用同样的生成多项式G(x)去除接收数据多项式f '(x),得到计算余数多项式。如果计算余数多项式与接收余数多项式相同,则表示传输无差错;反之,表示传输有差错,请发送方重发数据,直到正确为止。其工作原理如图1 所示。
CRC生成多项式G(x)由协议规定,目前已有多种生成多项式列入国际标准中。在我国及美国,工业通讯中常使用CRC-16。
实际CRC校验生成采用减法不借位,加法不进位的算法,在计算时采用异或操作。
2 CRC 检错码的算法设计
计算CRC 检错码时常采用按位计算CRC 码或按字节计算CRC 码。按位计算法算法简单,速度慢;按字节计算时须先计算CRC 码表,并将此表存入存储器中,计算CRC 码时通过查表法逐步计算,此法具有算法复杂,计算速度快,占用存储器资源的特点。
2.1 按位计算CRC
2.2 按字节计算CRC码
生成多项式,所得余式即为所求CRC 码。通过观察式(10)可知,求本字节后的CRC 码等于上一字节的余式CRC 码左移8 位再加上本字节所求得CRC 码。如果把8 位二进制序列数据的全部CRC码计算出来,预先放在一个表里,然后通过查表计算CRC码,就可以大大提高计算速度。
2.3 编程实现
对于CRC 校验程序,没有一个统一的标准,也很难说谁好谁坏。工程师可以根据实际情况决定是按位计算还是按字节计算CRC 码,及采用何种编程语言编写CRC校验程序。本文仅给出按字节计算时用C 语言编写的程序。另需说明的是,在
下面的程序中采用查表法计算CRC 码,没有给出CRC 码表,感兴趣的读者可以查阅相关资料。
3 结语
CRC检错码的检错能力很强,它除了能检查出离散错误外,还能检查出突发错;能以
的概率检查出(k+1)位的突发错,即能以99.997%的概率检查出17 位的突发错,漏检概率为0.003%。因此,它是目前工业现场总线通讯中常用
的一种检错码方法。