Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Wie mit TSerial prüfen, ob was an COM angeschlossen ? (https://www.delphipraxis.net/85136-wie-mit-tserial-pruefen-ob-com-angeschlossen.html)

EccoBravo 26. Jan 2007 13:13


Wie mit TSerial prüfen, ob was an COM angeschlossen ?
 
Hallo,

nun mal eine Frage zu TSerial4.2 (unter BDS2006)
Ich will prüfen, ob ein Gerät an der seriellen Schnittstelle angeschlossen ist.

ich arbeite im asynchr. Modus.

Wenn ein Gerät angeschlossen, dann kommt auf eine Frage eine definierte Antwort zurück
Wie prüft man, soetwas?

Meine TimerRoutine habe ich dazu so geschrieben,

Delphi-Quellcode:
procedure TF_Einstell.T_Einstell1Timer(Sender : TObject);
begin
    takt1 := takt1 + 1;
    case takt1 of
        1 :
            begin
                n := F_Haupt.Port.TransmittText(Frager);
                                                // hier bleibt das Programm stehen
            end;
        2 :
            begin
                E_Transfer.Text := U_Haupt.t;
            end;
        3 :
            begin
                T_Einstell1.Enabled := false;
                takt1 := 0;
                takt2 := 0;
                t := '';
                E_Transfer := Edit2;
                if Edit2.Text = 'MULTIDOS 2.20 ' then // hier sollte weiterer Transfer
                begin                                // stattfinden
                    Frager := 'AM' + #13#10;         // wenn was dran wäre
                    T_Einstell2.Enabled := true;     // soweit komme ich aber
                    B_Reset.Enabled := true;         // im Negativ-Fall nicht
                end
                else ShowMessage('Kein MultiDos angeschlossen');
            end;
    end;
end;
Leider kommt die Routine nicht so weit und bleibt schon bein Case 1 stehen (sicherlich auch verständlich)

Wie kann man dieses geschickter machen?

Danke

E. B.

Union 27. Jan 2007 09:51

Re: Wie mit TSerial prüfen, ob was an COM angeschlossen ?
 
Wenn das Endgerät HW_Handshake unterstützt, solltest Du zunächst DTR (Data Terminal Ready) setzen und dann prüfen, ob das Gerät DSR (Data Set Ready) setzt.
Ob das Gerät empfangsbereit ist, läßt sich dann normalerweise mit RTS/CTS feststellen.

EccoBravo 29. Jan 2007 08:47

Re: Wie mit TSerial prüfen, ob was an COM angeschlossen ?
 
Hallo und Danke,

aber leider:
den Trick verstehe ich nicht,
Mein Programm hängt sich auf, wenn kein Gerät an der RS232 dran ist.
Kannst Du mir den Trick genauer beschreiben?

Danke

E. B.

EccoBravo 5. Mär 2007 09:48

Re: Wie mit TSerial prüfen, ob was an COM angeschlossen ?
 
Hallo,

ich habe ein Programm zur Bedienung eines Messgerätes über die serielle Schnittstelle geschrieben - mit TSerial 4.2 (asynchron Mode).
Funktioniert soweit alles sehr gut

Nur ein Problem:

Wenn ich das Messgerät nicht angeschlossen habe, bleibt mein Programm (der gesamte Rechner) einfach einfach stehen.

Selbst die extra dafür geschriebene Prüfroutine, die am Anfang fragt, ob ein Gerät dranhängt, und im Positivfall dessen Seriennummer zurück gibt (im Negativfall einen Leerstring) bleibt stehen.

Das Programm (der gesamte Rechner) geht erst dann weiter, wenn ich das Gerät wieder angeschlossen (angeschaltet) habe.

Programmiert habe ich die Schnittstelle mit einem Timer (der im 500ms Takt die Frage absendet, die Antwort abfragt und sich dann abschaltet) unter Nutzung von TSerial 4.2.
Dabei nutze den Asynchron Mode.

Kennt jemand dieses Verhalten von TSerial und hat jemand eine elegante Lösung dieses Problems?

Vielen Dank

E. B.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 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