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.