www.mikrocontroller.net

Forum: PC-Programmierung Serial via Usb unter Windows


Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi all,

wie kann man erkennen, ob ein "klassischer" Com-Port oder ein
Serial_Via_Usb-Adapter am Pc angeschlossen ist bzw. verwendet wird?

Gibt es eine Möglichkeit, dieses heraus zu bekommen (evtl. via 
API-Funktionen)?

Betriebssysteme: Windows XP, Windows Vista, Windows 7
Programiersprachen: Vb6, C#, Vb.net


Viele Dank
Klaus

Autor: malzu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also ich habe gerade zwei dieser Teile bei mir angeschlossen und diese 
dann auch noch über eine Brücke miteinander verbunden, damit ich mit mir 
selbst kommunizieren kann. Beide werden im Geräte-Manager angezeigt. 
Einfach Windows Pause drücken und dann unter Hardware den Geräte Manager 
anklicken. Dort kannst du dann "Anschlüsse (COM und LPT)" erweitern. Bei 
mir werden die Anschlüsse dann als "USB Serial Port (COMx)" angezeigt.
Ich hoffe das war was du gesucht hast.

Viele Grüße
malzu

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi malzu,

sorry das ich mich ungenau ausgedrückt habe.

Leider ist Deine Methode nicht das was ich brauche.

Ich habe ein selbst geschriebenes Programm. Dieses Programm soll nun
erkennen, ob der angeschlossene Com-Port ein "klassischer" oder ein
"serial via usb" ist.

Beispiel: Vb6
  Ich verwende das MScomm32.ocx. Dieses Ocx kann zwar Com 1 bis 16 
handeln,
  aber es erkennt (leider) nicht das oben geforderte.

Beispiel: C# bzw. vb.net
  Ich verwende System.IO.Ports.SerialPort . Auch hier erkenne ich nicht, 
ob
  ich einen "klassischen"- oder "serial via usb"-Port verwende.

Ich habe bis heute nicht herausbekommen, wie ich an diese Information
heran komme.

Bye
Klaus

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich ist das auch der Sinn der Sache: aus Sicht der Anwendung und 
der angeschlossenen Geräte soll man möglichst keinen Unterschied zu 
einer "echten" RS232 merken...

Autor: Justus Skorps (jussa)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
du könntest mal in die registry schauen...dort stehen unter
hkey_local_machine/hardware/devicemap/serialports
die im Moment vorhandenen Ports, und bei mir kann man anhand vom Namen 
zwischen "echtem" und virtuellem Port unterscheiden...

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Eigentlich ist das auch der Sinn der Sache: aus Sicht der Anwendung und
> der angeschlossenen Geräte soll man möglichst keinen Unterschied zu
> einer "echten" RS232 merken...

Eigentlich ja, aber da das USB das Timing etwas "verbastelt" (wegen dem 
USB Polling), muss man u.U. Timeouts oder das Protokoll abhängig vom 
Port (USB oder interner) anpassen.

Oder man macht sich als Programmierer das Leben einfach und öffnet nur 
ein
Fenster "Dies ist leider kein kompatibler COM Port" -> "Tschüss" ;-)

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Ihr,

klar Uwe, du hast normalerweise Recht.
Der Anwendung sollte (muss) es egal sein, welche "ComPort-Art" sie 
verwendet.
Leider macht das USB immer wieder Timming Probleme.


Justus, diese Methode verwende ich zum Erkennen der angeschlossenne 
Com-Ports bei dem VB6-Programm.
Leider kann ich den bei mir eingetragenen Namen,
z.B. \Device\Serial0 oder \Device\F5U103UD0 oder \Device\Nmserial1,
nicht eindeutig auf auf einen klassischen oder serial-via-usb Port
schliessen.

Bye
Klaus

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andere Möglichkeit wäre für die bekannten Kandidaten FTDI, Silabs und 
Prolific die entsprechenden Registry-Zweige zu (durch)suchen und zu 
schauen, ob die virtuellen COM da drin sind. Bei FTDI wäre das der 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS Zweig, in dem 
alle installierten FTDI Devices aufgelistet werden. Da stehen in den 
Untereinträgen auch die zugeordneten COM drin.

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab den Quellcode hier nicht vorliegen, daher nur eine grobe 
Beschreibung (Rest siehe Links)

// GUID erzeugen
SetupDiClassGuidsFromName("Ports", ...)
// die entsprechenden Informationen besorgen
SetupDiGetClassDevs(...)
// Aufzählen
SetupDiEnumDeviceInterfaces(...)
// Untersuchen
SetupDiGetDeviceInterfaceDetail(...)

Bei der letzten Funktion kommt dann auch ein DevicePath raus der bei 
USB->Seriell-Wandlern mit \\?\usb beginnen sollte.

http://www.naughter.com/enumser.html
http://stackoverflow.com/questions/571229/why-do-s...

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi All.
Merci für die schelle Antwort.
Arc Net ich werde die Api-Funktionen mal testen.

Bye
Klaus

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.