Forum: PC-Programmierung Mit VB.Net überprüfen, welcher serieller Port frei ist


von Olaf (Gast)


Lesenswert?

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

von Dennis U. (atmegadennis)


Lesenswert?

Hallo Olaf,

die Lösung besteht darin, den Port einfach abzufragen ob er geöffnet 
ist.

if Portopen = true then blabla

Gruß

Dennis

von Olaf (Gast)


Lesenswert?

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

von Markus V. (valvestino)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

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.

von Philipp B. (philipp_burch)


Lesenswert?

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.

von Christian R. (supachris)


Lesenswert?

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...

von GPS (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.