[Delphi] Checksumme von Befehlen für das Velleman K8056 Relayboard (Problemlösung)

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Fuselmeister, 16. September 2008 .

  1. 16. September 2008
    Checksumme von Befehlen für das Velleman K8056 Relayboard (Problemlösung)

    Hallo,
    ich hatte vor einiger Zeit einige schwierigkeiten die Checksummen bei den Befehlen für dieses Relayboard rauszubekommen. Und immer eine Schleife von 0 bis 255 durchlaufen zu lassen ist sehr unelegant. Also hab ich mich vor einiger Zeit drangesetzt und aus der VB procedure eine funktion für Delphi zu schreiben. Das hier ist dabei rausgekommen:

    Code:
    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;
    "Bedienungsanleitung":
    • Bei befehlen wie Set, Clear, Toggle wird bei card und relay die gewünschte Kartenadresse und die Relaisnummer angegeben.
    • Bei CMD kommt die Abküzung für den Befehl rein. Findet ihr in der Bedienunganleitung von der Karte
    • Bei ich sag mal "speziellen" Befehlen wie Adresse ändern oder einen Byte mit der Relaisstellung an die Karte schicken enthält der Parameter Relais folgenden Inhalt:
      • Bei dem Befehl B den Byte als Dezimalzahl (00000001 währe dann 1)
      • Bei dem Befehl A die neue Adresse

    Es kann sein, dass ich vergessen habe einige Befehle zu implementieren... es müsste dann aber alles funktionieren wenn ihr bei
    Code:
    if (CMD[1] <> 'A') and (CMD[1] <> 'B') then
    die Abfrage einfach mit and(CMD[1]<>'<Befehls abkürzung') ergänzt und dann bei den Relay Parameter die entspechende eingaben macht

    Ich hab leider vergessen den Code zu kommentieren und weil ich das schon vor längerer zeit geschrieben hab müsste ich mich jetzt erst wieder reindenken (hab ich aber jetzt keine Lust zu xD).

    Hoffentlich habe ich jetzt dem einen oder anderen eine lange nacht ersparrt Treibt damit was ihr wollt...

    so long
    Fuselmeister

    P.S.: Ich habe die function schon mal bei delphi-praxis.net unter anderem Nick gepostet. Also nicht auf die Idee kommen ich schmück mich mit fremden Federn
     
  2. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.