Laden...

Forenbeiträge von online-style Ingesamt 1 Beiträge

27.04.2009 - 11:22 Uhr

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