RS232 empfangene Daten mit Regex parsen

  • VB.NET

Es gibt 41 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    So, ich bin nach einer Weile Abwesenheit jetzt wieder damit beschäftig.

    RodFromGermany schrieb:

    Was sagt die Beschreibung der Gegenstelle?


    Da kommt man leider nicht ran...ich denke, das Problem mit der Darstellung der Umlaute werde ich mit Text.Replace lösen.



    xmise schrieb:

    @Sbfer schreib einfach deine Ergebnisse in den match.Success Klauseln nicht direkt ins Richtext-Fenster sondern in eine String Variable.
    nachdem Du in match4.Success die Varible befüllt hast, Schreibe deren Inhalt ins Richtext-Fenster. Noch die Variable auf leeren String setzen...


    @xmise Danke! Das hat wunderbar geklappt, jetzt ist die Darstellung so, wie sie sein soll!


    Nun habe ich vorerst nur noch ein Problem: Die Datenpakete für den Heartbeat.

    Wie alles andere auch, beginnen diese mit 01 und dann 79, endet mit 04.

    Diese lassen sich aber überhaupt nicht auslesen, auch nicht in die Textbox schreiben. Regex wie gehabt:

    VB.NET-Quellcode

    1. Dim heabrtbeat As Regex = New Regex("(?<=\x79).*(?=\x04)")


    Egal ob ich das in die Rich Textbox schreiben will (testweise) oder anderweitig verarbeiten will, es passiert nichts.

    Wenn ich alles mit Regex etc. weg lasse und ReadExisting direkt in die Textbox schreibe, werden die Heartbeat Daten als "???" angezeigt.

    Meine Vermutung ist, dass hier das Problem liegt, weil ich ja "komplettedaten" als string einlese. In Ascii sind die Heartbeat Daten ungefähr so: "$§"=?&%" - also scheinbar etwas, was die Tebxtbox nicht lesen kann bzw was der String aussortiert.

    Oder nochmal in Kurzfassung:
    Hearbeat Datenpakete besteht in Ascii aus Sonderzeichen, lässt sich mit der Regex Methode nicht einlesen.

    Ich denke also dass ich diese direkt als Bytes benötige, so sollen sie auch weiterverarbeitet werden.
    Dabei das Problem: Wenn ich "komplettedaten" als byte statt String einlese (ReadExisting) kommt der Fehler: Ungültige Konvertierung von der Zeichenfolge "-> Akkubetr" (Beispiel) im Type Byte.

    Wie kann ich also gleichzeitig meine Methode (die ja jetzt funktioniert) nutzen, um die 4 Datenpakete beider Zeilen in die Textbox zu schreiben (klappt ja jetzt), und gleichzeitig das Datenpaket "Heartbeat" als Hex einlesen, weil der String diesen wegen der Sonderzeichen scheinbar rausfiltert?
    Alles zu Hex konvertieren? Und dann da den Heartbeat abgreifen und den Rest zurück in einen string damit die Anzeige in der Textbox weiterhin funktioniert? Puh...

    ich warte mal auf eure Ideen

    Schönen Rest-Feiertag

    Sbfer schrieb:

    ich denke, das Problem mit der Darstellung der Umlaute werde ich mit Text.Replace lösen.
    Mit dem richtigen Encoding sollte das nicht nötig sein.
    Ich nehme mal an, dass Du nicht der erste bist, der dieses Problem hat?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!