请教,如何在通讯编程中加入CRC检验程序 vb

来源:百度知道 编辑:UC知道 时间:2024/06/18 15:01:44
这个是CRC校验程序
'*******************************************************************
'*功能: 计算modbus校验码,参数为byte类型的数组,此数组包括校验码*
'*返回值: 返回一个long型数据,此long数据包括校验码的高位和低位*
'*Author: *
'*修改日期: 2006-6-22 *
'*备注: 此函数很容易修改成为封包添加校验码,例如: *
'* dim longCRC as long *
'* longCRC = CRC16(frame()) 'frame()为封包 *
'* frame(UBound(frame) - 1) = longCRC Mod 256 *
'* frame(UBound(frame)) = longCRC \ 256 *
'*******************************************************************

Function CRC16(Coun() As Byte) As Long
Dim intBit, intTemp As Integer
Dim lonCRC As Long

lonCRC = &HFFFF&

For intCnt = 0 To UBound(Coun) - 2
lonCRC = lonCR

我给你看看我的CRC校验的写法参考下吧
我这样的写法是以数组方式发送吧最后两位的CRC校验放在数组的最后两个
发送的时候发送数组就可以吧校验码一起发送出去了
Dim ReturnData(1) As Byte
Private Sub Command1_Click()
Dim CRC(2) As Byte
Dim d() As Byte '待传输数据
ReDim data(7) As Byte
data(0) = 1
data(1) = 3
data(2) = 0
data(3) = 0
data(4) = 0
data(5) = 1
Call CRC16(data, UBound(data) - 2, data(6), data(7)) '调用CRC16计算函数
'CRC(0)为高位
'CRC(1)为低位

End Sub

Function CRC16(data() As Byte, i As Integer, ByRef ReturnDatalo As Byte, ByRef ReturnDatahi 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 Flag As Integer
CRC16Lo = &HFF
CRC16Hi = &HFF
CL = &H1
CH = &HA0
For i = 0 To UBound(data) - 2
CRC16Lo = CRC16Lo Xor data(i) '每一个数据与CRC寄存器进行异或
For Flag = 0 To 7
SaveHi = CRC16Hi <