COM-port verschwindet beim trennen von USB

Ich bin prototyping eine Art Arduino-basierte docking-station für ein tablet über den USB-port als Anschluss. Das heißt, ich brauche die Unterstützung, um die Fähigkeit zu stecken/ziehen Sie den USB-Stecker, während die Anwendung auf dem tablet läuft.

Dem tablet läuft eine c# - Anwendung (.net 4.5 auf Win7 64-bit), in dem ich die Verbindung zum Arduino Uno. Wenn die Anwendung gestartet wird, ich Schleife alle verfügbaren COM-ports mittels:

var ports = SerialPort.GetPortNames(); //-> [COM3,COM4,COM8]
foreach (var port in ports)
{
     var serial = new SerialPort(portname, baudRate);
     //attempt handshake and connect to right port
}

Diese Arbeit gut, aber wenn ich trennen Sie und stecken Sie das USB-Kabel und reattempt zu verbinden, um den Arduino (während die Anwendung weiterhin ausgeführt wird), wird das Arduino-port (COM8) ist nicht mehr gelistet in:

SerialPort.GetPortNames(); //-> [COM3,COM4] and no COM8

Sogar die Anwendung neu zu starten (mit der Arduino umgebogen) wird im Ergebnis nur [COM3,COM4] aufgelistet.

Der einzige Weg, um es wieder an die Arbeit zu ziehen und stecken der Arduino während der Anwendung ist nicht ausgeführt.

Was mich verwirrt, ist die Tatsache, dass wenn ich den Stecker in die Arduino-Uno nach dem Start der Anwendung, die SerialClass erkennt das neu hinzugefügte port und ermöglicht es mir, zu verbinden.

Das problem tritt nur auf, wenn ich trennen Sie und stecken Sie das Gerät, wenn die Anwendung ausgeführt wird. Es scheint, dass trotz der Möglichkeit zum zurücksetzen des COM-port (in code oder manuell im Geräte-manager), die SerialClass (und native Win32_SerialPort - ich habe diesen auch) das nicht erkennen, es sei denn, ich die Anwendung neu starten

Was könnte der Grund dafür sein? Und wie kann ich sicherstellen, dass meine Anwendung kann wieder eine Verbindung zu diesem port? Gibt es alternativen zur Verwendung der SerialPort-behandeln Sie den USB-Stecker?

  • Nur eine Sekunde hier, sind Sie mit einer seriellen Schnittstelle als USB-port oder ein USB-port wie eine serielle Schnittstelle? AFAIK, jedes mal, wenn Sie wieder etwas zu einem COM-port müssen Sie es neu starten.
  • serielle Schnittstelle, Verbinde ich Dinge die ganze Zeit zu serail-ports mit out Neustart. Die Reale serielle ports (rs-232) sind sehr robust.(Dachte ich)
  • Wenn der Virtuelle COM-port geht Weg, so hat alles seine Schnittstellen und die app eine Verbindung herstellen zu können muss der Umgang mit diesen Ausnahmen, und dann versuchen, Sie wiederzufinden. Die meisten apps, die seriellen ports sind alt und nicht behandeln die rippen entfernt von dem, was es erwartet, dass ein hardware-Schnittstellen, was Häufig in der Ressource verloren bis Neustart. Ich beachten Sie, dass der Arduino den Serial Monitor verarbeitet diese, außer ziemlich gut und erholt. Es macht eine Menge Lärm in seiner Ausgabe in der Konsole. Sie Mai wollen schauen, wie es das tut und die Portierung auf C#
  • Ich fand einige ausgezeichnete code samples für das zurücksetzen des COM-port. Jedoch, trotz dem zurücksetzen, es Bedarf noch der .net-Anwendung zu starten, bevor der port wird wieder erkannt. Reconnect ohne Neustart) die Ergebnisse in: System.IO.IOException: The port 'COMx' does not exist.
  • mögliche Duplikate von die Freigabe einer unplugged virtual Serial Port
  • haben Sie versucht, die Entsorgung der von dieser Instanz der SerialPort - * und eine neue erstellen, wenn Sie eine Verbindung getrennt?
  • Ja, wenn ich versuchte, eine Verbindung zu port, verwende ich eine neue instance von SerialPort. Das problem jedoch ist die Tatsache, dass das COMx-port einfach nicht unter den verfügbaren Schnittstellen.
  • Ich bin mir nicht sicher, ob es das gleiche problem da, die Frage ist, über Schwierigkeiten beim schließen der Anwendung und Neustart des kompletten system-reset die ports. Das Hauptproblem, ich bin mit hier ist, dass kann ich zwar zurücksetzen (also deaktivieren/aktivieren) Sie die COM-port-nach Umstecken des Geräts; die .net SerialPort-Klasse scheint nicht neu zu erkennen, der Hafen, obwohl der Geräte-manager listet das Gerät auf den richtigen Anschluss. Ich bekomme noch immer: "System.IO.IOException: Der port "COMx" ist nicht vorhanden". Nur wenn ich die Anwendung neu starten und dann deaktivieren/aktivieren Sie den port, kann ich wieder.
  • Es ist das gleiche problem. Jeder USB-Treiber falsch verhält, auf seine eigene Weise. Ihr problem ist, dass es nicht aktualisieren Sie die Registrierung ordnungsgemäß, die Schlüssel, die SerialPort verwendet, wenn es fordert, GetPortNames(). Die Nachricht sollte klar sein, nicht trennen Sie das Kabel, während der port in Gebrauch ist, es gibt einfach keinen Punkt, um es. Sie don ' T jerk ein flash-Laufwerk aus dem USB-port entweder während der Windows schreibt, behandeln, USB-Emulatoren die gleiche Weise. Wenn diese Funktion für Sie wichtig ist aus irgendeinem mysteriösen Grund, dann müssen Sie Einkaufen gehen für ein anderes mit einem besseren Treiber.
  • Das ist es, was ich fürchtete. Das problem ist, dass ich bin prototyping eine Art Arduino-basierte docking-station für ein tablet über den USB-port als Anschluss; daher der ad-hoc-plug/unplug-Anforderung. Irgendwelche Ratschläge oder Hinweise auf alternative Ansätze? Vielleicht schreiben Sie einen benutzerdefinierten Treiber?
  • Ich gab sehr spezifische Beratung in der verlinkten Frage. Schreiben Sie Ihre eigenen Fahrer war sicherlich nicht Teil davon.

InformationsquelleAutor dsfgsho | 2013-05-23
Schreibe einen Kommentar