Step 7 Auswertung einer Bytefolge aus einem Array

alik

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich bin recht neu mit Step 7 unterwegs und kenne mich daher noch nicht so gut aus.
Ich habe eine S7-1200 mit dem Kommunikationsmodul CM1214 (mit RS232-Schnittstelle) und arbeite mit S7 Basic v12.

Ich bekomme ein Telegramm von einem Stromzähler, das wie folgt aussieht: A5 5A 8B 07 00 11 76 0C 00 00 00 01 00 26
Aus den Bytes 4-6 (also 00 11 76) kann die aktuelle Einspeisung entnommen und umgerechnet werden.
Die Rechnung ist dabei folgende:
Man nimmt die Bytes 4-6 und setzt diese aneinander, sodass man 001176 hat.
Diese Hex-Zahl muss anschließend in Dezimal umgerechnet werden, was 4470 Watt bedeutet.

Mein Problem ist, ich weiß nicht, wie ich aus dem Byte-Array die Bytes 4-6 herausziehen und aneinandersetzten kann.
Gibt es auch ein Befehl, wie ich eine Hex-Zahl in dezimal umrechnen kann?

Es wäre echt wirklich schön, wenn mit dabei jemand helfen könnte. Ich habe schon ein paar Tage mit dem Problem gekämpft und komme zu keiner Lösung.
Vllt gibt es ja schon jemand, der so etwas ähnlich hatte und eventuell ein kleines Beispiel hat. Bin für jeden Tipp sehr dankbar...

Vielen Dank schonmal im Voraus!

Liebe Grüße
 
Eine Hex-Zahl muss man bei der Programmierung nicht in dezimal umrechnen, das ist nur eine Darstellungsart.
Du musst lediglich die einzelnen Bytes an der passenden Stelle im Speicher für eine Integer-Zahl unterbringen.

Eine 3-Byte Ganzzahldarstellung gibt es in einer S7 aber nicht. Da müsstest du auf einen 4-Byte Wert wechseln und das nicht verwendete Byte auf Null stehen lassen.
Du benötigst aber noch die Information ob die Zahl auch negativ werden kann, und in welchem Format negative Zahlen dargestellt werden (z.B. Zweierkomplement).

Um einzelne Bytes in einem Doppelwort unterzubringen, bietet das TIA-Portal den so getauften "Slice" Zugriff (auch wenn es in der Hilfe nicht unter diesem Namen steht).
Auf jeden Fall kann man mit den Endungen .b0, .b1, .b2 und .b3 auf die 4 Bytes einer DWord Variable zugreifen.

Falls deine 3 Bytes nun nur positiv werden können, kannst du dir eine Funktion schreiben die 4 Bytes in ein UDint zusammensetzt:
BytesToUDint-1.png

Aufrufen kannst du diese mit Konstanten dann so:
BytesToUDint-2.png
für deinen Fall schreibst an die Parameter Byte1, Byte2 und Byte3 die entsprechenden Array-Variablen, und lässt den Parameter Byte0 auf B#16#0 stehen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
danke. ich habe es in mein Programm versucht einzubauen und werde Mitte der kommenden Woche mal das Programm einspielen. Ich werde mich dann nochmal melden :) vielen dank schon mal für die schnelle Hilfe! LG
 
Zurück
Oben