当前位置: 源码素材网 » VB教程 » 详情页

VB.NET获取CRC16寄存器内容

  •   时间:2019-07-11
  • 概述:CRC 寄存器

VB.NET获取CRC16寄存器内容,把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低8位相异或,把结果放于CRC寄存器:

'www.srcfans.com
Public Class frmMain
    Dim Jyh0 As Byte
    Dim Jyh1 As Byte
    Dim ValCRC As Long
    Private Sub btnCRC_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCRC.Click
        ValCRC = GetModBusCRC(tbData.Text)
        Me.Text = ValCRC
        Jyh0 = ValCRC Mod 256
        Jyh1 = Int(ValCRC / 256)
        tbCRC.Text = Microsoft.VisualBasic.Right("0" & Hex(Jyh0), 2) + Microsoft.VisualBasic.Right("0" & Hex(Jyh1), 2)
    End Sub
    Public Function GetModBusCRC(ByVal DATA As String) As Long

        Dim i As Long, J As Long, v() As Byte
        Dim LL As Integer
        DATA = DATA.Replace(" ", "")
        LL = Len(DATA)
        If (LL Mod 2) > 0 Then Exit Function
        LL = LL / 2 - 1

        ReDim v(LL)
        For i = 0 To LL
            v(i) = Val("&H" + Mid(DATA, i * 2 + 1, 2) + "&")
        Next i
        '1.预置1个16位的寄存器为十六进制FFFF(即全为1):称此寄存器为CRC寄存器;
        Dim CRC As Long : CRC = &HFFFF&
        For i = 0 To UBound(v)
            '2.把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低8位相异或,把结果放于CRC寄存器;
            CRC = (CRC \ 256) * 256& + (CRC Mod 256&) Xor v(i)
            For J = 0 To 7
                '3.把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查最低位;
                '4.如果最低位为0:重复第3步(再次右移一位);
                ' 如果最低位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或;
                '5.重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;
                Dim d0 As Long : d0 = CRC And 1&
                CRC = CRC \ 2
                If d0 = 1 Then CRC = CRC Xor &HA001&
            Next J
            '6.重复步骤2到步骤5,进行通讯信息帧下一字节的处理;
        Next i
        '7.最后得到的CRC寄存器内容即为:CRC码。
        CRC = CRC Mod 65536
        GetModBusCRC = CRC
    End Function
End Class

    相关声明:

      若“VB.NET获取CRC16寄存器内容”有损您的权益,请告之我们删除内容。
      部分文章来源于网络,版权归原作者所有。