Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dynamisch ComPort ermitteln... (https://www.delphipraxis.net/86946-dynamisch-comport-ermitteln.html)

bingo72 22. Feb 2007 07:31

Re: Dynamisch ComPort ermitteln...
 
Das Thema kann ich deshalb nicht dem User überlassen, weil wie ich schon oben ausgeführt hatte, der User damit überfodert sein wird. Ich hab selber den Test gemacht:
Steck mal den USB-Hub an einen anderen USB-Anschluß am PC und das Windows vergibt für die Anschlüsse am Hub bereits andere Nummern. Jetzt wird es immer wiedermal passieren, daß der Anwender halt mal einen anderen USB-Anschluß für seinen Hub wählt und dann müßte er jedesmal wieder neue ComPort-Nr. vergeben?? Das kanns nicht sein....
Es geht auch von da her nicht, weil der Hub in der Zwischenzeit wiedermal abgesteckt wird und unterschiedliche Personen darauf arbeiten werden und das dann jemand den Hub an einen anderen USB-Anschluß anschließt ist vorprogrammiert.
Darum mein Posting!!

Robert Marquardt 22. Feb 2007 09:18

Re: Dynamisch ComPort ermitteln...
 
Zitat:

Zitat von yörsch
davon kann mann nicht leider nicht immer ausgehn... auch bei USB!
lange rede gar kein sinn : beim möglichen port selbst fragen was dran ist! :spin2:

Waere es ein USB-Geraet, dann koennte man ja sicher Informationen herausbekommen, aber dies sind RS232-Geraete. Der USB dient ja nur als Tunnel fuer den RS232.
Es bleibt nur die Moeglichkeit die Geraete via RS232 zu fragen. Wenn sie ein Info-Kommando haben, dann geht es.

Von http://jedi-apilib.sf.net die Module win32api und scapi holen. In scapi ist ein Beispiel wie man serielle Schnittstellen unter XP sauber enumeriert.

bingo72 22. Feb 2007 12:46

Re: Dynamisch ComPort ermitteln...
 
Hallo Experten!!

Wenn ich einen Char an den ComPort schicke, wird OnTriggerAvail ausgelöst, wenn der ComPort verfügbar ist. Gibt es einen Trigger der auf das Senden eines Chars reagiert, auch wenn der Port nicht verfügbar ist??

LG
Thomas

oki 22. Feb 2007 16:51

Re: Dynamisch ComPort ermitteln...
 
Hallo Bingo72,

imho dürfte ein Open auf einen nicht vorhandenen (aktiven?) Port eine Exception auslösen. Er läßt sich gar nicht erst öffnen. Somit erübrigt sich jedes weitere Ereignis.

Ist der Port vorhanden, so kannst du ihn sicher öffnen. Danach stelt sich die Frage, wie erkenne ich meine Endgeräte. Ich rate aber zur Vorsicht mit dem Senden auf den Port so lange nicht klar ist, was dran hängt. Du kannst nicht wissen was dein Kunde alles an den Ports für Endgeräte hat. Können die deine Prüfzeichen ab? Was machen die damit?

Du kannst sicher alles voreinstellen (Baud, Parität ...) wenn du glaubst den richtigen gefunden zu habe. Eine Bestätigung durch den User ist imho nie verkehrt.

Also wie gesagt, senden deine Geräte automatisch nach dem Connecten infos, so kannst du recht sicher das Endgerät erkennen und deine automatische Auswahl treffen ohne einen eigenen Init.

Ich hoffe nur, dein Kunde nutzt nicht noch andere Endgeräte gleicher Machart für andere Anwendungen an den Ports (z.B. 2. GPS-Maus). Dann klaust du unter Umständen anderen die Hardware :mrgreen:

Gruß oki

bingo72 23. Feb 2007 06:30

Re: Dynamisch ComPort ermitteln...
 
Hallo Oki!!

Deine Bedenken sind berechtigt und einen kurzen Auswahl-Dialog einzubauen ist sicher eine Überlegung wert.
Andererseits wenn jemand wirklich z.b. eine 2.GPS-Maus angeschlossen hat....naja??!! :wink:

LG
Thomas

bingo72 23. Feb 2007 08:02

Re: Dynamisch ComPort ermitteln...
 
Da ich noch relativ neu auf dem Gebiet bin wollte ich auch noch Fragen, wie man am Besten weitere Infos über den jeweiligen Sensor herausfindet, um sie unterscheiden zu können?? Passiert das mit einer Funktion die AsyncPro zur Verfügung stellt oder wie sonst??

Bitte um sachdienliche Hinweise erbeten an Kripo... :stupid:

LG
Thomas

hitzi 23. Feb 2007 08:37

Re: Dynamisch ComPort ermitteln...
 
Delphi-Quellcode:
sl := TStringlist.Create;
  try
    reg := TRegistry.Create;
    try
      reg.RootKey := HKEY_LOCAL_MACHINE;
      reg.OpenKeyReadOnly('hardware\devicemap\serialcomm');
      reg.GetValueNames(sl);
      reg.CloseKey;
    finally
      FreeAndNil(reg);
    end;
  finally
    FreeAndNil(sl);
  end;
Damit ermittel ich alle Comports im System.

bingo72 23. Feb 2007 09:34

Re: Dynamisch ComPort ermitteln...
 
Hallo!!

Hab jetzt mal den Code ausprobiert und dann die StringList ausgelesen....meine besetzten Com-Schnittstellen sind COM3 und COM6, bekomme aber Serial0, Serial2 und Serial3 zurück...irgendwas paßt nicht??!!

LG
Thomas

hitzi 23. Feb 2007 09:52

Re: Dynamisch ComPort ermitteln...
 
Sorry hatte die falsche Funktion erwischt, da fehlte noch einiges ...
Delphi-Quellcode:
  sl := TStringlist.Create;
  try
    reg := TRegistry.Create;
    try
      reg.RootKey := HKEY_LOCAL_MACHINE;
      reg.OpenKeyReadOnly('hardware\devicemap\serialcomm');
      reg.GetValueNames(sl);
      SetLength(fComPort, Length(sl));
      for i := 0 to sl.Count - 1 do begin
        fComPort[i].Name := reg.ReadString(sl[i]);
        fComPort[i].Details := sl[i];
      end;
      reg.CloseKey;
    finally
      FreeAndNil(reg);
    end;
  finally
    FreeAndNil(sl);
  end;

bingo72 23. Feb 2007 09:59

Re: Dynamisch ComPort ermitteln...
 
Danke!!

fComPort is was?? String?? Array??


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.
Seite 2 von 3     12 3      

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