Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi COM (RS232 Schnittstelle) Lesen - Alternative? (https://www.delphipraxis.net/113429-com-rs232-schnittstelle-lesen-alternative.html)

Real-TTX 7. Mai 2008 17:54


COM (RS232 Schnittstelle) Lesen - Alternative?
 
Hallo Gemeinde :-D

Ich erweitere schon seit längerem mein Wissen mit dieser Seite. Nun ist es soweit, ich habe selbst eine kleine Frage :)

Ich baue eine Verbindung zu einem Messschieber über die RS232 Schnittstelle auf. Der Messschieber hat eine Taste "DATA". Mit dieser Taste werden 12 "Char"s an den Computer gesendet. Nun habe ich 2 Probleme. Ich nutze im moment eine OpenSource Package dass ich über SourceForge gefunden habe (Name: Async Pro). Ich würde lieber die Delphi eigenen Möglichkeiten dazu nutzen(THandle).

Ich bekomme es jedoch damit nicht hin :( Habe mir schon ein paar Bsp. Angeschaut. Doch - Kein Ergebnis :( Ich hoffe jemand kann mir da helfen..

Ein weiteres Problem ist, dass ich die Daten nicht auf einmal bekomme. Sondern die Komponente AsyncPro hat eine Procedure (OnTrigger..). Die wird 2mal ausgeführt. Beim ersten mal werden 8 Chars gesendet. Direkt darauf noch einmal die restlichen 4.

Nun habe ich das mit einer Not-Lösung hinbekommen. Dennoch erfüllt es nicht seinen Zweck....

Hier mein jetziger Code (Bsp - Zusammengefasst) :

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OoMisc, AdPort;

type
  TForm1 = class(TForm)
    ComPort: TApdComPort;
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure ComPortTriggerAvail(CP: TObject; Count: Word);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  i : integer;
  loop: boolean;
  Result : String;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ComPort.Open := True;
i := 1;
end;

procedure TForm1.ComPortTriggerAvail(CP: TObject; Count: Word);
var
  I : Word;
  C : Char;
  S : String;
begin
  S := '';
  for I := 1 to Count do begin
    C := ComPort.GetChar;
    case C of
      #0..#31 : {Don't display} ;
      else S := S + C;
    end;
  end;
  //Memo1.Lines.Add(IntToStr(length(S)));
   if (length(S) = 8) then
   begin
    Result := S;
   end;
   if (length(S) = 4) then
   begin
    Result := Result + S;
    Memo1.Lines.Add(Result);
   end;

end;
Gruß, Real-TTX

alzaimar 7. Mai 2008 18:17

Re: COM (RS232 Schnittstelle) Lesen - Alternative?
 
1. Async Pro ist ein ausgereiftes Paket.
2. Daten kommen immer häppchenweise an. Du musst doch nur mitzählen oder auf ein EOT (End Of Transmission) - Zeichen warten, je nach Protokoll

Die Programmierung mit Windows-eigenen Mitteln ist recht aufwändig, sodaß ich Dir empfehlen würde, Async Pro zu lernen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:31 Uhr.

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