读书人

求教vb串口通信纠错计算方法有关问题

发布时间: 2013-01-17 10:28:54 作者: rapoo

求教vb串口通信纠错计算方法问题
抓到通信的包,多的时候有100多个数据,倒数第二和第三个字节能根据内容发生变化,用书上说的最简单方法好象不是除255这种方式,学生愚笨没学CRC和其它校检算法,求教大师们能解答采用的纠错计算方法吗?能指导怎么计算吗?下面的是最短的三组数据:
aa c1 2a 45 42 bb ------第一组
aa c7 2a 45 44 bb ------第二组
aa d1 30 32 30 30 30 31 2a 46 38 bb ------第三组
高分感谢!

果然是有一张表,与我上面的猜测一样,刚写了个代码一验证,完全正确啊哈哈.



L() = Split(K, " ")
J = CByte("&H" & L(1)) Xor CByte("&H" & L(2))
For I = 3 To UBound(L) - 3
J = J Xor CByte("&H" & L(I))
Next

K = Hex(J)
I = Asc(Mid(K, 1, 1))
J = Asc(Mid(K, 2, 1))

Select Case I
Case Is < 58 '数字
I = I - 18
Case Is > 64 '字母
I = I - 24
End Select

Select Case J
Case Is < 58 '数字
J = J - 18
Case Is > 64 '字母
J = J - 24
End Select

Debug.Print I, J
End Sub


这次纯粹是运气好,哈哈.
下次你还是得去找厂家,至少你的运气没我好,我可是一次猜中,等下我是不是考虑去买个彩票哇哈哈求教vb串口通信纠错计算方法有关问题
[解决办法]
就是

1 跳过 AA,从第二个字节起,逐字节异或,得到一个字节的异或结果。

2 把异或结果拆成两个字节,方法是,将半字节的值 0 - 9, A - F 当作字符取 ASCII 码,得到 &H30 - &H39, &H41 - &H46。即 0 - 9 加上 &H30,A - F 加上 &H37。


'data = "AA C6 30 30 30 31 30 30 30 30 30 30 30 31 30 30 30 30 30 30 31 33 30 30 30 30 30 30 30 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 2A 45 44 BB"

chr() = Split(data, " ")

For i = 1 To UBound(chr) - 3
byteXor = byteXor Xor Val("&H" & chr(i))
Next i

C1 = byteXor \ 16
C2 = byteXor And &HF


If C1 < 10 Then '0 - 9
C1 = C1 + &H30
Else 'A - F (10 - 15)
C1 = C1 + &H37
End If

If C2 < 10 Then
C2 = C2 + &H30
Else
C2 = C2 + &H37
End If

Debug.Print Hex(C1), Hex(C2)
End Sub

读书人网 >VB

热点推荐