Einzelnen Beitrag anzeigen

willyxv

Registriert seit: 25. Okt 2010
29 Beiträge
 
Delphi XE Enterprise
 
#7

AW: Probleme mit CRC CCITT Prüfsumme

  Alt 9. Jun 2011, 10:23
Danke für die schnellen Antworten, aber erst mal zum Hintergrund.

Die Prüfsumme wird für die Ansteuerung eines Analysegeräts benötigt. Bis dato wurde dies von einer alten Software zuverlässig erledigt doch leider wurde nun eine Firmwareupdate durchgeführt und das alte Programm ist nun nicht mehr in der Lage sich mit dem Gerät zu Verbinden.
Um nun wieder die Ansteuerung zu ermöglichen, möchte ich ein neues Programm schreiben und da ich C nicht behersche, tue ich dies mit Delphi. Es klappt auch alles so weit so gut bis auf die Prüfsumme, das Gerät schickt mir als Antwort "ungültige Prüfsumme".

Die Berechnung der Prüfsumme habe ich so mit dem Beispiel aus der Anleitung entnommen. Leider sind hier nur zwei Zahlenbeispiele sowie der C Code (siehe oben) aufgeführt.
Beispiel 1: Wert: "274545957911547" Prüfsumme: "11547"
Beispiel 2: Wert: "385183474" Prüfsumme: "45942"

Ich habe nun verschiedene Variatnten Versucht mit dem Wert "274545957911547":

Variante 1:
Delphi-Quellcode:
Function TForm3.GenerateCRC16(Var s1:AnsiString):Word;
Var crc16:Word; i:Integer;
Begin
  crc16 := $FFFF;
  For i := 0 to Length(s1) do Begin
    CRC16 := (((Ord(s1[i])) xor ((Crc16 and $00FF) shl 8))) xor Crc16Tab[Crc16 shr 8];
  End;
  Result := crc16;
End;
Ergebniss: 4439


Variante 2:
Delphi-Quellcode:
Function TForm3.GenerateCRC16(Var s1:AnsiString):Word;
Var crc16:Word; i:Integer;
Begin
  crc16 := $FFFF;
  For i := 0 to Length(s1) do Begin
    CRC16 := (((Ord(s1[i]) and $00FF) xor ((Crc16 and $00FF) shl 8))) xor Crc16Tab[Crc16 shr 8];
  End;
  Result := crc16;
End;
Ergebniss: 4439

Variante 3:
Delphi-Quellcode:
Function TForm3.GenerateCRC16(Var s1:AnsiString):Word;
Var crc16:Word; i:Integer;
Begin
  crc16 := $FFFF;
  For i := 0 to Length(s1) do Begin
    CRC16 := (((Ord(s1[i])) xor ((Crc16) shl 8))) xor Crc16Tab[Crc16 and $FF shr 8];
  End;
  Result := crc16;
End;
Ergebniss: 13367


ich habe noch verschiedene andere Varianten versucht leider führte keine zu meinem erwünschten Ergebniss.

MfG Willy
  Mit Zitat antworten Zitat