REAL wert in zwei worte aufteilen (SCL)

SPS-newbie

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

ich stecke wieder vor einem Problem mit Typumwandlungen.

in einer ET200S wird ein Wert als REAL berechnet, anschließend soll er mittels Profibus auf einen DP/DP Koppler geschrieben werden wo es wieder mit einer TDC ausgelesen wird. Bisher habe ich das immer so gemacht

Code:
PQW30 := DWORD_TO_WORD(SHR(IN:=DINT_TO_WORD(REAL_TO_DINT(wert),N:=16));
PQW32 := DWORD_TO_WORD(DINT_TO_WORD(REAL_TO_DINT(wert)))


jetzt wollte ich diese umständlich Methode abkürzen und einfach mit einem Doppelwortausgabe verkürzen
Code:
PQD := REAL_TO_DWORD(wert);

doch die Ausgabe stimmt leider nicht. hab keine Ahnung woran das liegen könnte; vielleicht hat ja von euch einer eine Lösung!
-- > schon jetzt vielen dank fürs reindenken!
 
Hallo,
dein Ansatz wäre bei dem Befehl AT richtig aufgehoben - du bildest auf deine REAL-Variable eine zusätzlich AT-Sicht, die aus 2 Worten besteht und die weist du dann zu ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was soll denn ausgegeben werden: REAL oder DINT?

Hallo SPS-newbie,

kann es sein, daß das TDC hinter dem DP/DP-Koppler gar kein REAL benötigt, sondern DINT?
Bisher habe ich das immer so gemacht

Code:
PQW30 := DWORD_TO_WORD(SHR(IN:=DINT_TO_WORD(REAL_TO_DINT(wert),N:=16));
PQW32 := DWORD_TO_WORD(DINT_TO_WORD(REAL_TO_DINT(wert)))
Wegen REAL_TO_DINT wird der REAL-Wert explizit in einen DINT-Wert umgewandelt (ganz anderes Format
auf Bit-Ebene!) und dabei auf eine ganze Zahl gerundet (Nachkommastellen verschwinden).
jetzt wollte ich diese umständlich Methode abkürzen und einfach mit einem Doppelwortausgabe verkürzen
Code:
PQD := REAL_TO_DWORD(wert);
REAL_TO_DWORD wandelt den REAL-Wert nicht um, sonden erzeugt nur eine andere Sicht auf die
32-Bit-Variable, damit der Compiler nicht meckert.

Zusammenfassung:
1. Programm gibt einen DINT aus (als zweimal 16 Bit zerlegt)
2. Programm gibt einen REAL aus (als 32 bit)

Wenn tatsächlich DINT als Ausgabe gewünscht ist, dann so:
Code:
PQD := DINT_TO_DWORD(REAL_TO_DINT(wert));
Wenn REAL als Ausgabe gewünscht ist, dann so:
Code:
PQD := REAL_TO_DWORD(wert);

Gruß
Harald
 
Wo ist das Problem ?

In STL kann man einfach schreiben:

Code:
L "wert"
T PQD30

In SCL müssen die Typen übereinstimmen.
Das ist aber auch kein Problem. Einfach PQD30 als ein REAL definieren.
Dann ....

Code:
"pqd30_real" := "wert" ;
 
Zurück
Oben