Forum: PC-Programmierung VB 2008 Bei Programmstart prüfen ob COM frei ansonsten ERROR ausgeben


von Nette M. (nette-mann)


Lesenswert?

Wie bewerkstellige ich das am besten?

Also aus COM Port lesen/ senden etc kein Problem nur am Anfang prüfen ob 
der überhaupt frei ist würde mich interessieren wie man das schreibt

von thomas (Gast)


Lesenswert?

hi,
wenn du ihn öffnen kannst, dann ist er frei.
Wenn ein anderes Programm den ComPort bereits geöffnet hat, bekommst du 
einen Fehler.

Ob Hardwareseitig ein Gerät am ComPort ist, das kannst du nicht 
überprüfen, außer dein eigenes. Dem kannst du ja was schicken, von dem 
du weißt, was zurückkommen muss.

mfg
thomas

von Nette M. (nette-mann)


Lesenswert?

Dann is mein Problem nicht ganz rübergekommen. Neuer Versuch:
Wenn ich z.B. Hypertherminal offen hab und das prog starte kommt 
natürlich kritischer error bla und blub und statt dessen hät ich gerne 
ne Meldung wie Der Anschluss (COM1) ist nicht frei. und dann z.B. 2 
Buttons weiter und beenden und nach weiter überprüft er den Anschluss 
und startet das hauptprogramm

Mit sowas hatte ich mal probiert aber da steckt noch nen Fehler drin da 
UART.OPEN keinen Wert liefert:

If UART.Open = false then
Meldungs teil mit popup fenster etc
else
Form1.Show()
end if

von EXA (Gast)


Lesenswert?

Hallo zusammen, wenn mich nicht alles täuscht, dann müsste das 
folgendermaßen funktionieren:

Dim instance As SerialPort
Dim value As Boolean

value = instance.IsOpen

Das hab ich in der MSDN 2008 Library gefunden. Falls du dir die noch 
nicht geholt hast, kannst du das unter
http://www.microsoft.com/downloads/details.aspx?displaylang=de&FamilyID=7bbe5eda-5062-4ebb-83c7-d3c5ff92a373
kostenlos tun. Hat mir auf jeden Fall ne menge geholfen. Der Download 
ist trotz der beachtlichen Größe sehr fix.
Hoffe dir geholfen zu haben.

MfG
EXA

von nette mann (Gast)


Lesenswert?

value = instance.IsOpen

kann noch nicht die lösung sein loade mir erma die 2,3 gig. SOllte fix 
gehen (1,7 mb/s)

von thomas (Gast)


Lesenswert?

das beim Versuch, einen geöffneten ComPort zu öffen ein Fehler kommt, 
ist normal.

dafür gibt es ja die Fehlerbehandung.
In deinem Fall würde es so aussehen
1
private function Open_COM_Port() as boolean
2
 Try
3
    SerialPort1.Open()
4
Catch ex As Exception
5
    MsgBox(ex.Message)
6
    return False
7
End Try
8
Return True
9
End Function

von nette mann (Gast)


Lesenswert?

private function Open_COM_Port() as boolean
 Try
    SerialPort1.Open()
Catch ex As Exception
    MsgBox(ex.Message)
    return False
End Try
Return True
End Function



SO ganz worked das noch nicht aber ich werde den Denkanstoß jetzt mal 
studieren

von Gast (Gast)


Lesenswert?

PS; irgendwie will das nicht. Bekomme keine Msg

von thomas (Gast)


Lesenswert?

poste doch mal deinen Code.
das bekommen wir schon hin

von Joschua M. (remmy)


Lesenswert?

Statt dies MSDN runterzuladen gehts auch via Webpage.

http://msdn.microsoft.com/de-de/library/system.io.ports.serialport.aspx

Ausserdem:

Die IsOpen-Eigenschaft verfolgt, ob der Anschluss für den Aufrufer 
geöffnet ist, und nicht, ob der Anschluss für eine beliebige Anwendung 
auf dem Computer geöffnet ist.

Und noch was:

Im try catch Block, in der der Port geöffnet wird, nicht die Exception 
abfangen, sondern auf InvalidOperationException. Es gibt fast keine 
Gründe die "Exception" Ausnahme abzufangen.

http://msdn.microsoft.com/de-de/library/system.io.ports.serialport.open.aspx

Remmy

von Gast (Gast)


Lesenswert?

Also Bis auf UART.Open() WERT_VOrN.Readline() Label1.Text = WERTVORN 
UART.Close() hat das Programm noch nicht viel Inhalt (Lasse die Log 
funktion die die Werte in ne sdf DB speichert mal weg) Debugge oder 
erstelle ich das Programm und der ATmega8 sendet keine Werte Hängt sich 
das Programm auf. Meine Idee war jetzt,  ne extra form die dann meldet 
bzw fragt: Modul angeschlossen? Mit dem klicken auf Ja wird true in eine 
Tabelle der DB eingefügt und mit nein false. Nur ich kenne den Befehl 
nicht um die Tabelle zu leeren oihne sie zu löschen. Weil so wird die 
Tabelle ellen lang und die Sache mit Ja/Nein ist für die Katz. Am 
einfachsten wäre es eine Boolean Variable mit zu übergeben und dann mit 
If Then End If die Uartsache "auszuschalten"

von Nette M. (nette-mann)


Lesenswert?

Irgendwie meldete er sich nicht automatisch an. Code Schnipsel sind 
aussem Kopf aber in etwa kommt es so hin

von Joschua M. (remmy)


Lesenswert?

Hmm.. wo liegt nun das Problem genau ?

Beim Öffnen der Com Schnittstelle oder hast du Probleme mit der
Datenbank ? Du willst ne Tabelle in die Datenbank einfügen ?

Wenn dein Programm darauf wartet Daten zu empfangen, dann wartet das
Programm auch, es hängt sich nicht auf.

Zitat MSDN :
Standardmäßig wird die ReadLine-Methode gesperrt, bis eine Zeile 
empfangen wird. Wenn Sie dieses Verhalten ändern möchten, legen Sie die 
ReadTimeout-Eigenschaft auf einen Wert ungleich NULL fest, damit die 
ReadLine-Methode eine TimeoutException auslöst, wenn am Anschluss keine 
Zeile verfügbar ist.


Remmy.

von Nette M. (nette-mann)


Lesenswert?

Fangen wir mit der Fehlerdiagnose an:

Programm wird gebuildet ATMEGA mit MAX232 ist vom Strom getrennt --> 
sendet keine Daten. Programm ist gebuildet und ATMEGA weiterhin 
Stromlos. Mauszeiger wird beim drüberfahren über Form1 zur Sanduhr und 
beim drauf klicken kommt die Meldung "critical Error" also nicht wort 
für wort sondern halt ne Fehlermeldung mit verweis auf die Zeile 
Label1.Text = UART.Readline() (Ist der Erste befehl betreffend UART 
nach Uart.Open() )


ATMEGA bekommt Strom --> sendet Daten Alles SUPER Das mit Log etc ist 
nur auswerten der Daten Anspeichern etc.

von thomas (Gast)


Lesenswert?

dein readline bekommt einen timeout

du musst das mit try/catch abfangen

http://msdn.microsoft.com/de-de/library/system.io.ports.serialport.readline.aspx

mfg
thomas

von Nette M. (nette-mann)


Lesenswert?

aber

try

Uart.Open()
Uart.Readline()
Uart.close

catch ex as exeption
Msg(ex)
end if


keine Ahnung ob des so hin haut ist aussem Gedächnis

Aber so solls gehen? gleich mal testen

ALSO

        Try

            UART.Open()
            UART.ReadLine()
            UART.Close()

        Catch ex As Exception
            MsgBox(ex)
        End Try

Nu ist die Sanduhr weg, aber das Problem bleibt bestehen

von thomas (Gast)


Lesenswert?

na das problem bleibt nicht wirklich bestehen.

ohne try/catch hast du die Fehlermeldung von Windows bekommen,
Jetzt gibst du sie selber aus mit msgbox(ex).
diese Zeile musst du mal wegmachen.

mfg
thomas

von Nette M. (nette-mann)


Lesenswert?

ohne Msgbox hab ich wieder die Sanduhr, aber mit MsgBox(ex) und ohne 
Sanduhr öffnet sich aber keine MsgBox

Als Fehlermeldung kommt: Winzigweich .NET Framework Unbehandelte 
Ausnahme bla und blubb

Der Anschluss ist bereitsgeöffnet

Details                  Weiter Beenden

von spess53 (Gast)


Lesenswert?

Hi

Ist 'UART' eine Komponente, und wird automatisch angelegt oder erzeugst 
du das 'per Hand'. Ich komme zwar aus der Delphi-Ecke, aber für mich 
macht das den Eindruck, als ob 'UART' zwar als 'Variable' existiert, 
aber das zugehörige Objekt nicht angelegt ist.

MfG Spess

von Nette M. (nette-mann)


Lesenswert?

es gibt in VB 2008 ein Element was man auf die Form also das Fenster 
zieht und dann definiert welche baud rate etc und dieses heißt bei mir 
UART. mit UART.Open() sag ich meinem Programm das es doch bitte den 
Anschluss öffnen möchte z.B.

von spess53 (Gast)


Lesenswert?

Hi

Ok. Das ist analog zu Delphi. UART hat doch , so viel ich weiss, noch 
eine Funktion 'IsOpen', mit der du überprüfen kannst, ob 'UART.Open' 
erfolgreich war. Hast du das schon mal getestet?

MfG Spess

P.S. BO-Fan?

von Nette M. (nette-mann)


Lesenswert?

Den Befehl kannte ich noch nicht. VB kennt ihn aber da ist noch 
lernbedarf danke erstmal

PS: BO FAN wie kommsten dadrauf? Viva los tioz!

von Thomas (Gast)


Lesenswert?

Zip deinen Projektordner und stell ihn hier rein, ich schau mir das 
morgen früh mal an ( ca5:30)

Ich versteh dein problem nicht, du bekommst doch alles, was du brauchst.
die fehlermeldung "Der Anschluss ist bereitsgeöffnet" sagt doch aus, das 
das COMPort bereits geöffnet ist.

die andere Fehlermeldung mit dem "Timeout" kommt bei readline, wenn dein 
MC nichts schickt, also im Buffer nichts zum Lesen da ist.

wie gesagt, stell dein Projekt mal hier ins forum oder an 
twerner(ät)ipc-systems.de

gruß Thomas

von Nette M. (nette-mann)


Lesenswert?

hab da eben selber was gebastelt am anfang kommt eine Form mit Modul 
angeschlossen oder nicht und danach gestaltet sich das programm

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.