Einzelnen Beitrag anzeigen

Benutzerbild von robinWie
robinWie

Registriert seit: 26. Okt 2005
Ort: Lippcity
404 Beiträge
 
Delphi 2005 Personal
 
#46

Re: Relaiskarte K8056 von Velleman seriell ansteuern

  Alt 24. Apr 2008, 19:14
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
  Mit Zitat antworten Zitat