AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Wie mit TSerial prüfen, ob was an COM angeschlossen ?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von EccoBravo · begonnen am 26. Jan 2007 · letzter Beitrag vom 5. Mär 2007
Antwort Antwort
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#1

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

  Alt 26. Jan 2007, 14:13
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.
Wahre Aussage :=
Katzen, die bellen sind keine Kaninchen.

Der Kreisverkehr ist eine spezielle Form der Einbahnstraße
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#2

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

  Alt 27. Jan 2007, 10:51
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.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#3

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

  Alt 29. Jan 2007, 09:47
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.
Wahre Aussage :=
Katzen, die bellen sind keine Kaninchen.

Der Kreisverkehr ist eine spezielle Form der Einbahnstraße
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#4

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

  Alt 5. Mär 2007, 10:48
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.
Wahre Aussage :=
Katzen, die bellen sind keine Kaninchen.

Der Kreisverkehr ist eine spezielle Form der Einbahnstraße
  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 05:57 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