RS232 / COM-Port Identifikation


  • Administrator

    Hallo zusammen,

    Ich habe die Möglichkeit die aktuell vorhanden COM-Ports aufzulisten (COM1, COM2, COM3, usw.). Ich wollte aber auch noch an den FriendlyName kommen, was ich aktuell über WMI mit der Win32_SerialPort Klasse geschafft habe. Gibt es da eine einfachere Möglichkeit?
    Und gibt es bei COM-Ports die Möglichkeit das angeschlossene Gerät eindeutig zu identifizieren? Auch wenn es allenfalls hinter einem USB-To-Serial Adapter liegt?

    Vielen Dank im voraus.

    Grüssli



  • Also ich habe mit das Ganze von dem Projekt EnumSerialPorts abgeschaut. Vielleicht ist da ja eine Methode für dich dabei.

    EnumSerialPorts: http://www.naughter.com/enumser.html

    Und gibt es bei COM-Ports die Möglichkeit das angeschlossene Gerät eindeutig zu identifizieren? Auch wenn es allenfalls hinter einem USB-To-Serial Adapter liegt?

    Kommunikationstechnisch würde ich mal behaupten das es ganz allein auf das Gerät ankommt welches du da anschliesst. Wenn kein Windows Treiber für das Device existiert und das Device auch keine Info-Nachrichten schickt, hast du Pech gehabt.


  • Administrator

    Bitte ein Bit schrieb:

    Also ich habe mit das Ganze von dem Projekt EnumSerialPorts abgeschaut. Vielleicht ist da ja eine Methode für dich dabei.

    EnumSerialPorts: http://www.naughter.com/enumser.html

    Schon gefunden, die machen es allerdings unteranderem ebenfalls über WMI. WMI ist für mich insofern noch praktisch, da ich das Ganze am Ende in C# umsetzen werde und da ist WMI bereits integriert, muss ich nichts per P/Invoke oder ähnliches einbinden.

    @WinAPI-Moderatoren: Ich habe sehr bewusst die Frage hier gestellt, weil ich die WinAPI Expertern fragen will und nicht die C# Leute! Also bitte nicht verschieben, obwohl da C# steht :p

    Bitte ein Bit schrieb:

    Kommunikationstechnisch würde ich mal behaupten das es ganz allein auf das Gerät ankommt welches du da anschliesst. Wenn kein Windows Treiber für das Device existiert und das Device auch keine Info-Nachrichten schickt, hast du Pech gehabt.

    Also könnte man zumindest den Treiber eindeutig identifizieren, welcher für den COM-Port zuständig ist? Auch wenn dies das Gerät nicht eindeutig identifiziert, welches über den Treiber angeschlossen ist, so könnte man darüber trotzdem eine Hilfestellung bauen. Doch wie bekomme ich die Information, welcher Treiber verwendet wird, bzw. wie kann ich den Treiber eindeutig identifizieren? Wäre da vielleicht gleich ein Feld aus der WMI Win32_SerialPort Klasse vorhanden, doch welches?

    Grüssli



  • Das blöde an dem Projekt EnumSerialPorts ist das die unterschiedlichen Methoden zu unterschiedlichen Ergebnissen führt. 😞

    Die Methode mittels WMI beispielsweise scheint nicht alle COM Ports (insbesonders die Adapter Ports) zu erkennen. Warum das so ist, habe ich noch nicht nachgeforscht. Dafür liefert die Methode aber einen einen benutzerfreundlichen Namen zurück. 😞

    Die Methode UsingRegistry dagegen scheint ab Windows XP die verlässlichste Methode zur Erkennnung von COM Ports zu sein. Vielleicht kann man ja mittels dem Device Namen weitere Informationen über den Treiber entlocken. Aber da kenne ich mich aber leider überhaupt nicht aus. 😞



  • Bitte ein Bit hat richtig erkannt!
    Manche Treiber unterstützen friendly Names nur über WMI, manche wiederum unterstützen dies nur über die SetupAPI-Funktionen.

    Deshalb gibt es verschiedene Methoden, die alle in dem Beispiel EnumSerialPorts von Naughter behandelt werden.

    @Dravere:
    Vielleicht helfen Dir auch meine älteren Beiträge aus diesem Forum?
    http://www.c-plusplus.net/forum/265644
    Das ist zwar für Bluetooth-Erkennung gedacht, ist aber genauso auf USB-Erkennung übertragbar.

    http://www.c-plusplus.net/forum/194724
    enthält Beispiele für "friendly Names" mit "USB" im Namen

    Weitere Links:
    "Another serial port enumerator" http://www.codeproject.com/system/listports.asp
    "Enumerating serial ports - W2K style.htm" http://www.codeproject.com/system/setupdi.asp
    "Die serielle Schnittstelle.htm" http://members.inode.at/anton.zechner/az/Seriell.htm (Codebeispiel ganz unten)
    "Enumerating available comm ports with friendly names" http://www.delphi3000.com/article.asp?ID=4001

    HTH,
    Martin

    [EDIT]: Weitere Links hinzugefügt.


Anmelden zum Antworten