RS232 Software UART String lesen

Support-Forum für Deutschsprachige, die in ihrer Muttersprache schreiben möchten.

Moderator: Benj

Post Reply
JoS0
Flowcode V4 User
Posts: 2
Joined: Fri May 27, 2011 9:22 pm
Contact:

RS232 Software UART String lesen

Post by JoS0 »

Hallo

ich habe einen Energiezähler der über einen Optokoppler folgende serielle Daten sendet:

8Datenbits / 1Startbit /1 Stopbit / 1920 Baud
Zählerstand Leistung Spannung Strom CRC
T123456,7<Space>P1234,5<Space>U123<Space>I12,34<Space>C1<CR>

Dabei stehen T, P, U, I, C und , für die ASCII Werte.
<Space> steht für das Leerzeichen = ASCII 0x20
<CR> steht für den Wagenrücklauf (Carriage Return) = ASCII 0x0D
12… für die Messwerte mit führenden Nullen

Eine Anzeige wäre zum Beispiel:
T000018,6 P0115,0 U230 I00,50 Cx<CR>
Dies bedeutet:
Total 18,6 kWh
Leistung 115 Watt
Spannung 230 Volt
Strom 0,5 Ampere
CRC 120 (Ascii Wert von ‚x’)
Das CRC ist eine Addition aller gesendeten ASCII-Zeichen bis und mit dem <SPACE> nach dem Strom Teil und kann einen Wert zwischen 0-255 haben.
Im CRC enthaltene Daten:
Zählerstand Leistung Spannung Strom
T123456,7<Space>P1234,5<Space>U123<Space>I12,34<Space>

Ich bekomme auch die Daten. Ich kann Sie aber nicht filtern.
Entweder nur Zahlen oder nur Zeichen.

Ich würde die Zeichen T,P,U..... lesen und die Zahl dann im Display anzeigen.

Vielen Dank und Grüße


Im Anhang meine Versuche.
Attachments
5. String Receivetest.fcf
(6.5 KiB) Downloaded 256 times
4. Software UART 16F877Atest.fcf
(6.5 KiB) Downloaded 294 times

User avatar
Benj
Matrix Staff
Posts: 15312
Joined: Mon Oct 16, 2006 10:48 am
Location: Matrix TS Ltd
Has thanked: 4803 times
Been thanked: 4314 times
Contact:

Re: RS232 Software UART String lesen

Post by Benj »

Hallo,

Um so etwas tun, müssen Sie eine State-Machine-Parser zu schreiben. Dies ist im Grunde eine Funktion, die durch die eingehenden Daten ein Byte zu einem Zeitpunkt, wird Schritt und machen Sinn. Zum Beispiel könnten Sie prüfen die eingehenden Byte zu sehen, ob sie gleich 'T' ist, wenn es dann wissen Sie, dass im Anschluss an diese sollten einige numerische Werte sein. Sie können überprüfen, ob der Wert eine Zahl durch eine Entscheidung mit dem Parameter: byte >= '0' && byte <= '9'

Während das Byte eine Zahl halten Multiplikation Ihre temporäre Variable um 10, bevor die nächste Nummer. Dann wiederholen Sie diesen Vorgang für die anderen Buchstaben oder Parameter, die Sie wollen in Ihrem System analysieren.

Versuchen Sie, kleine Stückchen und Test auf der Hardware eher dann zu versuchen, die ganze Sache auf einmal zu schreiben, da dies zu erleichtern und Fehler können behoben, da sie eher dann zu versuchen, die gesamte Anwendung am Ende debug eingeführt werden müssen.


Hello,

To do something like this you will need to write a state machine parser. This is basically a function that will step through the incoming data a byte at a time and make sense of it. For example you could check the incoming byte to see if it is equal to 'T' if it is then you know that following this should be some numeric values. You can check to see if the value is a number by using a decision with the parameter: byte >= '0' && byte <= '9'

While the byte is a number keep multiplying your temporary variable by 10 before adding the next number. Then repeat this process for the other letters or parameters you wish to parse into your system.

Try to do little bits and test on the hardware rather then trying to write the entire thing at once as this will make it easier and bugs can be fixed as they are introduced rather then trying to debug the entire application at the end.

JoS0
Flowcode V4 User
Posts: 2
Joined: Fri May 27, 2011 9:22 pm
Contact:

Re: RS232 Software UART String lesen

Post by JoS0 »

Hallo Ben

und Danke für die schnelle Reaktion.

Das ist mein Problem. Ich weiß nicht wann String oder Charakter.Ich habe dass ganze Wochenende probiert.
Wenn ich Charakter wähle und = 84 (für T) eingebe dann geht nichts.
Der String kommt alle 30 Sekunden. Der Anfang ist Startbit => "T" => 000018,6
Kannst Du mir bitte mit einem kleinen Beispiel zeigen wie ich das T und die Zahl finden kann?
Auch bin ich nicht sicher bei den Einstellungen von dem Soft UART.

Vielen Dank und Grüße
Jo

Post Reply