Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Comport und LED Lauflicht (https://www.delphipraxis.net/112577-comport-und-led-lauflicht.html)

Wal 27. Apr 2008 11:07

Re: Comport und LED Lauflicht
 
Hier nochmal:

Delphi-Quellcode:
Const
   LedHeader = '$CST-ES';
   Address = ?; '? = Integerwert
   Version = ?; '? = Integerwert
   SignW = ?; '? = Integerwert
   SignH = ?; '? = Integerwert
   SignC = ?; '? = Integerwert
   Reserved := '00000';

function SchnuerePaket(Sendestring: String): String;
var
   Laenge: Integer;
   Highnibbel, Lownibbel: Byte;
   HighAddress, LowAddress: Byte;
   HighSignW, LowSignW: Byte;
   Checksumme: Integer;
   Check : String;
   iIndex := Integer;
begin
   Sendestring := chr($1) + chr($1) + chr($1) + chr($EF) + chr($A0) + chr($EF) + chr($B0) + Sendestring + chr($FF) + chr($FF);

   Laenge := 2 + 1 + 2 + 1 + 1 + 5 + Length(Sendestring);

   Highnibbel:= Laenge div 256;
       Lownibbel:= Laenge mod 256;
   HighAddress:= Address div 256;
       LownAddress:= Address mod 256;
   HighSignW:= SignW div 256;
       LownSignW:= SignW mod 256;
   
   Check := Chr(HighAddress) + Chr(LowAddress) + Chr(Version)
      + Chr(HighSignW) + Chr(LowSignW) + Chr(SignH) + Chr(SignC) + Reserved + Sendestring;
   for iIndex := 1 to Length(Check) do
   begin
      Checksumme := Ord(MidStr(Check, iIndex ,1));
      if Checksumme >= 256 then Checksumme := Checksumme - 256;
   end;
   
   result := LedHeader + Chr(Highnibbel) + Chr(Lownibbel) + Check + Chr(Checksumme);
end;

procedure Senden;
begin
   ApdComPort1.PutString(SchnuerePacket('Hallo'));
end;
Wal

Pumba 28. Apr 2008 07:46

Re: Comport und LED Lauflicht
 
Hallo Wal

bekomme bei
Delphi-Quellcode:
 Checksumme := Ord(MidStr(Check, iIndex ,1));
die fehlermeldung: [DCC Fehler] Unit2.pas(63): E2008 Inkompatible Typen

LG Pumba

marabu 28. Apr 2008 08:26

Re: Comport und LED Lauflicht
 
Moin,

MidStr() würde ich nur dann verwenden, wenn ich mehr als ein einzelnes Zeichen abgreifen möchte. Bei einem einzelnen Zeichen kann ich den String wie ein Character Array benutzen. Muss die CheckSumme nicht vorher initialisiert werden?

Delphi-Quellcode:
begin
  // ...
    CheckSumme := 0;
    for iIndex := 1 to Length(Check) do
      Checksumme := (CheckSumme + Ord(Check[iIndex])) mod 256;
Freundliche Grüße

Wal 28. Apr 2008 15:11

Re: Comport und LED Lauflicht
 
Zitat:

Zitat von Pumba
Hallo Wal

bekomme bei
Delphi-Quellcode:
 Checksumme := Ord(MidStr(Check, iIndex ,1));
die fehlermeldung: [DCC Fehler] Unit2.pas(63): E2008 Inkompatible Typen

LG Pumba

Hi Pumba,
wie gesagt habe es aus dem Kopf mal schnell gepostet.
Es ging mir aber auch nicht darum eine fertige Lösung bereitzustellen, sondern dir einen Ansatz zu geben wie es funktionieren könnte.
Die Zeile oben soll nur ein Char in den ASCII-Wert wandeln, das ein String mit einem Buchstaben jetzt kein Char ist, habe ich in der Eile nicht bedacht.
Evtl. stimmt die Zeile von Marabu ?
Gehe den Code Zeile für Zeile durch und finde heraus was er bezwegt, das hat hoffentlich ein Lerneffekt.
Als Hilfe das Protokoll zur Hand nehmen.
Die Zeilen sind auch so geproggt, damit es offensichtlich ist was sie bewirken. Das Ganze geht viel einfacher zu machen.

Wal

P.S. Progge auch erst seit kurzem mit Delphi, also bitte Fehler ignorieren. :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:59 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz