Расчет CRC-16 Modbus
Хай Все,
Пока я пишу код для расчета CRC16 Modbus. Но дает некоторые неправильные значения. Может ли кто-нибудь меня поправить ?......
Вот мой код.... мой ввод-значение ASCII
Public Function getCRC16(ByVal strInput As String) Dim lngCheck As Long Dim Power(7) As Integer Dim I As Integer Dim J As Integer Dim Poly As Long Dim CRC As Long Dim TestBit As Boolean Dim TestBit1 As Boolean Dim TestBit2 As Boolean Poly = &H1021 CRC = &HFFFF For J = 0 To 7 Power(J) = 2 ^ J Next J For I = 1 To Len(strInput) Step 2 lngCheck = Val("&H" & Mid$(strInput, I, 2)) For J = 7 To 0 Step -1 If (CRC And 32768) = 32768 Then TestBit1 = True Else TestBit1 = False End If If (lngCheck And Power(J)) = Power(J) Then TestBit2 = True Else TestBit2 = False End If TestBit = TestBit1 Xor TestBit2 CRC = (CRC And 32767) * 2 If TestBit = True Then CRC = CRC Xor Poly End If Next J Next I Dim tmp As String tmp = Hex(CRC) getCRC16 = tmp MsgBox(tmp) End Function
Sandeep Mewara
Какие неправильные ценности? Непонятный.
Himachandra
Для 1234 контрольные суммы CRC16-это 30BA
Но в этом он давал EC9