mikrocontroller.net

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


Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dennis U. (atmegadennis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Olaf,

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

if Portopen = true then blabla

Gruß

Dennis

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus Volz (valvestino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Olaf,
hast Du schon mal
Try
   SerialPort1.Open()   
Catch [optionaler_ExceptionFilter]
   ' Fehlerbehandlungscode
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

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: GPS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

unter dem folgend Link findest du ein Beispielcode zu deinem Problem:

http://entwickler-forum.de/showthread.php?t=42939&...

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.