我用VB做modbus rtu CRC校验,但值不对,请高手指点!!!

来源:百度知道 编辑:UC知道 时间:2024/05/16 11:02:29
我用VB做modbus rtu 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

值是对的,只是你用十进制来表示了,不信你转换成十六进制。不过crc校验的高低位位没有搞对。就是说你的程序标注错了,crc(0)是低位,crc(1)是高位。应该在crc16那的函数后面将高低位位置调换:CRCHiCheck = CRC16Lo
CRCLoCheck = CRC16Hi