AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Comport - Status ?

Ein Thema von Real-TTX · begonnen am 3. Jun 2008 · letzter Beitrag vom 4. Jun 2008
Antwort Antwort
Real-TTX

Registriert seit: 7. Mai 2008
Ort: Stuttgart / Wertheim
136 Beiträge
 
Delphi 2007 Enterprise
 
#1

Comport - Status ?

  Alt 3. Jun 2008, 13:08
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
http://msdn.microsoft.com/en-us/library/ms801459.aspx

Ich hoffe jemand hat ein Tipp oder Lösung ?

Danke für alles...

LG, Real-TTX
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Comport - Status ?

  Alt 3. Jun 2008, 13:17
Hallo,

schau dir mal das Event OnTriggerModemStatus() bzw. die Methode SetStatusTrigger() bei AsyncPro an. Vielleicht kannst du damit etwas erreichen.

Freundliche Grüße
  Mit Zitat antworten Zitat
Real-TTX

Registriert seit: 7. Mai 2008
Ort: Stuttgart / Wertheim
136 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Comport - Status ?

  Alt 3. Jun 2008, 13:43
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ß
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#4

Re: Comport - Status ?

  Alt 3. Jun 2008, 13:59
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
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Comport - Status ?

  Alt 3. Jun 2008, 21:32
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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Real-TTX

Registriert seit: 7. Mai 2008
Ort: Stuttgart / Wertheim
136 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Comport - Status ?

  Alt 4. Jun 2008, 12:23
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
  Mit Zitat antworten Zitat
oldmax

Registriert seit: 27. Apr 2006
Ort: Gieboldehausen
167 Beiträge
 
#7

Re: Comport - Status ?

  Alt 4. Jun 2008, 12:47
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
Noch ist mein Rechner mir zu Diensten.... ansonsten habe ich die Macht ihn zu vernichten !
  Mit Zitat antworten Zitat
Real-TTX

Registriert seit: 7. Mai 2008
Ort: Stuttgart / Wertheim
136 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Comport - Status ?

  Alt 4. Jun 2008, 17:00
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
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Comport - Status ?

  Alt 4. Jun 2008, 17:14
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.
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  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 19:28 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