Ja Ja ich weiss der Thread is schon verdammt alt aber ich habe eine simple Funktion gebastelt um das Problem mit der Checksumme zu lösen.
Delphi-Quellcode:
function GetChecksum(Card, Relay: integer; CMD: string): integer;
var
i: Extended;
ASC_C: integer;
ASC_R: integer;
A: Extended;
B: Extended;
_i: integer;
begin
CMD := UpperCase(CMD[1]);
case CMD[1] of
'E': ASC_C := 69; 'D': ASC_C := 68; 'S': ASC_C := 83;
'C': ASC_C := 67; 'T': ASC_C := 84; 'A': ASC_C := 65;
'F': ASC_C := 70; 'B': ASC_C := 66;
end;
if (CMD[1] <> 'A') and (CMD[1] <> 'B') then
ASC_R := Relay + 48 else
ASC_R := Relay;
_i := 13 + Card + ASC_C + ASC_R;
A := _i / 256;
B := Int(A);
i := (255 - 256*(A-B)) + 1;
Result := Round(i);
end;
Kleines Beispiel:
Relais 2 auf Karte 1 setzten
Delphi-Quellcode:
var
Checksum: Char;
begin
Checksum := Char(GetChecksum(2, 1, 'S'))
...
Bei den Befehl A (Karte neue Adresse zuweisen) müsst ihr bei dem Relay Parameter die neue Kartenaddresse eingeben
Bei den Befehl B (Alle Relais der Karte ansteuern) müsst ihr bei dem Relay Parameter die Nummer eingeben wo drin steht welche Relais gesetzt und welche ausgeschaltet werden sollen (1..255)
Robin W.
Ein Computer kann (fast) alles.... Man muss es ihm nur beibringen