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