首页 >> 读书频道 >> 电脑 >> VB下得CRC校验程序上
 
· 自己设定消息框的显示位置
· 取得拨号网络中的所有连接
· 农历的算法下
· 农历的算法中
· 第三部分 样式语言 第1
· VB农历的算法
· VB:名称 取得
· 第三部分 样式语
· shell以同步方式打开
· shell以同步方式打开
· 第二部分 文档类
· 界面设计原则和编程技巧上
 
· 电视剧《刁蛮公主》下载和
· 美容养颜手册
· 加油金顺剧情分集介绍完整
· 红楼梦:120回全本[清
· 素质教育在美国
· 全唐诗卷四十六
· 韩剧《布拉格恋人》剧情介
· 夜航船[作者:明·张岱]
· 局外人[作者:韩·可爱淘
· 现场流行病学
· 源氏物语[日本:紫式部]
· 武林寓言故事
 
· (出租)中动商场部分及写
· (出租)中动动漫基地&#
· 喜剧学院
· 《善德女王》剧情介绍
· 魔女18号 剧情
· 丑女无敌剧情介绍
· 魔女幼熙剧情介绍
· 龙游天下剧情介绍
· 震撼世界的七日剧情介绍
· 静静的白桦林剧情介绍
· 心情日记—老公今天我想对
· 旗舰剧情介绍
欢迎来到月影社区!如果您觉得这里不错,请推荐给您的朋友们。月影社区:http://wf66.com/

VB下得CRC校验程序上


查看有无更新版本

关键字:VB 2006-9-18

 

 随着计算机技术的不断发展,在现代工业中,利用微机进行数据通讯的工业控制应用得也越来越广泛。由于传输距离、现场状况等诸多可能出现的因素影响,计算机与受控设备之间的通讯数据常会发生无法预测的错误。为了防止错误所带来的影响,一般在通讯时采取数据校验的办法,而循环冗余码校验是最常用的校验方法之一。

一、 循环冗余码校验原理

循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC。它是利用除法及余数的原理来作错误侦测(Error Detecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误。
根据应用环境与习惯的不同,CRC又可分为以下几种标准:
①CRC-12码;
②CRC-16码;
③CRC-CCITT码;
④CRC-32码。
CRC-12码通常用来传送6-bit字符串。CRC-16及CRC-CCITT码则用是来传送8-bit字符,其中CRC-16为美国采用,而CRC-CCITT为欧洲国家所采用。CRC-32码大都被采用在一种称为Point-to-Point的同步传输中。
下面以最常用的CRC-16为例来说明其生成过程。
CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或,之后对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。
下面为CRC的计算过程:
1.设置CRC寄存器,并给其赋值FFFF(hex)。
2.将数据的第一个8-bit字符与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器。
3.CRC寄存器向右移一位,MSB补零,移出并检查LSB。
4.如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。
5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。
6.重复第2至第5步直到所有数据全部处理完成。
7.最终CRC寄存器的内容即为CRC值。

二、 循环冗余码校验程序的编写

明白了CRC校验码的产生过程,编写起程序来就非常容易了。由于Visual Basic的广泛普及以及其在数据通讯中的重要地位,下面就以VB语言来编写CRC的生成程序,其它语言只需稍做修改即可。
编写CRC校验程序有两种办法:一种为计算法,一种为查表法。下面对两种方法分别讨论。

1.计算法
计算法就是依据CRC校验码的产生原理来设计程序。其优点是模块代码少,修改灵活,可移植性好。其缺点为计算量大。为了便于理解,这里假定了三位数据,而多项式码为A001(hex)。
在窗体上放置一命令按钮Command1,并添加如下代码:

Private Sub Command1_Click()
 Dim CRC() As Byte
 Dim d() As Byte '待传输数据
 ReDim d(2) As Byte
 d(0) = 123
 d(1) = 112
 d(2) = 135
 CRC = CRC16(d) '调用CRC16计算函数
 'CRC(0)为高位
 'CRC(1)为低位
End Sub
注意:在数据传输时CRC的低位可能在前,而高位在后。

Function CRC16(data() As Byte) As String
 Dim CRC16Lo As Byte, CRC16Hi As Byte 'CRC寄存器
 Dim CL As Byte, CH As Byte'多项式码&HA001
 Dim SaveHi As Byte, SaveLo As Byte
 Dim i As Integer
 Dim Flag As Integer
 CRC16Lo = &HFF
 CRC16Hi = &HFF
 CL = &H1
 CH = &HA0
 For i = 0 To UBound(data)
CRC16Lo = CRC16Lo Xor data(i) '每一个数据与CRC寄存器进行异或
For Flag = 0 To 7
 SaveHi = CRC16Hi
 SaveLo = CRC16Lo
 CRC16Hi = CRC16Hi \ 2'高位右移一位
 CRC16Lo = CRC16Lo \ 2'低位右移一位
 If ((SaveHi And &H1) = &H1) Then '如果高位字节最后一位为1
CRC16Lo = CRC16Lo Or &H80 '则低位字节右移后前面补1
 End If  '否则自动补0
 If ((SaveLo And &H1) = &H1) Then '如果LSB为1,则与多项式码进行异或
CRC16Hi = CRC16Hi Xor CH
CRC16Lo = CRC16Lo Xor CL
 End If
Next Flag
 Next i
 Dim ReturnData(1) As Byte
 ReturnData(0) = CRC16Hi 'CRC高位
 ReturnData(1) = CRC16Lo 'CRC低位
 CRC16 = ReturnData
End Function

VB下得CRC校验程序上

[ 1 ]
VB下得CRC校验程序上 num

打印本页 关闭

关于我们版权声明本站导航友情连结作品演示 TOP↑