mikrocontroller.net

Forum: PC-Programmierung VB 2008 Fehler abfangen und abarbeiten?


Autor: Sebastian Förster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hab schon lange kein Visual Basic mehr "programmiert"... Wollte mir 
jetzt aber für ein Projekt nen kleines Programm zusammenstellen, dass 
mir ein paar Daten auf den Microcontroller läd. So weit so gut, klappt 
alles wunderbar...
Nur bekomm ich von Visual Basic nen Fehler zurück, wenn jemand nen com 
Port auswählt der nicht gültig ist. Ich möchte dieses Fehler jetzt 
abfangen und behandeln. Ich hab nur noch keine Idee wie. Ich weiß nur 
das es mal so etwas gab wie: On Error resum next oder der gleichen.

Hier der Code:

           RS232.PortName = COMPORT.Text
           RS232.Open()


Dann hab ich noch ein zweites kleines Problem. Ich lese aus einer 
Textbox eine Zahl und multipliziere sie mit 1024 und versuche diese Zahl 
in mein RS232 Protokoll zu schieben, also Wandle ich sie erst in ein 4 
stelliges Byte arryer um. Das funktioniert auch wunderbar. Leider nicht 
bei allen Zahlen. Was ich mir nicht so richtig erklären kann. Also bei 
100*1024 gehts, aber bei 99*1024 bekomm ich den Fehler, dass ich 
versuche durch 0 zu teilen. Was aber nicht der Fall ist!


Hier der Code:

      Dim kp_l As Integer

           Dim kp_b(3) As Byte

           kp_l = Int((kp * 1024))
           kp_b(3) = Int(kp_l \ (2 ^ 24))
           kp_b(2) = Int(kp_l \ (2 ^ 16))
           kp_b(1) = Int(kp_l \ (2 ^ 8)) '<-- hier zeigt es den Fehler 
an
           kp_b(0) = kp_l Mod (2 ^ 8)

Hab irgendwo gelesen das Integer bei VB 2008 nun 32 Bit breit ist... 
also daran das kp_l überläuft kanns doch nicht liegen, oder?


Wie gesagt, die zwei Fehler müsste ich noch beseitigen, ansonten steht 
die Kommunikation zum Microcontroller wie ne eins!
Besonders erfreulich ist es, wie schnell man so ein Windowsprogramm 
zusammengeschoben bekommt und wie schnell die UART Kommunikation steht.

Grüße

Basti

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich programmiere zwar RealBasic und nicht VB, aber ich denke, dass die 
Kommunikation mit dem COM-Port systembedingt ähnlich sein müsste. Du 
solltest den Namen des Ports nicht frei eingeben lassen, sondern vorher 
die Namen der vorhandenen Ports abfragen. Ausserdem ist es bestimmt 
"sauberer" über die interne Port-Nummer zu geben un dnicht über den 
Namen.

In RB sieht das z.B. so aus:

for i=0 to system.serialport.count-1
 list.addrow str(i)+"-"+system.serialport(i).name
next

(list ist eine Listbox)

Und dann so etwa:

if serialport(i).open then
 serialport(i).write("bla bla ...)
end if

Gibst sowas in VB nicht?

Gruß, Frank

Autor: Sebastian Förster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Frank...

das geht sicherlich... aber ich würde es besser finden den Fehler 
abzufangen... Es kann ja auch passieren das jemand wärend mein Programm 
geladen ist, den USB zu RS232 Adapter abzieht und an ein anderen USB 
ansteckt... dann ändert sich bei mir z.B. die Com Adresse und schwupp 
hab ich wieder den Ausnahmefehler...

Würde es andersrum doch eher vorziehen und sauberer finden...

für die Com Ports zur Auswahl, hab ich ne Combobox gemacht, mit 16 Com 
Ports, aber man darf seinen eigenen auch eingeben, wenn man möchte...

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian Förster schrieb:
> Hallo,
>
> hab schon lange kein Visual Basic mehr "programmiert"... Wollte mir
> jetzt aber für ein Projekt nen kleines Programm zusammenstellen, dass
> mir ein paar Daten auf den Microcontroller läd. So weit so gut, klappt
> alles wunderbar...
> Nur bekomm ich von Visual Basic nen Fehler zurück, wenn jemand nen com
> Port auswählt der nicht gültig ist. Ich möchte dieses Fehler jetzt
> abfangen und behandeln. Ich hab nur noch keine Idee wie. Ich weiß nur
> das es mal so etwas gab wie: On Error resum next oder der gleichen.
>
> Hier der Code:
>
>            RS232.PortName = COMPORT.Text
>            RS232.Open()
 
Try 
    RS232.Open()
Catch e As Exception
End Try
http://msdn.microsoft.com/en-us/library/aa289505(VS.71).aspx

> Hier der Code:
>
>       Dim kp_l As Integer
>
>            Dim kp_b(3) As Byte
>
>            kp_l = Int((kp * 1024))
>            kp_b(3) = Int(kp_l \ (2 ^ 24))
>            kp_b(2) = Int(kp_l \ (2 ^ 16))
>            kp_b(1) = Int(kp_l \ (2 ^ 8)) '<-- hier zeigt es den Fehler
> an
>            kp_b(0) = kp_l Mod (2 ^ 8)

Mit der BitConverter-Klasse geht das etwas einfacher
Dim kp_b As Byte( ) = BitConverter.GetBytes(kp_l)
' andere Richtung wäre
kp_l = BitConverter.ToInt32(kp_b, 0)

Autor: Basti M. (counterfeiter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wunderbar... funktionert beides hervorragend...

Danke an den Visual Basic Speziallisten!

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.