CRC16 Buypass berechnen VBA

Gast #4913977
Guten Morgen,
ich hoffe ihr könnt mir bei meinem Problem weiterhelfen.

Bei einer RS232 Kommunikation muss jeder Befehl mit einer CRC16 
Checksumme abgesetzt werden. Da ich mein Projekt in VBA schreibe finde 
ich leider keinen Ansatz um auf das richtige Ergebnis zu kommen. Alle 
bisherigen Codebeispiele liefern leider keine richtigen Ergebnisse. Ich 
tippe darauf, dass man den Code evtl auf Buypass umstellen müsste, was 
mir leider nicht gelingt. Wäre toll wenn mir jemand dabei helfen könnte.

mein bisheriger Code sieht wie folgt aus:
1
Public Function CRC_CCITT2(btArrX() As Byte, _
2
    bolLOFirst As Boolean) As Long
3
    Dim lngCRC As Long
4
    Dim lngPolynom As Long
5
    Dim x As Long
6
    Dim y As Long
7
    Dim bolB1 As Boolean
8
    Dim bolB2 As Boolean
9
    Dim lngArr2(15) As Long
10
    Dim lngCRC2 As Long
11
    Dim btArr() As Byte
12
 
13
 
14
    ReDim btArr(UBound(btArrX) + 2)
15

16
    For x = 0 To UBound(btArrX)
17
        btArr(x) = btArrX(x)
18
    Next
19
    btArr(x) = &H0
20
    btArr(x + 1) = &H0
21

22
    For x = 0 To 15
23
        lngArr2(x) = 2 ^ x
24
    Next
25

26
    lngPolynom = &H8005&
27

28
    For x = 0 To UBound(btArr)
29
        For y = 0 To 7
30
            bolB1 = lngCRC > &H7FFF&
31
            bolB2 = btArr(x) And lngArr2(y)
32
            lngCRC = lngCRC And &H7FFF&
33

34
            lngCRC = lngCRC * 2
35
            If bolB2 Then
36
                lngCRC = lngCRC + 1
37
            End If
38
            If bolB1 Then
39
                lngCRC = lngCRC Xor lngPolynom
40
            End If
41
        Next
42
    Next
43

44
    If bolLOFirst Then
45
        For x = 0 To 15
46
            If lngCRC And lngArr2(x) Then
47
                lngCRC2 = lngCRC2 + lngArr2(15 - x)
48
            End If
49
        Next
50
        CRC_CCITT2 = lngCRC2
51
    Else
52
        CRC_CCITT2 = lngCRC
53
    End If
54

55
End Function
1
Private Sub Befehl137_Click()
2
   Dim data(1) As Byte
3

4
   data(0) = 4
5
   data(1) = 80
6
   MsgBox "Crc16 = " & Hex$(CRC_CCITT2(data, True))
7
End Sub

Im Anhang hab ich euch auch noch einen Screenshot hinterlassen von einem 
Online CRC16 Rechner , der die richtigen Ergebnisse ausspuckt.

sunshine2k.de/coding/java...rc/crc_js.html
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.