Liebes Forum,
über RS232 lese ich einen String ein
+IPD,0,7 besagt, dass 7 Zeichen vom Sender 0 gesendet werden: garten + 1x Line Feed.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>
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:
Über dem String liegt ein Byte Array, Rxbyte(10) ; Rxbyte(11):Code:Dim Rxstring As String * 51 Dim Rxbyte(50) As Byte At Rxstring Overlay Dim App_command As String * 15
+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.
1. Frage: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
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
Ich hole 12 Zeichen ab, es werden dann für die case-Struktur dieser String genommen: gaaaa-ravo 10 Zeichen und 2x space....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
Woher kommen die 2x space her???
Grüße MAT







Zitieren

Lesezeichen