首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

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

2013-01-17 
求教vb串口通信纠错计算方法问题抓到通信的包,多的时候有100多个数据,倒数第二和第三个字节能根据内容发生

求教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

热点排行