mikrocontroller.net

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


Autor: Nette Mann (nette-mann)
Datum:

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

Autor: thomas (Gast)
Datum:

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

Autor: Nette Mann (nette-mann)
Datum:

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

Autor: EXA (Gast)
Datum:

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

Autor: nette mann (Gast)
Datum:

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

Autor: thomas (Gast)
Datum:

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

Autor: nette mann (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS; irgendwie will das nicht. Bekomme keine Msg

Autor: thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
poste doch mal deinen Code.
das bekommen wir schon hin

Autor: Joschua Miller (remmy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Statt dies MSDN runterzuladen gehts auch via Webpage.

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

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

Remmy

Autor: Gast (Gast)
Datum:

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

Autor: Nette Mann (nette-mann)
Datum:

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

Autor: Joschua Miller (remmy)
Datum:

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

Autor: Nette Mann (nette-mann)
Datum:

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

Autor: thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dein readline bekommt einen timeout

du musst das mit try/catch abfangen

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

mfg
thomas

Autor: Nette Mann (nette-mann)
Datum:

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

Autor: thomas (Gast)
Datum:

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

Autor: Nette Mann (nette-mann)
Datum:

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

Autor: spess53 (Gast)
Datum:

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

Autor: Nette Mann (nette-mann)
Datum:

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

Autor: spess53 (Gast)
Datum:

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

Autor: Nette Mann (nette-mann)
Datum:

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

Autor: Thomas (Gast)
Datum:

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

Autor: Nette Mann (nette-mann)
Datum:

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

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.