Hi liebe leute,
ich wurde beauftragt, ein Warenwirtschaftssystem für eine Boutique zu schreiben, kein Problem soweit, die Anbindung an das EC Terminal hat auch funktioniert.
Zum Testen und vergleichen, habe ich einfach den Code verwendet, welcher durch andere EC-Software am Seriellen Port erzeugt worden ist.
Ich habe drei verschiedene Transaktionsstring ausgelesen und habe diese zum testen in mein VB Porgamm verbaut, die Kommunikation und übergabe der Werte klappt auch soweit.
0,01 cent = "10 02 06 01 07 04 00 00 00 00 00 01 10 03 2F 0D" (checksumme: 2F0D)
0,10 cent = "10 02 06 01 07 04 00 00 00 00 00 10 10 10 03 66 81" (checksumme: 6681)
1Euro cent = "10 02 06 01 07 04 00 00 00 00 01 00 10 03 2B 4E" (checksumme: 2B4E)
Mein Problem beginnt mit der Übergabe von beliebigen beträgen,.. und der CRC CCITT xmodem Prüfsumme ich komme einfach nicht auf den Wert (siehe oben),...
Ich habe den Quellcode von "terminalhersteller.de" verwendet, doch mein ergebnis ist immer falsch und wird somit nicht vom Terminal akzeptiert.
Das Polynom ist angeblich: X16 + X12 + X**5 + 1
in einer anderen doku findet man allerdings auch dieses Polynom: x ^ 16 + x ^ 15 + x ^ 10 + x ^ 3
Quellcode:
Dim CRCT(0 To 255) As Long ' Codetabelle für CRC-16-Check
Dim CRC As Long ' Kurzzeitige Verwendung
Dim i As Integer ' Schleifenvariable
Dim j As Integer ' Schleifenvariable
Dim HB As Long ' CRC-Highbyte
Dim LB As Long ' CRC-Lowbyte
' * Codetabelle erzeugen (CRC-16) *
' Dieses braucht nur 1x gemacht werden.
For i = 0 To 255
CRC = i
For j = 1 To 8
If (CRC And 1) = 1 Then
CRC = Fix(CRC / 2) Xor 33800
Else
CRC = Fix(CRC / 2)
End If
Next j
CRCT(i) = CRC
Next i
Debug.Print CRC
' CRC über den String "Daten$" berechnen.
' Werte von CRC-Highbyte ist dann in HB, CRC-Lowbyte ist dann in LB.
'CRC = 0
For i = 1 To Len(daten$)
HB = Fix(CRC / 256)
LB = CRC - (256 * HB)
CRC = CRCT(LB Xor Asc(Mid$(daten$, i, 1))) Xor HB
Next i
HB = Fix(CRC / 256) ' CRC-High-Byte
LB = CRC - (256 * HB) ' CRC-Low-Byte
Debug.Print "LB="; "hex--"; Hex(LB); "--dezimal"; LB
Debug.Print "HB="; "hex--"; Hex(HB); "--dezimal"; HB
Welche Bytes muss ich verwenden? Ich habe es so verstanden, dass beispielsweise bei "10 02 06 01 07 04 00 00 00 00 00 01 10 03 2F 0D"(0,01cent) nur die 06 01 07 04 00 00 01 03(also alle Dle Etx und STX nicht miteinbezogen in die CRC berechnung,.. habe auch beliebig viele anderekombinationen versucht, doch nie komme ich auf den Wert in den drei beispielen oben,...
ich denke es liegt an der 33800 in der ersten For-Schleife (Tabellen erzeugung) ich denke diese Berechnung (der Wert "33800) ist für ein anderes Polynom,...
doch ich habe schon alles versucht wo ist der Fehler, das Projekt ist fertig und es hapert an der Prüfsumme,...
Was mache ich falsch? Über hilfe oder einen Tipp würde ich mich sehr freuen.
im voraus dankend atilla