- LiTime Speicher und Akkus         
Ergebnis 1 bis 2 von 2

Thema: Stringvariabel in ein Byte konvertieren, select case mit Stringvariablen

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    49
    Beiträge
    381

    Stringvariabel in ein Byte konvertieren, select case mit Stringvariablen

    Anzeige

    Praxistest und DIY Projekte
    Liebes Forum,

    über RS232 lese ich einen String ein

    Code:
    Read_string()<\r><\n>
    +IPD,0,13:xxxxxxxx<\n>
    <\r><\n>
    Rxbyte(10 .. 11): 49  48<\r><\n>
    Esp_uni_byte(1 .. 2): 10  0<\r><\n>
    esp_uni_byte: 9<\r><\n>
    app_command: :xxxxxxxxx<\r><\n>
    error <\r><\n>
    +IPD,0,7 besagt, dass 7 Zeichen vom Sender 0 gesendet werden: garten + 1x Line Feed.
    Abhängig von der Anzahl der gesendeten Daten, möchte ich nur die Informationen z.Bsp "xxxxx0" aus dem String filtern.
    Ich möchte nun den String "xxxxxx" herausfiltern und weiter in einer select case Struktur verarbeiten.

    dazu habe ich eine Stringvariable:
    Code:
    Dim Rxstring As String * 51
    Dim Rxbyte(50) As Byte At Rxstring Overlay
    Dim App_command As String * 15
    Ãœber dem String liegt ein Byte Array, Rxbyte(10) ; Rxbyte(11):

    +IPD,0,13:gaaaa-ravo
    => 043 073 080 068 044 048 044 049 051 058 103 097 097 097 097 045 114 097 118 111 045 049 010
    ! !
    Rxbyte(10)
    !
    Rxbyte(11) = beide Byte ergeben 13 und das ist die Anzahl für: gaaaa-ravo-0

    Nun wollte ich über Esp_uni_byte(1) = Val(rxbyte(10)) mir die Zahl als Byte ausgeben, was auch gut geht.
    Code:
         If Uart_3_rxd = 1 Then
          Uart_3_rxd = 0
          Rxstring = Read_string()
          Print #2 , "Read_string()" ; Rxstring
          Esp_str_count = 0
          Print #2 , "Rxbyte(10 .. 11): " ; Rxbyte(10) ; "  " ; Rxbyte(11)       ' was steht in den beiden byts?
    
          Esp_uni_byte(1) = Val(rxbyte(10))                     ' anzahl der gesendeten zeichen in byte schreiben
          Print #2 , "Esp_uni_byte(1 .. 2): " ; Esp_uni_byte(1) ' anzahl anzeigen
          Esp_uni_byte(1) = Esp_uni_byte(1) - 1                 ' -1 für "LF(Line Feed)"
          Print #2 , "esp_uni_byte: " ; Esp_uni_byte(1)
          App_command = Mid(rxstring , 12 , Esp_uni_byte(1))    ' aus dem empfangenen string  daten entnehmen
          Print #2 , "app_command: " ; App_command ; "  " ; Len(app_command)
          Select Case App_command                               ' string auswerten
                 Case "xxxx" : Print #2 , "app_command " ; "garten!!!"
                 Case "xxx-1" : Print #2 , "app_command " ; "Rasen vorn an"
                 Case "xxx" : Print #2 , "app_command " ; "Rasen vorn aus"
                 Case Else : Print #2 , "error "
          End Select
    
       End If
    1. Frage:
    mit Esp_uni_byte(1) = Esp_uni_byte(1) - 1 ziehe ich immer ein zeichen ab, für line feed, wie kann ich über select case dieses line feed mit in die Auswertung nehmen? Also Case "garten"

    2. mit dem Programmabschnitt lässt sich nur Daten unter 10 Zeichen auswerten, habe ich mehr sieht meine Stringauswertung dann so aus

    Code:
    Read_string()<\r><\n>
    +IPD,0,13:gaaaa-ravo-1<\n>
    <\r><\n>
    Rxbyte(10 .. 11): 49  51<\r><\n>
    Esp_uni_byte(1 .. 2): 13<\r><\n>
    esp_uni_byte: 12<\r><\n>
    app_command: 3:gaaaa-ravo  12<\r><\n>
    error
    Ich hole 12 Zeichen ab, es werden dann für die case-Struktur dieser String genommen: gaaaa-ravo 10 Zeichen und 2x space....
    Woher kommen die 2x space her???

    Grüße MAT
    Geändert von mat-sche (30.01.2019 um 14:19 Uhr)

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    49
    Beiträge
    381
    Moin Moin!

    ich habe meinen Fehler noch selber finden können. Bei einer Zeichenfolge von mehr als 9 Zeichen stimmt der Platz nicht mehr, von dem ich dann den String hole.
    neuer Code:
    Code:
    If Uart_3_rxd = 1 Then
          Uart_3_rxd = 0
          Rxstring = Read_string()
          'inhalt Rxstring <\r><\n>+IPD,0,10:xxxxxxx<\n><\r><\n>
    
          Esp_str_count = 0
          Esp_uni_byte(1) = Instr(rxstring , "+IPD")            ' ist im string die richtige info
          If Esp_uni_byte(1) > 0 Then
             Esp_uni_byte(1) = Val(rxbyte(10))                  ' anzahl der gesendeten zeichen in byte schreiben
             Esp_uni_byte(2) = Charpos(rxstring , ":")          ' startpunkt für zu suchendes kommando suchen
             Esp_uni_byte(2) = Esp_uni_byte(2) + 1              ' start komando ist stelle +1 (nach doppelpunkt)
             Esp_uni_byte(1) = Esp_uni_byte(1) - 1              ' line feed hinter kommando abziehen
             App_command = Mid(rxstring , Esp_uni_byte(2) , Esp_uni_byte(1))       ' aus dem empfangenen string  kommando-daten entnehmen
             Select Case App_command                            ' kommandodaten auswerten
                 Case "xxx" : Print #2 , "app_command " ; "garten!!!"
                 Case "xxx" : Print #2 , "app_command " ; "Rasen vorn an"
                 Case "xxx" : Print #2 , "app_command " ; "Rasen vorn aus"
                 Case Else : Print #2 , "error "
             End Select
          End If
    
       End If
    Grüße MAT

Ähnliche Themen

  1. lcd und taster mit select case
    Von silkeidi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 20.04.2008, 01:26
  2. Optimierungsfrage: select Case oder in eine Gosub springen
    Von mat-sche im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 18.02.2008, 14:51
  3. Select Case Struktur
    Von Ruppi im Forum Assembler-Programmierung
    Antworten: 2
    Letzter Beitrag: 26.08.2007, 13:40
  4. Select case , if then,for next schleifen verlassen ????
    Von molleonair im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 06.04.2007, 11:57
  5. Stringvariablen konvertieren
    Von Baby2b im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 08.10.2006, 12:56

Berechtigungen

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

LiFePO4 Speicher Test