Hallo,
jahrelang durfte ich hier wertvolle Tipps mitlesen und stehe jetzt an. Irgendwie habe ich ein Brett vor den Augen.
Ich muss in einem alten Delphi3-Programm ein Modul für die Datenübermittlung per serieller Schnittstelle an ein neues medizinisches Laborgerät schreiben. Klappt auch soweit mit Senden, Empfangen, Daten aus dBase-Dateien lesen und schreiben. Aber das Gerät verlangt eine Checksum über den zu sendenden String und weist meine Berechnung zurück.
In der Gerätedokumentation steht (leider nur in englischer Sprache):
"CH, CL represents the high nibble (=most significant 4 bit) respectively, the low mibble (=least significant 4 bit) of the 8-bit checksum. CH and CL are represented as two digits of hex numbers. The checksum is the modulus 8 of the sum of ASCII values of ... the string ..."
Als Beispiel steht dabei:
'1Test'+chr(3) ergibt 'D4'
Der folgende Code (CRC8-Berechnung?, fand ich in meiner Codesammlung) ergibt zwar beim obigen Beispiel (zufällig?) das richtige Ergebnis, aber sonst wohl nicht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| function TLogoAppForm.StringToHex(s:string) : string; var t : integer; sum_hex : integer; begin sum_hex := 0; result := ''; for t := 1 to length(s) do begin if t = length(s) then begin result := result + IntToHex(ord(s[t]),2); sum_hex := sum_hex + ord(s[t]); end else begin result := result + IntToHex(ord(s[t]),2) + ''; sum_hex := sum_hex + ord(s[t]); end end; result := inttohex(sum_hex mod 256,2); end; |
Irgendwie fehlt mir der Plan zur Lösung - wahrscheinlich bin ich von den restlichen Programmierarbeiten schon zu übermüdet.
lg und Danke im Vorhinein für Eure Hilfe,
Karl
Moderiert von
matze: Code- durch Delphi-Tags ersetzt