Bereits belegte COM-Ports wieder freigeben

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von Duke.

    Bereits belegte COM-Ports wieder freigeben

    Hallo,

    Ich habe eine Testumgebung, womit ich Usb to serial Platinen teste.
    ich programmiere sie und danach Teste ich sie nach funktion(Vb 2010 Aplication).

    Mein porblem ist, dass bei jedem neuen Test ein neuer COM Port belegt wird.
    Bei Programmieren der USB To Serial ftdi Chips werden verschiedene SN vergeben.

    Meine Frage ist wie ich über VB 2010 Die COM Anschlussnumern nach jedem Testen wieder alle freigabe, so dass ich immer den selben COM Port habe oder das ich direkt beim Installieren des FTDI Chips ein gewissen Com Port zuweisen kann auch wenn er schon belegt ist.

    Danke...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mnawa“ () aus folgendem Grund: Nicht erledigt

    Ja mprog.

    Die SN muss veränderbar sein da die geräte verkauft werden.

    Dazu kommt das die Testumgebung immer 2 Platinen Testen soll, also werden immer 2 fester COM Ports benötigt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mnawa“ ()

    Du musst doch irgendwo in Deinem Programm einen OpenPort-Befehl haben, und dazu gibt es immer ein kommunizierendes Close:

    VB.NET-Quellcode

    1. SerialPort1.Open()
    2. SerialPort1.Close()
    ISt das in Deinem Programm so oder anders gelöst (via USB)?
    Kanst Du bitte mal ein paar entsprechende Codezeilen posten?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dies ist nicht nötig.

    Ich will nur bereits vergebene COM Ports wieder über VB 2010 freigeben.

    Es ist ja möglich über dem Gerätmanager, Dem Gerät ein Port zu zuweisen.

    Die Frage ist ja wie kann ich über vb 2010 alle COM Ports die Belegt sind wieder freigeben (nur COM1 nicht)

    oder wie kann ich wenn ein neues Gerät erkannt wird die eine andere SN hatt aber die gleiche Description ein Port zuweisen.

    (Es werden Immer 2 Ports benötigt)
    ich denke das verwaltet windows selbst.. .mit vb kannst du da nix mehr freigeben.
    da man den Port auch "doppelt" belegen kann im gerätemanager denke ich das es
    nötig wäre in der registry zu suchen (irgendwo muss die sn ja registriert sein...)
    hab mal gegoogelt...

    scheinbar zählt windows hier hoch:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter

    den Eintrag "ComDB" muss wohl bearbeitet werden

    ich habs bei mir nicht ausprobiert... aber vielleicht versuchst du es ja....

    mnawa schrieb:

    Ich will nur bereits vergebene COM Ports wieder über VB 2010 freigeben.

    Ich glaube nicht, dass Du Dich in eine bestehende Verbindung einklinken kannst, um sie z.B. freizugeben.
    Das System sorgt dafür, dass eine bestehende Verbindung nur von dem freigegeben werden kann, der sie geöffnet hat.
    Du bräuchtest dafür mehr als nur Administratorrechte.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Rod ich denke das ist auch garnicht was er will. Meiner ansicht nach willer er das Windows wieder von vorne beginnt die Portnamen zu vergeben da man sonst recht schnell über COM10 und höher ist.
    Wenn das so stimmt sollte er sich den Beitrag von Speedy nochmal genauer angucken.

    speedy schrieb:

    den Eintrag "ComDB" muss wohl bearbeitet werden

    Das sind Binary-Werte, da würde ich tunlichst die Finger von wegnehmen.
    Für jedes vorhandene Port muss es einen Treiber geben, ggf. einen virtuellen, wenn das über USB geht.
    Und dafür sollte es ein Setup oder einen Konfigurator geben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    deswegen schrieb ich ja das ich es bei mir nicht ausprobiert habe!

    aber wenn er mag darf man doch bestimmt an seinem eigenen pc da mal einen anderen wert eintragen, oder?

    wichtig wäre halt das man sich den original wert merkt und später (im falle dessen das es nicht das gewünschte ergebnis ist) wieder zurückstellen kann.

    no risk, no fun!
    lieber Finger weg!
    Da steht keine Zahl drin, das ist eine Binärinformation!
    Natürlich kann man das speichern, aber es sieht mir nicht so aus, als ob es das richtige ist.
    Bilder
    • Com.jpg

      40,11 kB, 968×161, 1.011 mal angesehen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    mnawa schrieb:

    sie sind dann nur belegt

    Wie darf ich mir das vorstellen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    mann o mann

    googelt doch einfach mal.... - es gibt übrigens auch noch andere suchmaschinen außer google!!!!!!!!!!!!!!!!

    der typ macht übrigens nix anderes als schwarze löcher erstellen (ähh sorry - als den HEX Wert ändern!)

    link zu dem text unten:
    uwe-sieber.de/misc_tools.html
    (ziemlich in der Mitte der Seite!!!)

    *******************************************************

    COM Name Arbiter Setter V0.4 - Reservierte COM-Ports freigeben

    Immer wenn ein neues Gerät installiert wird, das einen COM-Port bereitstellt, ordnet Windows dem COM-Port die erste noch nie für einen COM-Port benutzte Nummer zu.
    Jede COM-Port-Nummer merkt sich Windows als benutzt damit niemals zwei Geräte die selbe Nummer haben.
    Leider bleiben selbst die Ports schon längts deinstallierter Geräte als reserviert markiert, so dass man hier ein lästiges endloses Hochzählen der Portnummern erhält.
    Die Rerservierung speichert Windows in der Registry unter
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter
    daher der Name des Programms.
    Dort sind 32 Bytes mit je 8 Bit hinterlegt, jedes gesetzte Bit steht für einen reservierten COM-Port von 1 bis 256.

    Die einzige Auswirkung einer entfernten Reservierung ist, dass die Nummer bei einem neuen Gerät wieder vergeben werden kann (oder manuell bei einem vorhandenen). So lange man nicht zwei Geräte mit gleichen Portnummern anschließt gibt es kein Problem. Tut man es dennoch wird das zweite Gerät nicht starten, weil es den symbolic link mit dem COM-Port-Namen nicht anlegen kann. Das passiert auch bei neuen Geräten, wenn der erste vermeindlich freie Port in Wirklichkeit doch belegt ist. Also beim Aufräumen nicht übertreiben!

    Das Tool zeigt alle möglichen 256 Ports, wenn ein Kernel-Name (z.B. \Device\Serial0) dahinter steht, ist das zugehörige Gerät gerade angeschlossen (oder dessen Treiber hat beim Entfernen nicht aufgeräumt). Ein gesetzter Haken heißt "reserviert".
    Man kann dann Reservierungen durch gezieltes "Abhaken" aufheben oder durch Klick auf "Clear non present" die Haken bei allen derzeit nicht angeschlossenen Ports entfernen. Mit "Apply" wird das in die Registry geschrieben, F5 aktualsiert die Liste.

    Mit dem Paramter /rnp (remove non present) gestartet setzt es aktuell nicht vorhandene Ports auf 'verfügbar' und endet ohne Dialog.

    Screenshot:



    Download: com_name_arbiter_setter.zip

    Letzes Update: 05.01.2012
    *******************************************************
    Bilder
    • comnamearbitertool[1].png

      6,56 kB, 317×409, 1.065 mal angesehen

    speedy schrieb:

    mann o mann
    googelt doch einfach mal....
    Warum so aufgebracht?
    Ich finde es schön, dass du den richtigen Ansatzpunkt für das Problem gefunden hast.

    Ich könnte deine Aufregung ja schon verstehen, wenn du den Link schon in deinem ersten Post geschickt hättest und es alle ignoriert hätten.
    Aber auch du hast in diesem Thread erst beim sechsten Anlauf den vollständigen Weg aufgedeckt.

    Danke für den Link.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ist ja toll das Programm.
    Aber die frage ist ja wie ich es in vb 2010 erstellen kann, ohne ein anderes Programm zu starten.

    am besten genau so wie von speedy beschrieben, dass die nicht mehr angeschloßenen com ports entfernt werden.

    Ich denke das währe auch für viele andere nützlich.