AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi In einer Prozedur warten bis ein Ereignis eintrit
Thema durchsuchen
Ansicht
Themen-Optionen

In einer Prozedur warten bis ein Ereignis eintrit

Ein Thema von hirnstroem · begonnen am 15. Sep 2006 · letzter Beitrag vom 15. Sep 2006
Antwort Antwort
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#1

In einer Prozedur warten bis ein Ereignis eintrit

  Alt 15. Sep 2006, 14:31
'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;
inde deus abest
  Mit Zitat antworten Zitat
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#2

Re: In einer Prozedur warten bis ein Ereignis eintrit

  Alt 15. Sep 2006, 14:51
-.- okay, Google sagt:"Lappi mach d Auga uf."

procedure WaitForEvent(var Events: TComEvents; StopEvent: TEvent; Timeout: Integer); Nichts für Ungut.
inde deus abest
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:48 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