- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 4 von 4

Thema: Problem beim Vergleichen von Strings (µC -> VB.2005)

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    30.07.2007
    Alter
    41
    Beiträge
    214

    Problem beim Vergleichen von Strings (µC -> VB.2005)

    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)

    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
    Und mein VB-Programm (Ausschnitt aus der Entsprechnung zum o.g. Test-Programm) hat folgenden Code:

    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
    Das VB-Programm hab ich auch nochmal als komplettes VB.2005-Projekt angehängt.

    Ich hoffe ihr könnt mir hier weiterhelfen.
    Ich hab jede mir bekannte Methode versucht das richtig zu vergleichen, aber nichts hat funktioniert.
    Angehängte Dateien Angehängte Dateien

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen