![]() |
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 |
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? |
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:
|
Re: Auf AT OK warten?
Moin,
setz mal
Delphi-Quellcode:
mit in die While-Schleife.
Application.Processmessages;
|
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 |
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:
Das ist soweit klar was da psssiert. ;-)
procedure TForm1.ComPort1ReceiveCallBack( Data: string );
begin if Memo1.Lines.Count > 500 then Memo1.Clear; Memo1.Lines.Add( Data ); Image1.Visible := not Image1.Visible; end; Nun kommt mein "Problem"...
Delphi-Quellcode:
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.
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; Hoffe das war nun etwas ausführlicher... ;-) Gruß Frank |
Re: Auf AT OK warten?
Du hast noch nie mit Events gearbeitet oder?
|
Re: Auf AT OK warten?
Unbewußt vielleicht schon? ;)
Ich würde es gerne lernen! Gruß Frank |
Re: Auf AT OK warten?
Du musst natürlich im Event-Callback auf die Signale reagieren.
|
Re: Auf AT OK warten?
Ja ok das könnte ich ja so machen...
Delphi-Quellcode:
Bleibt nur die Frage, wie man beim Befehl absenden dann "wartet". :gruebel:
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 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