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
Lesezeichen