Hallo, unter VB.Net kann ich mit SerialPort.GetPortNames() überprüfen, welcher seriellen Schnittstelle ein Rechner hat. Wie kann ich überprüfen, welcher der von SerialPort.GetPortNames() gefundenen seriellen Ports frei oder belegt ist? (Bitte ohne Einsatz von "On Error Resume Next".) Wenn ich versuche einen belegten Port zu öffnen, hält der Debugger mein Programm an. Ich möchte, wenn möglich, das Problem mit System.IO.Ports-Namespace lösen. Vielen Dank Olaf
Hallo Olaf, die Lösung besteht darin, den Port einfach abzufragen ob er geöffnet ist. if Portopen = true then blabla Gruß Dennis
Hallo Dennis, um mit SerialPort1.IsOpen ein "True" zu erhalten, muss der Port geöffnet sein (sonst erhalte ich immer ein "False", egal ob er frei ist oder belegt). Wenn ich aber einen belegten Port öffnen will, hängt sich das Programm auf (es sei denn ich verwende "On Error Resume Next", was ich sehr unschön finde). In meinem Fall belegt ein Gerät, das nichts mit meinem Programm zu tun hat, den COM1; alle anderen sind frei (COM2 - COM5). Wenn ich jetzt mit meinem Programm überprüfen will, welcher Port frei ist (mit SerialPort1.IsOpen), muss ich den Port öffnen (da ich sonst immer ein "False" erhalten); wenn ich jetzt aber den belegten COM1 öffnen will, hängt sich das Programm auf (wenn ich mit "On Error Resume Next" arbeiten will, was doch sehr unelegant ist). So beißt sich die Katze in den Schwanz ... Gruß Olaf
Hi Olaf, hast Du schon mal
1 | Try
|
2 | SerialPort1.Open() |
3 | Catch [optionaler_ExceptionFilter] |
4 | ' Fehlerbehandlungscode |
5 | End Try |
in Erwägung gezogen? Das wäre die gängige Methode um auf Fehler zu reagieren und hat auch in VB.NET Einzug gehalten. Die exakte Syntax bekommst du in der VS-Hilfe oder über MSDN im www. Gruß Markus
Alles einfach zu Öffnen ist sehr unschön, und kann auch Fehlfunktionen der an den eigentlich nicht benutzten Port angeschlossenen Geräte nach sich ziehen. Schau einfach in der Registry, welche Ports da sind. Geht zumindest unter C++ sehr leicht. Alle Com-Ports, die momentan am PC sind (ob USB oder normal, ist egal) sind unter HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM zu finden.
Christian R. wrote: > Alles einfach zu Öffnen ist sehr unschön, und kann auch Fehlfunktionen > der an den eigentlich nicht benutzten Port angeschlossenen Geräte nach > sich ziehen. > Schau einfach in der Registry, welche Ports da sind. Geht zumindest > unter C++ sehr leicht. > Alle Com-Ports, die momentan am PC sind (ob USB oder normal, ist egal) > sind unter HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM zu finden. Die vorhandenen Ports rauszubekommen ist ja auch nicht das Problem. Er will ja erkennen, ob ein bestimmter Port geöffnet werden kann oder bereits von einem anderen Programm verwendet wird. Da ist die Brute-Force-Methode (Alle öffnen und den Fehler abfangen) wohl am Einfachsten. Inwiefern das Probleme bereiten kann weiss ich nicht, sollte aber eigentlich unproblematisch sein.
Philipp Burch wrote: > Die vorhandenen Ports rauszubekommen ist ja auch nicht das Problem. Er > will ja erkennen, ob ein bestimmter Port geöffnet werden kann oder > bereits von einem anderen Programm verwendet wird. Da ist die > Brute-Force-Methode (Alle öffnen und den Fehler abfangen) wohl am > Einfachsten. Inwiefern das Probleme bereiten kann weiss ich nicht, > sollte aber eigentlich unproblematisch sein. Ohje, wieder nicht richtig gelesen. Stimmt. Naja, es sollte keine Probleme machen, tut´s aber leider. Ich hab z.B. einen MSP430-USB Debugger, der hat einen virtuellen COM-Port. Ist der Debugger aktiv und ich versuche, den COM-Port mit der Hau-Drauf-Methode nochmal zu öffnen bekomme ich zwar einen Fehler gemeldet, aber der Debugger schmiert ab und ist erst durch Ab- und Antecken wieder zu holen. Muss man genaustens prüfen...
Hi, unter dem folgend Link findest du ein Beispielcode zu deinem Problem: http://entwickler-forum.de/showthread.php?t=42939&highlight=serialport In dem Beispiel werden alle Ports ermittelt und versucht zu öffnen. Wenn sich ein Port nicht öffnen lässt ist er belegt. Lässt sich ein Port öffnen ist er frei und wird als Item einer Combobox zugefügt. Ist zwar keine schöne Lösung, aber besser als keine. MFG GPS
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.