![]() |
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:
Gruß, Real-TTX
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; |
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 16:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz