Jump to content

RS232 String aufschlüsseln


Recommended Posts

Ich habe eine Digitalwaage mit zwei Kommastellen und RS232 Schnittstelle.
Der Zahlenwert der zweiten Kommastelle befindet sich in einer  " [  ] " !
Ich schaffe es nicht, den kompletten String  ( siehe Foto  z.B. 17. 0[3]   ) ins Dasylab Schaltbild einzulesen.

Hättet ihr einen Tipp, was ich probieren könnte ? 

OHARUS_PR2202M.jpg

Link to comment
Share on other sites

Hallo!

Möchten Sie den Text "17.0[3]" so interpretieren, dass die 17.0 und die 3 als Daten auf zwei Ausgängen des RS232-Eingangsmoduls ausgegeben werden?

Format-String Kanal 0: "Project Name:" a\n
Format-String Kanal 1: a\x5B
Format-String Kanal 2: a\x5D
Format-String Kanal 3: $1\r

In Hochkommas eingeschlossene Texte dienen als Suchmuster, d.h. der Puffer, in dem die serielle Schnittstelle die vom Gerät übertragenen Daten sammelt, wird durchsucht, bis der Text "Projekt Name:" gefunden wird. Wird der Text gefunden platziert sich der gedachte "Interpretationsfinger" hinter den Doppelpunkt. Hier folgen noch Leeerzeichen und Steuerzeichen, die eigentlich uninteressant sind, aber noch "weggelesen" werden müssen. Das a\n im Formatstring versucht alle aSCII-Zeichen bis zum angegebenen Terminator (\n = <LF>) als Zahl zu interpretieren. Das schlägt fehl, weil es keine sinnvolle Zahl ergibt, liest aber die entsprechenden Zeichen weg. Den Ausgang 0 des Modules entsprechend nicht mit einer Datenleitung verbinden, sondern das unsinnige Ergebnis einfach ignorieren.

Der Interpretationsfinger steht nun hinter dem <LF> (in der Zeile mit "Project Name"). Der Formatstring in Kanal 1 a\x5B liest nun alle ASCII-Zeichen bis zum Terminatorsymbol \x5B (\x = Hex --> \x5B --> ASCII-Hexcode für die geöffnete eckige Klammer; Google.de --> ASCII-Tabelle :) ). Auf dem Ausgang 1 des Modules sollte die 17.0 (als Zahl) ausgegeben werden.

Weiter geht es hinter der geöffneten eckigen Klammer mit Formatstring des Kanals 2: a\x5D. Dieselbe Prozedur, nur mit einem anderen Terminatorsymbol, der geschlossenen eckigen Klammer (Hexcode 5D). Ausgang 2 des Moduls liefert die "Text 3" als 3.0.

Nun steht der Interpretationsfinger hinter der geschlossenen Klammer. $1\r liest nun die Zeichen in den globalen String 1 ($1=DASYLab-Platzhalter in RS232-Formatstrings für String1, $2 --> String 2 usw.). D.h., dass sämtlicher Text bis zum Terminatorsymbol \r (=<CR>, Carriage Return, Wagenrücklauf) in den String übertragen wird.
Der letzte Ausgang bleibt wieder unverbunden.

Der im Puffer verbliebene Rest (4x <CR><LF>) wird bei der nächsten Anforderung von Daten übersprungen, weil in Kanal 0 des Moduls zunächst wieder auf das Suchmuster gewartet wird.
Würde man ohne ein Suchmuster versuchen, via RS232 gelieferte Daten zu analysieren, müsste man ALLE Zeichen immer durch geeignete Formatstrings beschreiben und somit verarbeiten.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...