Forum: PC Hard- und Software Zuweisung COM Port zu USB Gerät


von Michael W. (Gast)


Lesenswert?

Ich muss von einer Prüfsoftware aus 20 Messplätze ansteuern können, die 
sich in einer Gerätefertigung befinden. Es werden gleichzeitig 20 Geräte 
mit der Applikation überprüft. Die Geräte kommen mit einem Fließband 
quasi automatisch in die Messplätze und haben eine optische serielle 
Schnittstelle, für die es USB-Adapter gibt.

Der optische Kopf kommt auf das zu prüfende Device. Der USB Stecker 
erzeugt einen virtuellen COM Port (Silicon Labs Chip CP210X). Über die 
COM Schnittstelle kann ich dann mit der Prüfsoftware seriell 
kommunizieren.


Da jedes Gerät individuell angesteuert wird, muss ich wissen, welcher 
COM-Port (COM5, COM6, COM7, ...)  mit welchem Messplatz (1...20) 
verbunden ist. Das darf sich natürlich nicht ändern, wenn man den 
Prüf-PC über Nacht bootet, etc...


1. Frage: Habe ich Einfluss darauf, welcher virtuelle COM Port für einen 
bestimmten Adapter Vergeben wird? Ich denke, dass das das 
Betriebssystem(Windows) kontrolliert, bin mir aber nicht sicher.

2. Ich habe festgestellt, dass die Adapter alle die gleiche USB 
Seriennummer haben. Auch da bin ich nicht sicher, aber ich denke, dass 
weder Windows noch der Gerätetreiber wissen kann, um welchen 
individuellen Adapter es sich handelt. Ich kann die Adapter zwar 
nacheinander hineinstecken, und dann schauen, welchen Port sie zugewisen 
bekommen, glaube jedoch nicht, dass diese Konfiguration den nächsten 
re-Boot überleben würde.

Wie gehe ich hier einigermaßen professionell vor um eine stabile und 
"deterministische" Zuweisung zu bekommen?

Danke!

von Christian R. (supachris)


Lesenswert?

Michael W. schrieb:
> Wie gehe ich hier einigermaßen professionell vor um eine stabile und
> "deterministische" Zuweisung zu bekommen?

Verpasse mit dem Tool des Herstellers jedem USB Serial Wandler eine 
eindeutige ID, dann kannst du über die Registry auslesen welcher COM 
Port diesem Gerät genau zugeordnet wurde.

von Michael W. (Gast)


Lesenswert?

Christian R. schrieb:
> Michael W. schrieb:
>> Wie gehe ich hier einigermaßen professionell vor um eine stabile und
>> "deterministische" Zuweisung zu bekommen?
>
> Verpasse mit dem Tool des Herstellers jedem USB Serial Wandler eine
> eindeutige ID, dann kannst du über die Registry auslesen welcher COM
> Port diesem Gerät genau zugeordnet wurde.

Das habe ich vor zu tun und habe mir das Tool gerade runtergeladen.
Was ich aber noch nicht so ganz verstehe:

Angenommen ein (eindeutiges) USB gerät meldet sich erstmalig beim 
Treiber an und bekommt "COM6" zugewiesen.

1)
Was würde passieren, wenn ich nun re-boote?
Bleibt das sicher auf "COM6" oder erfolgt die Zuweisung neu? Wenn du 
sagst "Registry" würde ich tippen, dass es fix hinterlegt ist...

2)
Angenommen ich stecke das Gerät mit "COM6" ab. Kann es dann sein, dass 
der nunmehr freie Port für ein neues Gerät verwendet wird (z.B. wenn ich 
etwas anderes zwischendurch anstecke)? Wenn ich dann das ursprüngliche 
Gerät wieder anstecke, wäre der "COM6" ja bereits vergeben. Oder merkt 
sich das Betriebssystem, dass COM6 belegt ist, und versucht erst gar 
nicht, den freien Port zu vergeben, auch wenn er gerade nicht aktiv ist?

von Peter D. (peda)


Lesenswert?

Windows merkt sich für jeden USB-Anschluß den COM-Port.
Also einfach an den ersten Port stecken, im Gerätemanager COM1 zuweisen, 
an den 2. stecken, COM2 zuweisen usw.
Wenn Du Umsetzer ohne eigene Seriennummer (z.B. Prolific) hast, wars das 
schon.
Ansonsten mußt Du das Spielchen für alle Umsetzer wiederholen. Du kannst 
sie aber auch nur an den vorgesehenen Anschluß stecken und zuweisen, nur 
darfst Du sie dann nicht mehr vertauschen.

Warnungen, daß eine COM bereits belegt sei, kannst Du ignorieren, 
solange Du nicht 2 USB-Ports die gleiche COM verpaßt. Es sollten nie 2 
gleiche COMs gleichzeitig angesteckt sein.

von Michael W. (Gast)


Lesenswert?

Funktioniert das auch, wenn ich  USB Hubs verwende?
Ich habe z.B. 4 USB Hubs, die ich an verschiedene USB Ports des PCs 
anschließe.

Sobald ich ein USB Gerät an einen Port eines Hubs anschließe, merkt sich 
Windows den hierbei generierten COM-Port ? Habe ich das richtig 
verstanden?


Wann ist dann die Seriennummer wichtig?

von c-hater (Gast)


Lesenswert?

Michael W. schrieb:

> Funktioniert das auch, wenn ich  USB Hubs verwende?

Ja.

> Sobald ich ein USB Gerät an einen Port eines Hubs anschließe, merkt sich
> Windows den hierbei generierten COM-Port ? Habe ich das richtig
> verstanden?

Nein.

> Wann ist dann die Seriennummer wichtig?

Genau dann, wenn du ein Teil mal an einen anderen Port steckst.

Es ist dabei vollkommen scheißegal, ob der Port direkt am Rechner ist 
oder an irgendeinem verschissenen Hub.

Hat das Ding eine eindeutige Seriennummer, wird es auch wieder den 
gleichen COM-Port zugewiesen bekommen. Ansonsten nicht, dann ist es für 
Windows ein neues Teil und bekommt die nächste "freie" Com-Port-Nummer 
zugewiesen.

Diese simple Logik kann doch nicht so schwer zu begreifen sein?

von Komm Peiler (Gast)


Lesenswert?

c-hater schrieb:
> Es ist dabei vollkommen scheißegal, ob der Port direkt am Rechner ist
> oder an irgendeinem verschissenen Hub.

Scheißkerl?

von Christian R. (supachris)


Lesenswert?

Michael W. schrieb:
> Christian R. schrieb:
>> Michael W. schrieb:
>>> Wie gehe ich hier einigermaßen professionell vor um eine stabile und
>>> "deterministische" Zuweisung zu bekommen?
>>
>> Verpasse mit dem Tool des Herstellers jedem USB Serial Wandler eine
>> eindeutige ID, dann kannst du über die Registry auslesen welcher COM
>> Port diesem Gerät genau zugeordnet wurde.
>
> Das habe ich vor zu tun und habe mir das Tool gerade runtergeladen.
> Was ich aber noch nicht so ganz verstehe:
>
> Angenommen ein (eindeutiges) USB gerät meldet sich erstmalig beim
> Treiber an und bekommt "COM6" zugewiesen.
>
> 1)
> Was würde passieren, wenn ich nun re-boote?
> Bleibt das sicher auf "COM6" oder erfolgt die Zuweisung neu? Wenn du
> sagst "Registry" würde ich tippen, dass es fix hinterlegt ist...

In der Regel bleibt er da.

> 2)
> Angenommen ich stecke das Gerät mit "COM6" ab. Kann es dann sein, dass
> der nunmehr freie Port für ein neues Gerät verwendet wird (z.B. wenn ich
> etwas anderes zwischendurch anstecke)? Wenn ich dann das ursprüngliche
> Gerät wieder anstecke, wäre der "COM6" ja bereits vergeben. Oder merkt
> sich das Betriebssystem, dass COM6 belegt ist, und versucht erst gar
> nicht, den freien Port zu vergeben, auch wenn er gerade nicht aktiv ist?

In der Regel merkt sich Windows den belegten Port.

Und genau weil das alles nur in der Regel ist, würde ich unbedingt 
eindeutige Seriennummern vergeben und bei jedem Programmstart die COM 
Ports den Seriennummern neu zuordnen.
Noch besser wäre allerdings gleich über das direkte API zu gehen, bei 
FTDI wäre das die d2xx DLL, bei Silabs gibts das auch, Name ist mir eben 
entfallen. Da kannst du dir den ganzen Quatsch mit COM sparen und sogar 
in den Chip Optionen hinterlegen, dass erst gar kein virtueller COM Port 
erzeugt werden soll.

von Michael W. (Gast)


Lesenswert?

Peter D. schrieb:
> Windows merkt sich für jeden USB-Anschluß den COM-Port.
> Also einfach an den ersten Port stecken, im Gerätemanager COM1 zuweisen,
> an den 2. stecken, COM2 zuweisen usw.
> Wenn Du Umsetzer ohne eigene Seriennummer (z.B. Prolific) hast, wars das
> schon.
> Ansonsten mußt Du das Spielchen für alle Umsetzer wiederholen. Du kannst
> sie aber auch nur an den vorgesehenen Anschluß stecken und zuweisen, nur
> darfst Du sie dann nicht mehr vertauschen.
>
> Warnungen, daß eine COM bereits belegt sei, kannst Du ignorieren,
> solange Du nicht 2 USB-Ports die gleiche COM verpaßt. Es sollten nie 2
> gleiche COMs gleichzeitig angesteckt sein.

was meinst du da bei "Also einfach an den ersten Port stecken" mit 
Port? Einfach den USB-Stecker am PC oder an einem Hub?

heißt das jetzt,

1) wenn keine Seriennummer:

Ich registriere mit einem beliebigen Umsetzer jeden USB-Steckplatz mit 
einem anderen COM Port? Windows merkt sich dann, dass der Umsetzer am 
einen bestimmten Steckplatz uner "COM1" und am anderen unter "COM2" 
erreichbar ist. Da alle Umsetzter gleich sind (keine Seriennummer), 
funktioniert das mit beliebigen Umsetzern.

Ich habe das nun ausprobiert, und es funktioniert an meinem Notebook mit 
zwei USB Steckern.

2) wenn die Umsetzter alle verschiedene Seriennummern haben, dann kann 
ich jedem einzelnen Umsetzer pro USB Steckplatz einen seriellen COM Port 
zuweisen?

Diese Einstellungen merkt sich Windows.
So hätte ich es verstanden.

c-hater schrieb aber, ich hätte es nicht verstanden:

>> Sobald ich ein USB Gerät an einen Port eines Hubs anschließe, merkt sich
>> Windows den hierbei generierten COM-Port ? Habe ich das richtig
>> verstanden?

>Nein.

Du meinst aber:

> Windows merkt sich für jeden USB-Anschluß den COM-Port.

Hier ist ein widerspruch. Sorry, ich verstehe es immer noch nicht...

von Michael W. (Gast)


Lesenswert?

Christian R. schrieb:
> Und genau weil das alles nur in der Regel ist, würde ich unbedingt
> eindeutige Seriennummern vergeben und bei jedem Programmstart die COM
> Ports den Seriennummern neu zuordnen.

und wie geht das? Ich nehme an das steht irgendwo in der Registry. Aber 
wo?

von bluppdidupp (Gast)


Angehängte Dateien:

Lesenswert?

Über WMI kann man die benötigten Daten je nach Adapter gut auslesen.
Im Screenshot im Anhang: Beim FT232R sind die Daten über Win32_PnPEntity 
zu finden.
"Caption" enthält den COM-Port und die Device-ID enthält die 
Seriennummer (hier "A9TEOIZVA")
Leider nicht auch direkt als einzelne Felder und man muss etwas 
parsen/filtern. Bei vielen Adaptern liefert auch Win3_SerialPort was.

WMI Code Creator: 
https://www.microsoft.com/en-us/download/details.aspx?id=8572

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

In seiner "unnachahmlichen" Art hat das "c-hater" schon beschrieben.

Es gibt zwei gleichzeitig verwendete Verfahren, wie eine 
USB-Seriell-Bridge zu ihrem COM-Port kommt. Der Dreh- und Angelpunkt ist 
das Vorhandensein einer eineindeutigen Seriennummer der 
USB-Seriell-Bridge und der diese Seriennummer auswertende Devicetreiber 
(wie es beispielsweise bei den Treibern von FTDI der Fall ist).

Gibt es eine Seriennummer, ist der COM-Port mit der Seriennummer 
verknüpft. Egal, wo im USB-Device-Baum die USB-Seriell-Bridge 
angeschlossen wird, sie wird immer mit der gleichen COM-Port-Nummer 
verheiratet.

Gibt es keine Seriennummer, ist der COM-Port mit der Position der 
USB-Seriell-Bridge im USB-Device-Baum verknüpft.

Der USB-Device-Baum stellt den logischen Aufbau der Kombination von 
USB-Controllern, USB-Hubs und USB-Geräten dar.

Das Tool hier http://www.uwe-sieber.de/usbtreeview.html zeigt den 
USB-Device-Baum übersichtlich und mit allen relevanten Details auch zu 
einzelnen USB-Geräten an.

von georg (Gast)


Lesenswert?

Komm Peiler schrieb:
> c-hater schrieb:
>> Es ist dabei vollkommen scheißegal, ob der Port direkt am Rechner ist
>> oder an irgendeinem verschissenen Hub.
>
> Scheißkerl?

Wahrscheinlich Tourette-Syndrom, Betroffene müssen zwanghaft in den 
normalen Redefluss immer wieder Schimpfwörter und Fäkalausdrücke 
einstreuen und haben darüber keinerlei Kontrolle. Bei c-hater ist das 
schon extrem ausgeprägt. Das sind höchst bedauernswerte kranke Menschen.

Georg

von c-hater (Gast)


Lesenswert?

georg schrieb:

> Das sind höchst bedauernswerte kranke Menschen.

Mag sein. Aber ich weiß wenigstens BEZÜGLICH DER SACHE, wovon ich rede.

Wer also was lernen will, sollte schlicht meine nicht-Wattebällchen 
-Srache ignorieren und sich auf die Fakten zu konzentrieren.

Das scheint den Leuten umso schwerer zu fallen, je unwissender sie sind 
und je weniger sie deshalb zur Sache beizutragen haben. Nicht meine 
Schuld...

Man braucht sich doch bloß deine armselige Gestalt anzuschauen. Nicht 
einen Fakt im Thread geäußert, aber auf dem Nebenschauplatz der "Form" 
die Riesenfresse aufreißen...

Echt armselig...

Dann lieber krank, aber wissend...

von Michael W. (Gast)


Lesenswert?

Rufus Τ. F. schrieb:

> Es gibt zwei gleichzeitig verwendete Verfahren, wie eine
> USB-Seriell-Bridge zu ihrem COM-Port kommt.

ich glaube jetzt hab ich es das erste mal vestanden. danke !

von Michael W. (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Gibt es keine Seriennummer, ist der COM-Port mit der Position der
> USB-Seriell-Bridge im USB-Device-Baum verknüpft.
>
> Der USB-Device-Baum stellt den logischen Aufbau der Kombination von
> USB-Controllern, USB-Hubs und USB-Geräten dar.

wieso zeigt das Tool aber die Seriennummer nicht an?

Es wird auch die VendorId und die PoductId nicht angezeigt. Ich 
dachte diese beiden Ids machen neben der Seriennummer den Schlüssel für 
die Anmeldung eines Gerätes aus--

ahh: es ist unter deviceId zusammengefasst.

Device ID                : USB\VID_10C4&PID_EA60\5&13290149&0&2

Meine Seriennummer sollte aber 1 sein.




Danke !

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.