Entwickler-Ecke
Windows API - ComPort von eingesteckten USB Seriall Adapter herausfinden
daywalker0086 - Mi 02.07.14 16:52
Titel: ComPort von eingesteckten USB Seriall Adapter herausfinden
Hallo Leute,
ist es möglich den Comport eines gerade angesteckten USB Seriell Wandlers heraustzufinden( natürlich automatisch)?
mit
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| procedure TPS_Settings.FormShow(Sender: TObject); var sl: TStringList; reg: TRegistry; i :integer;
fComport : array of TComPort; begin ComPort_cb.Clear; sl := TStringlist.Create; try reg := TRegistry.Create; try reg.RootKey := HKEY_LOCAL_MACHINE; reg.OpenKeyReadOnly('hardware\devicemap\serialcomm'); reg.GetValueNames(sl); SetLength(fComPort, sl.Count); for i := 0 to sl.Count - 1 do begin fComPort[i].Name := reg.ReadString(sl[i]); fComPort[i].Details := sl[i]; ComPort_cb.Items.Add(reg.ReadString(sl[i])); end; reg.CloseKey;
finally FreeAndNil(reg); end; finally FreeAndNil(sl); end; end; |
kann ich mir ja schonmal die verfügbaren Comport anzeigen lassen aber mir fehlt dei Verknüpfung zum USB Gerät. Wo steht die Verknüpfung USB Gerät 1 hat Comport1?
Kann mir da jemand helfen?
Ich stelle mir das so vor das eine Aufforderung erscheint das Gerät einzustecken und danach wird eben der Comport des Gerätes ausgelesen und meinem Programm zugewiesen.
GuaAck - Do 03.07.14 00:26
Hallo Daywalker0086,
eine gute Antwort würde mich auch interessieren. Ich hatte vor 5 Jahren das Problem, Daten über einen COM-Port von einem Messgerät einzulesen. Alles bestens an meinem damaligen Tower-Pc, aber mein damals neues Notebook hatte dann keine COM-Schnittstelle mehr. Ein USB-COM-Adapter (1xCOM) ging gut, aber mein Messgerät war aus PC-Sicht nicht immer an dem gleichen COM-Port angeschlossen.
Ich bin damals zu dem Schluss gekommen, dass es nicht gehen kann: Ich könnte ohne Probleme zwei USB-COM-Adapter an mein Notebook anschließen. Windows hätte keine Chance, heraus zu finden, an welchem COM-Port mein Messgerät hängt. Vielleicht geht ja plug-and-play auch für über COM angeschlossene Geräte, da kenne ich mich nicht aus, jedenfalls meine Messgeräte können das nicht.
Meine Lösung: Ich suche an allen bekannten COM-Ports nach meinem Messgerät. Dazu muss ich zwar alle bekannetn COMs verstellen, aber da da ohnehin nichts angeschlossen ist schadet das nicht.
Bin gespannt auf andere Antworten.
Gruß GuaAck
Martok - Do 03.07.14 09:23
Zusammen mit den ersten Links von
hathor: Frag halt den User :roll:
COM ist eben stateless, selbst wenn du enumerierst kommst du nicht viel weiter als "der USB-Adapter ist reingesteckt". Ob auf der andern Seite was ist, kannst du nicht wissen. Gut, theoretisch könnte man da mit den Steuerleitungen etwas kodieren, aber das ist dann halt auch nur für ein Gerät möglich, bei dem man die Hardware kontrolliert.
Einfach was senden und gucken was passiert kann übrigens auch schön schiefgehen, falls doch mal zufällig was anderes dran hängt ;)
OlafSt - Do 03.07.14 11:01
Nur weil ein USB-Port zu einem seriellen Port umfunktioniert wird, heißt das noch lange nicht, das man all den nützlichen Komfort von USB-geräten auch bekommt. Ein serieller Port ist ein serieller Port mit all seinen Limitierungen. Man weiß nur, das da einer ist und bestenfalls noch seine Ü-Parameter. Aber das wars dann auch.
Es gibt also keine Lösung für den Wunsch des TE, außer dem genannten (und mit nicht unerheblichen Nachteilen verbundenen) Senden von Testnachrichten an den Port.
uall@ogc - Do 03.07.14 13:38
Der Threadersteller hat doch eine ganz andere Frage gestellt...
Klar kann man von dem USB-Adapter auf den COM-Port schließen und umgekehrt. Ausserdem kann man so auch das Gerät ermitteln, wenn dieses fest mit dem Adapter verbunden ist (also 1 Adapter für genau 1 Gerät).
Das geht z.B. über die Registry (bei FTDI z.B. "SYSTEM\CurrentControlSet\Enum\FTDIBUS" und "\USB" ggf. mehr) oder eine Library vom USB-Seriell-Adapter (bei FTDI z.b. "FTD2XX.dll")
Martok - Do 03.07.14 13:56
uall@ogc hat folgendes geschrieben : |
Der Threadersteller hat doch eine ganz andere Frage gestellt...
Klar kann man von dem USB-Adapter auf den COM-Port schließen und umgekehrt. |
Stimmt natürlich. Allgemein könnte man das mit dem oben verlinkten Enumerier-Code machen, nach Device-Namen filtern und hat was.
daywalker0086 - Do 03.07.14 17:17
ICh habe es jetzt mit meinem oben geposteten Code so gelöst das der anwender aufgefordert wird den Adapter einzustecken. Dann wird verglichen was vorher nicht da war und fertig. Klappt! :-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!