TIA Unterschiedliche DWORD_TO_REAL Wandlung

wbach

Level-1
Beiträge
84
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,
ich habe eine kleine Verständnis Frage.
In S7 Classic habe ich früher bei meinen Funktionen mit:

Code:
AuPosR := DWORD_TO_REAL(WORD_TO_BLOCK_DB(INT_TO_WORD(InterfaceParam1)).DD[InterfaceParam2]);

geschrieben. Wenn ich das aber mit TIA mache, verwende ich dann folgendes:

Code:
#AuPosR := DINT_TO_REAL(DWORD_TO_DINT(PEEK_DWORD(area := 16#84, dbNumber := #InterfaceParam1, byteOffset := #InterfaceParam2)));

Dabei kommen aber falsche Werte raus, da die Wandlung von DINT_TO_REAL anscheinend was falsche ausgibt. Richtig wäre es mit:

Code:
#AuPosR := DWORD_TO_REAL(PEEK_DWORD(area := 16#84, dbNumber := #InterfaceParam1, byteOffset := #InterfaceParam2));

Im Screenshot Screenshot_Convert.jpg seht Ihr wie ich eine 16#14 als Input gebe und bei beiden Tests was anderes raus kommt. Kann mir jemand das erklären?

LG wbach
 
- DWORD_TO_REAL(x) ist anzuwenden, wenn in dem DWORD tatsächlich ein REAL-Wert liegt
- DINT_TO_REAL(DWORD_TO_DINT(x)) ist anzuwenden, wenn in dem DWORD ein Ganzzahl-DINT-Wert liegt, der in Gleitpunkt-REAL konvertiert werden soll

DWORD_TO_* konvertiert nichts, sondern sagt dem Compiler lediglich, daß das Bitmuster in dem DWORD als Datentyp * zu interpretieren ist (Typecast)

Harald
 
Zurück
Oben