首页 > 解决方案 > 使用 VB.Net 计算 Modbus CRC

问题描述

我尝试使用 VB.Net 计算 CRC,但值不同。

例如,如果我使用05 03 0B D3 00 01数据 CRC 码应该是76 53但我得到B6 45

这是我的 VB.Net 代码。

Private Function CRC(data As Byte()) As Byte()
    Dim crcfull As UShort = &HFFFF
    Dim crchigh As Byte = &HF, crclow As Byte = &HFF
    Dim crclsb As Char
    Dim result As Byte() = New Byte(1) {}
    For i As Integer = 0 To (data.Length) - 3
        crcfull = CUShort(crcfull Xor data(i))
        For j As Integer = 0 To 7
            crclsb = ChrW(crcfull And &H1)
            crcfull = CUShort((crcfull >> 1) And &H7FFF)
            If Convert.ToInt32(crclsb) Then
                crcfull = CUShort(crcfull Xor &HA001)
            End If
        Next
    Next
    crchigh = CByte((crcfull >> 8) And &HFF)
    crclow = CByte(crcfull And &HFF)
    Return New Byte(1) {crclow, crchigh}
End Function

问题是什么?

标签: vb.netmodbus

解决方案


你应该打开 option strict ,你会看到这条线有问题。

If Convert.ToInt32(crclsb) Then

我不确定它应该做什么,但你不能用整数做一个 If 语句,它必须是一个布尔值。


推荐阅读