Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Auf AT OK warten? (https://www.delphipraxis.net/118292-auf-ok-warten.html)

Schucki 4. Aug 2008 21:24


Auf AT OK warten?
 
Hallo Leute,

ich habe ein kleines Programm geschrieben was ein Modem über AT Befehle ansteuert.
Nun wie jeder weiß muß vom Modem auf jeden Befehl ein OK kommen.

Wie stellt man das nun an das man auf diese Reaktion warten kann OHNE CPU Leistung zu verschenken?

eine:

while strEmpfang<>'OK' da geht die CPU Last sehr schnell auf 90%


Hat jemand einen Tip wie man es richtig macht?

AT senden und dann auf das OK warten. Bei anderen Befehlen kommen ja Daten wenn man die PArameter abfragt, da wäre es natürlich gut wenn man nicht vorher in den Daten rumstochert bevor man nicht alles hat.

Gruß Frank

TonyR 4. Aug 2008 23:09

Re: Auf AT OK warten?
 
Müsste das nicht mit einem Timer zu realisieren sein (ohne zu wissen ob es nicht vielleicht eine andere Methode gibt) !?
Oder willst du das nicht?

Hansa 5. Aug 2008 00:41

Re: Auf AT OK warten?
 
Ohne Nennung der benutzten Komponenten etc. macht ein Antwort-Versuch überhaupt keinen Sinn. Das mit dem Timer ist schon mal Käse. :mrgreen:

Der.Kaktus 5. Aug 2008 05:35

Re: Auf AT OK warten?
 
Moin,

setz mal
Delphi-Quellcode:
Application.Processmessages;
mit in die While-Schleife.

oki 5. Aug 2008 07:04

Re: Auf AT OK warten?
 
Moin,

wie Hansa bereits sagt ist es hilfreich, wenn du uns sagst, welche Komponente du für das Handling des COM-Ports benutzt. In der regel liefern solche Komponenten ein Ereignis für den Emfang von Daten. Je nach Kompo teilt dir dieses Ereignis entweder eifach nur mit, dass Daten empfangen wurden oder wie viele. Diese holst du dann aus dem Empfangspuffer ab. Oft gibt es hier eine Methode Read oder ReadString oder ähnliches.
Somit mußt du dann nicht in einer Schleife auf den Empfangspuffer pollen.

Gruß oki

Schucki 5. Aug 2008 07:52

Re: Auf AT OK warten?
 
Hi!

Danke für Eure Antworten.
Ja die Komponente ist TComPort. Weiß nicht genau wo ich die her habe.

Die liefert das Ereigniss OnReadCallback.

Hier ein Ausschnitt aus dem Beispiel.
Data enthält die Daten vom COM. Die Komponente läuft mit einem eigenen Thread.

Delphi-Quellcode:
procedure TForm1.ComPort1ReceiveCallBack( Data: string );
begin
  if Memo1.Lines.Count > 500 then
    Memo1.Clear;
  Memo1.Lines.Add( Data );
  Image1.Visible := not Image1.Visible;
end;
Das ist soweit klar was da psssiert. ;-)
Nun kommt mein "Problem"...

Delphi-Quellcode:
procedure TForm1.btnSendClick( Sender: TObject );
begin
  ComPort1.send('AT'#13 );
  ... //<-----               Hier auf das OK/ERROR warten...
  if bolAnsOk then begin
    ShowMessage('OK empfangen');
  end else begin
    ShowMessage('Kein OK empfangen, nochmal');
  end;
end;
Das Programm soll also erst weiter abgearbeitet werden wenn OK,ERROR oder NO CARRIER vom Modem als Antwort kam, um sicher zu sein das man mit den empfangenen Daten arbeiten kann. Wäre ja auch nicht schön wenn man das Modem mit Befehlen zuflastert ohne zu wissen was es dazu sagt.

Hoffe das war nun etwas ausführlicher... ;-)
Gruß Frank

mkinzler 5. Aug 2008 08:00

Re: Auf AT OK warten?
 
Du hast noch nie mit Events gearbeitet oder?

Schucki 5. Aug 2008 09:56

Re: Auf AT OK warten?
 
Unbewußt vielleicht schon? ;)

Ich würde es gerne lernen!

Gruß Frank

mkinzler 5. Aug 2008 09:58

Re: Auf AT OK warten?
 
Du musst natürlich im Event-Callback auf die Signale reagieren.

Schucki 5. Aug 2008 11:17

Re: Auf AT OK warten?
 
Ja ok das könnte ich ja so machen...

Delphi-Quellcode:
procedure TForm1.ComPort1ReceiveCallBack( Data: string );
begin
  if not bolAnsOk then bolAnsOk:=Data='OK';
  if Memo1.Lines.Count > 500 then
    Memo1.Clear;
  Memo1.Lines.Add( Data );
  Image1.Visible := not Image1.Visible;
end;
Bleibt nur die Frage, wie man beim Befehl absenden dann "wartet". :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 Uhr.
Seite 1 von 2  1 2      

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