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!
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.
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?
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.
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?
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?
c-hater schrieb: > Es ist dabei vollkommen scheißegal, ob der Port direkt am Rechner ist > oder an irgendeinem verschissenen Hub. Scheißkerl?
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.
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...
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?
Ü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
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.
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
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...
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 !
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.