![]() |
Comport - Status ?
Hey Leute,
Ich möchte abfragen, ob ein Com Gerät vom PC getrennt wurde. Ich benutze AsyncPro für meine RS232 Funktionen. Dies ist auch ohne weiteres Möglich. Leider liefert AsyncPro keine Ereignisse mit die "OnDisconnect" oder ähnliches bedeuten. Es gibt ein Ereigniss "OnPortClose". Leider ist es nicht das was ich will... Ich baue die Verbindung auf in dem ich eine property , nämlich "Open" auf True setze. Dann wird das Ereigniss aufgerufen "OnPortOpen". Wenn ich jetzt jedoch das Kabel Trenne oder das Gerät ausschalte. Passiert genau nichts. Die Eigenschaft bleibt auf True. Und Das Ereignisse OnPortClose wird nicht aufgerufen :( Soweit ich weis könnte ich doch IoGetDeviceObject Pointer aus der Win32Api benutzen? Habe ich in der MSDN gefunden ![]() Ich hoffe jemand hat ein Tipp oder Lösung ? Danke für alles... LG, Real-TTX |
Re: Comport - Status ?
Hallo,
schau dir mal das Event OnTriggerModemStatus() bzw. die Methode SetStatusTrigger() bei AsyncPro an. Vielleicht kannst du damit etwas erreichen. Freundliche Grüße |
Re: Comport - Status ?
Hmm.. Danke dir. Aber ich verstehe das nicht so ganz. Wenn ich ein Trigger hinzufüge und aktiviere. Kann ich ihn dann in OnTriggerStatus abfrage. Das ist klar. Aber das Problem ist: Ich weis nicht genauz welche Typen. Ich habe zwar die Doku. Offen.. Aber.. Naja.. Ich versteh das nicht so ganz, sorry :/
Ich habe es so atm :
Delphi-Quellcode:
ComPort.Open := True;
DeviceChange := ComPort.AddStatusTrigger(stModem); ComPort.SetStatusTrigger(DeviceChange, msDCDDelta, True); ... procedure TFrmMain.ComPortTriggerModemStatus(Sender: TObject); begin REditConsole.Lines.Add('Geht ? '); end; procedure TFrmMain.ComPortTriggerStatus(CP: TObject; TriggerHandle: Word); begin if (TriggerHandle = DeviceChange) then REditConsole.Lines.Add('Oder geht?'); end; Wie gesagt, leider verstehe ich das nicht so genau wie das in Async Pro funktioniert :/ Gruß |
Re: Comport - Status ?
Hallo,
Voraussetzung ist zuerst mal, dass sich beim Abziehen des Kabels überhaupt was ändert - wenn du nur die Datenleitungen benutzt hast, macht sich das Trennen nicht einmal hardwaremässig bemerkbar, geschweige denn in Software. Einen Event (im Win32 API) gibt es nur, wenn z.B. eine Handshakeleitung AKTIV (+12V) verbunden ist und deshalb beim Abziehen des Kabels auf inaktiv wechselt. Gruss Reinhard |
Re: Comport - Status ?
Hallo,
ich mache die Übertragung leider nicht mit AsyncPro, aber in der Anwendung läuft ein Timer mit. Wenn eine bestimmte Zeit vergangen ist und bis dahin keine Daten entgegengenommen wurde wird ein Alarm ausgelöst. Wenn Daten empfangen wurden wird der Timer wieder neu gestartet. Bis bald Chemiker |
Re: Comport - Status ?
Gibt es keine Möglichkeit um zu Prüfen ob da was angeschlossen ist ? Widerstand vllt ? Oder kurze Daten senden ? (Art wie ein Keep Alive Signal). Ich verzweifel gerade. Habe sämtliche Sachen schon probiert die mir eingefallen sind. Auf LineBreak prüfen.. Geht alles nicht.... :
Gruß, Real-TTX |
Re: Comport - Status ?
hi
Nun ja, RS 232 ist keine intelligentte Schnittstelle, jedenfalls nicht von Hause aus. Also muß du wohl selber Hand anlegen, entweder wie schon erwähnt die Handshake Leitungen vergewaltigen, also, z.B. mit Widerstand auf Potential legen und per Interrupt auswerten. (Wird bei Win >98 schwierig...) oder eben pollen. Ebenso denkbar ist ein "Lebenszeichen " mit TimeOut-Überwachung...., dazu muß aber das angeschlossene Gerät ständig etwas senden, entweder Daten oder eben Lebenszeichen. Einen "disconnect" kann die Schnittstelle eben nicht. Daher würd ich folgendermaßen vorgehen Rufen : "bist du noch da" ( meine natürlich Zeichen senden) und eine Zeit anstoßen auf Antwort warten kommt Antwort " ja, bin hier" (natürlich auch hier eine entsprechende Bytekennung) dann Zeit zurücksetzen ist Zeit abgelaufen, dann ist da niemand, der dir zuhört... Nun mußt du dir nur eine entsprechende Kennung einfallen lassen, um Daten vom Lebenszeichen zu unterscheiden. Eine fertige Lösung hab ich allerdings nicht, nur diesen Ansatz. Gruß oldmax |
Re: Comport - Status ?
Das Problem ist, dass es sich hierbei um Messschieber handelt. Und ich da leider keinen Einfluss darauf habe, oder doch?
Wenn ich Daten Hinschicke, bekomm ich nichts zurück :/ Gruß, Real-TTX |
Re: Comport - Status ?
Hast Du ne Doku zu dem Messschieber? Mit etwas Glück hat der im RS232-Stecker DTR/DSR gebrückt, dann kannst Du darauf checken (an DTR wackeln und gucken ob DSR mitwackelt). Müsste man mal untersuchen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 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