Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi In einer Prozedur warten bis ein Ereignis eintrit (https://www.delphipraxis.net/77163-einer-prozedur-warten-bis-ein-ereignis-eintrit.html)

hirnstroem 15. Sep 2006 13:31


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;

hirnstroem 15. Sep 2006 13:51

Re: In einer Prozedur warten bis ein Ereignis eintrit
 
-.- okay, Google sagt:"Lappi mach d Auga uf."

Delphi-Quellcode:
procedure WaitForEvent(var Events: TComEvents; StopEvent: TEvent; Timeout: Integer);
Nichts für Ungut.


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