S7-Real in TwinCAT verarbeiten

SPSler2009

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

ich habe folgenes Problem:

Von einem externen Gerät erhalte ich einen Messwert als real im S7-Datenformat. Zum Beispiel wird die Zahl 721,0 als 44344000h übertragen. Wenn ich diese Zahl nun im TwinCAT auf eine real Variable schreibe kommt eine völlig "blödsinnige" Zahl heraus. Auch das Drehen der Eingangsvariable (Motorolaformat -> Intelformat) 00403444h bringt nicht den gewünschten Erfolgt.

Wer kann mir hier weiterhelfen?

Vielen Dank!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
deine zahl kommt im hexadezimalformat

geeignete bausteine für umwandlungen findest du in der oscat.lib unter www.oscat.de
Was ist denn das Hexadezimalformat?

Irgendwie findet man in keiner Dokumentation wie das Real-Format bei TwinCat aufgebaut ist.

Ich wollte mir gerade mal testweise die Bytes ansehen, allerdings fehlt in der IEC-Sprache ja das AT-Konstrukt.
In SCL würde ich es mir so schreiben um die Bytes anzusehen:
Code:
rReal : REAL;
bArr AT rReal : ARRAY[0..3] OF BYTE;
Wie würde man sowas denn bei TwinCat/Codesys machen?

Ich habs mal mit Zeigern versucht, aber da meckert der Compiler dass die Typen nicht passen, und sowas wie einen Cast scheint es nicht zu geben.
 
Wie würde man sowas denn bei TwinCat/Codesys machen?

Ich habs mal mit Zeigern versucht, aber da meckert der Compiler dass die Typen nicht passen, und sowas wie einen Cast scheint es nicht zu geben.

OK, geht doch:
Code:
VAR
    rReal : REAL;
    ptr : POINTER TO BYTE;
    bArr : ARRAY [0..3] OF BYTE;
END_VAR

rReal := 721.0;

ptr := ADR(rReal);
bArr[0] := ptr^;
ptr := ptr + 1;
bArr[1] := ptr^;
ptr := ptr + 1;
bArr[2] := ptr^;
ptr := ptr + 1;
bArr[3] := ptr^;
 
Zurück
Oben