Hallo,
ich lese mit meiner Anwendung permanent Daten und kenne die Zusammensetzung der Informationen welche wie folgt aussieht.
Die <SP> sind Leerzeichen und enthalten ggf. auch Daten.
Empfangen wird lesbar folgendes
oder
Da ich nur per SerialPort1.ReadExisting Daten empfange und diese in ungleichmäßigen Blöcken bis etwa 15 Zeichen liest, prüfe ich den Datenstream bei jedem Empfangsblock auf das Zeichen 'D' im String und schneide davor alles ab.
So kann ich mit
Gibt es eine Möglichkeit den Stream sozusagen fliegend zu erfassen und die Informationen an den festen Positionen zu verarbeiten?
Am Ende wird zudem die Checksumme <CRC> (xxh) übertragen. Da die Daten aber etwa alle 100 ms neu übertragen werden, ist die Prüfung Checksumme aber nicht so wichtig.
TIA
ich lese mit meiner Anwendung permanent Daten und kenne die Zusammensetzung der Informationen welche wie folgt aussieht.
<STX>D19:54<SP><SP>1<SP><SP>022011210<SP><SP><SP><SP><ETX><CRC>
Die <SP> sind Leerzeichen und enthalten ggf. auch Daten.
Empfangen wird lesbar folgendes
uD 4:46
oder
ÑD 4:46 1 2 00
Da ich nur per SerialPort1.ReadExisting Daten empfange und diese in ungleichmäßigen Blöcken bis etwa 15 Zeichen liest, prüfe ich den Datenstream bei jedem Empfangsblock auf das Zeichen 'D' im String und schneide davor alles ab.
VB.NET-Quellcode
- If received.Contains("D") Then
- Dim SearchWithinThis As String = received
- Dim SearchForThis As String = "D"
- Dim FirstCharacter As Integer = SearchWithinThis.IndexOf(SearchForThis)
- If FirstCharacter > 0 Then
- received = received.Remove(0, FirstCharacter) ' erste stellen bis zum D abschneiden
- ReceivedOld = received
- DatenTyp = "D"
- End If
- Else
- If DatenTyp = "D" AndAlso ReceivedOld <> "" Then
- received = ReceivedOld & received
- ReceivedOld = ""
- DatenTyp = ""
- Else
- DatenTyp = ""
- received = ""
- End If
- End If
So kann ich mit
Trim(Mid(received, 2, 2))
u.a. die Stunden und mit Trim(Mid(received, 5, 2))
die Sekunden an ihrer festen Position als String erfassen. Grunsätzlich funktioniert es so erstmal Das ganze ist aber alles andere als optimal und Informationen im hinteren Teil können nur durch weitere umständliche Verarbeitungsmethoden erfasst werden.Gibt es eine Möglichkeit den Stream sozusagen fliegend zu erfassen und die Informationen an den festen Positionen zu verarbeiten?
Am Ende wird zudem die Checksumme <CRC> (xxh) übertragen. Da die Daten aber etwa alle 100 ms neu übertragen werden, ist die Prüfung Checksumme aber nicht so wichtig.
TIA