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
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
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...
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()
1 | |
2 | Try
|
3 | RS232.Open() |
4 | Catch e As Exception |
5 | 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
1 | Dim kp_b As Byte( ) = BitConverter.GetBytes(kp_l) |
2 | ' andere Richtung wäre |
3 | kp_l = BitConverter.ToInt32(kp_b, 0) |
Wunderbar... funktionert beides hervorragend... Danke an den Visual Basic Speziallisten!
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.