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
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
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
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
value = instance.IsOpen kann noch nicht die lösung sein loade mir erma die 2,3 gig. SOllte fix gehen (1,7 mb/s)
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 |
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
PS; irgendwie will das nicht. Bekomme keine Msg
poste doch mal deinen Code. das bekommen wir schon hin
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
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"
Irgendwie meldete er sich nicht automatisch an. Code Schnipsel sind aussem Kopf aber in etwa kommt es so hin
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.
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.
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
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
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
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
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
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.
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?
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!
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.