Hallo!
Folgende Situation:
Ich schreibe gerade an eier Steuersoftware in VB 2005 mit der ich ein - auf RN-Control umgerüstetes - RC-Fahrzeug über den PC (per RS232) steuern möchte.
Dazu schicke ich beim Klick auf die verschiedenen Steuer-Buttons in der VB-Steuer-Oberfläche einen entsprechenden 'Kommando-String' an das RN-Control.
Das RN-Control vergleicht den eingehenden String in einer 'Select Case' - Schleife und schickt das erkannte Kommando zur Kontrolle unverändert an den PC zurück.
Damit ich jetzt feststellen kann, ob der String korrekt empfangen wurde und die entsprechenden Aktionen ausführen kann, vergleiche ich jetzt den vom RN-Control zurückgelieferten String mit einer 'Select Case'-Abfrage im Steuer-Programm.
Was schon funktioniert:
Der vom PC gesendete Kommando-String wird vom RN-Control empfangen und per 'Select Case' der entsprechende Programmpfad ausgeführt. D.h. beim RN-Control funktioniert der Vergleich problemlos.
Was nicht funktoiniert:
Der String den mir das RN-Control zurückliefert, wird in meiner 'Select Case'-Abfrage nicht erkannt.
Wenn ich mir den String z.B. per MessageBox anzeigen lasse, wird mir aber eine absolut korrekte Zeichenfolge angezeigt.
Jetzt wüsste ich gerne, wie ich den eingehenden String richtig in meiner 'Select Case'-Schleife richtig abfragen kann.
Der Code im RN-Control ist dieser: (das ist ein kleines Test-Programm, damit es übersichtlicher für euch ist)
Und mein VB-Programm (Ausschnitt aus der Entsprechnung zum o.g. Test-Programm) hat folgenden Code:Code:$regfile "m32def.dat" $crystal = 16000000 $framesize = 32 $hwstack = 32 $swstack = 32 $baud = 19200 '====================================================== 'Konfigurationen '====================================================== Config Serialin = Buffered , Size = 180 Config Serialout = Buffered , Size = 180 '======================== ' Deklarationen '======================== Dim InString as String * 25 Dim InByte as Byte InString = "" InByte = 255 Enable Interrupts '======================= 'Hauptprogramm '======================= Do Do InByte = inkey() If InByte <> 0 then InString = Instring + chr(InByte) End if Loop until InByte = 0 InByte = 255 Select case InString case "MOVE_FWD_R" Print InString case "MOVE_STOP" print InString case "SWITCH_LIGHT_AUTO_ON" print InString case else End select InString = "" waitms 100 'wieso gehts nur hiermit? Loop
Das VB-Programm hab ich auch nochmal als komplettes VB.2005-Projekt angehängt.Code:Dim InString As String = "nix" Dim OutString As String = "nix" Private Sub bsSenden1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bsSenden1.Click OutString = "MOVE_FWD_R" SerialPort1.Write(OutString) End Sub Private Sub bsSenden2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bsSenden2.Click OutString = "MOVE_STOP" SerialPort1.Write(OutString) End Sub Private Sub bsSenden3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bsSenden3.Click OutString = "SWITCH_LIGHT_AUTO_ON" SerialPort1.Write(OutString) End Sub Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived InString = SerialPort1.ReadLine() Select Case InString Case "MOVE_FWD_R" MessageBox.Show(InString + " wurde per 'Case' erkannt!") Case "MOVE_STOP" MessageBox.Show(InString + " wurde per 'Case' erkannt!") Case "SWITCH_LIGHT_AUTO_ON" MessageBox.Show(InString + " wurde per 'Case' erkannt!") End Select End Sub
Ich hoffe ihr könnt mir hier weiterhelfen.
Ich hab jede mir bekannte Methode versucht das richtig zu vergleichen, aber nichts hat funktioniert.







Zitieren

Lesezeichen