VB下如何编写CRC校验程序
随着计算机技术的不断发展,在现代工业中,利用微型计算机进行数据通信的工业控制应用越来越广泛。由于许多可能因素的影响,如传输距离、场地条件等。在计算机和受控设备之间的通信数据中经常出现不可预测的错误。为了防止错误的影响,通信中一般采用数据校验,循环冗余码校验是最常用的校验方法之一。
一、循环冗余码校验原理
循环冗余校验的英文名是cyclic redundancy check (CRC)。它利用除法和余数原理进行错误检测。实际上,发送设备会计算CRC值,并将其与数据一起发送给接收设备。接收设备重新计算接收数据的CRC,并将其与接收的CRC进行比较。如果两个CRC值不同,则意味着数据通信中存在错误。
根据应用环境和习惯的不同,CRC可分为以下标准:
①CRC-12码;
②CRC-16码;
③CRC-CCITT代码;
④CRC-32代码。
CRC-12码通常用于传输6位字符串。CRC-16和CRC-CCITT码用于传输8位字符,其中美国采用CRC-16,欧洲国家采用CRC-CCITT。CRC-32码主要用于点对点的同步传输。
以最常用的CRC-16为例说明其生成过程。
CRC-16代码由两个字节组成。开始时,CRC寄存器的每个位被预设为1,然后CRC寄存器与8位数据进行异或运算。之后,CRC寄存器从高电平变为低电平,位(MSB)用零填充。如果移位为1后,最低位(LSB)已移出CRC寄存器,则寄存器与预定义的多项式代码进行异或运算,上述从高到低的移位重复8次,并处理第一个8位数据。此时CRC寄存器的值与下一个8位数据进行XOR运算,与前一个数据一样进行8次移位。CRC寄存器中的值是处理完所有字符后的最终CRC值。
以下是CRC的计算过程:
1。设置CRC寄存器,并将其分配为FFFF(十六进制)。
2。将数据的第一个8位字符与16位CRC寄存器的低8位进行异或运算,并将结果存储在CRC寄存器中。
3。CRC寄存器右移一位,MSB用零填充,LSB移出并检查。
4。如果LSB为0,重复第三步;如果LSB为1,CRC寄存器和多项式代码不是或。
5。重复步骤3和4,直到完成所有8个班次。此时,一个8位数据被处理。
6。重复步骤2至5,直到所有数据都处理完毕。
7。最终CRC寄存器的内容是CRC值。
二、循环冗余码校验程序的编写
知道了CRC校验码的生成过程,写程序就非常容易了。由于Visual Basic的广泛普及及其在数据通信中的重要地位,以下是用VB语言编写CRC生成程序,其他语言只需稍加修改。
CRC校验程序的编写方法有两种:一种是计算法,另一种是查表法。下面分别讨论两种方法。
0条评论