![]() |
In einer Prozedur warten bis ein Ereignis eintrit
'loha Folks,
folgendes Szenario: Ich schicke über einen virtuellen Com Port (über USB -> CAN-Dongle) einen Befehl auf ein Gerät in einem CAN-Bus, um von diesem Daten anzufordern (z.B. ein Bild). Das Gerät nimmt nun das Bild auf, was ein wenig dauert (4-5 Sekunden) und schickt mir dann das Bild zurück (viele tausend Pakete). Irgendwann tritt das Ereignis OnRxChar beim Com Port auf. Nun möchte ich in ein und derselben Prozedur den angesprochenen Befehl absetzen und danach darauf warten bis dieses Ereigniss eintritt, um die Daten gleich wieder auszulesen und auf einem Webinterface anzuzeigen. Da ich noch nicht so Delphi bewandert bin, weiss ich nicht, wie sich dieses "auf ein Ereignis warten" realisieren lässt und könnte etwas unterstützung gebrauchen. Natürlich habe ich schon etwas zusammengeschustert, was mehr oder weniger funktioniert, aber leider nicht mit diesem Ereignis zusammenarbeitet.
Delphi-Quellcode:
procedure Tfrm_Manipulation.IWButton1Click(Sender: TObject);
var InputBuffer, Str, AnswStr: String; i, j, Count: Integer; Address, DLC, Data1: String; DataReceive: TDataReceive; begin Count := 0; Address := '0D'; DLC := '8'; Data1 := '75'; InputBuffer := ''; if IWServerController.ComPort.Connected = False then begin SetCANSettings(Sender); // temporary, has to be replaced with a can setup window. end; {1 1 1 111111122222222222 1234567 89 0 1 2 34567890123456 789} Str := 'T000000' + Address + DLC + Data1 + '00000000000000'#$D; IWServerController.ComPort.WriteStr(Str); // write string to ComPort memCANMonitor.Lines.Add(Str); { Create object that holds the data specific for one user } { Read from ComPort } repeat Count := IWServerController.ComPort.InputCount; until Count > 0; while IWServerController.ComPort.InputCount <> 0 do begin IWServerController.ComPort.ReadStr(InputBuffer, Count); for j := 1 to Count do begin if InputBuffer[j] <> #13 then begin CAN232OutputBuffer := CAN232OutputBuffer + InputBuffer[j] end else begin while Pos('#7', CAN232OutputBuffer) > 0 do begin CAN232OutputBuffer[Pos('#7', CAN232OutputBuffer)] := '0'; end; if (Length(CAN232OutputBuffer) > 1) and (CAN232OutputBuffer[1] <> 'A') then begin // memCANMonitor.Lines.Add(#13); memCANMonitor.Lines.Add(CAN232OutputBuffer); end; CAN232OutputBuffer := ''; end; end; Sleep(1500); Count := IWServerController.ComPort.InputCount; end; IWServerController.ComPort.Close; end; |
Re: In einer Prozedur warten bis ein Ereignis eintrit
-.- okay, Google sagt:"Lappi mach d Auga uf."
Delphi-Quellcode:
Nichts für Ungut.
procedure WaitForEvent(var Events: TComEvents; StopEvent: TEvent; Timeout: Integer);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 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