TIA 2 x 16 Bit Word in 1 x 32 (Low - und High Word) umwandeln

Bero@

Level-1
Beiträge
17
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Zusammen!

Ich verwende TIA V11 mit einer S7-1200. Über den Profinet - Bus erhalte ich von einem Lenze-Fu ein Statuswort mit einer aus zwei 16 Bit Variablen zusammengestetzen Positionsangabe einer Linearachse.

Meine Frage:
Wie kann ich diese beiden 16 Bit - Variablen zu einer 32 Bit Variablen zusammenfügen? Hilft mir CONVERT weiter?



Lenze schreibt hier (für mich zu kryptisch...):

Umrechnung von zwei 16-Bit-Variablen (Low-Word (wLowWord) und High-Word (wHighWord)) in eine 32-Bit-Variable (dnOriginalValue_p):
dnOriginalValue_p:=DWORD_TO_DINT(SHL(WORD_TO_DWORD(wHighWord),16) OR wLowWord)

Anwendungen:
Bei der Übertragung von Positionswerten (32-Bit-Werte) steht auf den Systembausteinen CAN1, CAN2, CAN3 sowie AIF1, AIF2 und AIF3 jeweils nur ein 32-Bit-Wert als Systemvariable zur Verfügung. In Fällen, in denen zwei Positionswerte pro Systembaustein übertragen werden sollen, können über die o.a. Umrechnungsformeln auch die beiden anderen Datenwörter (16-Bit-Werte) zur Übertragung von 32-Bit-Werten genutzt werden, wenn der Wert in Low- und High-Word gesplittet wird und nach der Übertragung wieder in einen 32-Bit-Wert gewandelt wird.




Grüße aus Hamburg
Bero
 
Wie kann ich diese beiden 16 Bit - Variablen zu einer 32 Bit Variablen zusammenfügen?
Lenze hat Dir doch schon die Antwort gegeben - in SCL:
Lenze schreibt hier (für mich zu kryptisch...):

Umrechnung von zwei 16-Bit-Variablen (Low-Word (wLowWord) und High-Word (wHighWord)) in eine 32-Bit-Variable (dnOriginalValue_p):
dnOriginalValue_p:=DWORD_TO_DINT(SHL(WORD_TO_DWORD(wHighWord),16) OR wLowWord)

Schreibe diesen roten SCL-Code in einen FC mit den Inputs wHighWord und wLowWord und dem Output dnOriginalValue_p (DINT)

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bin mir bei dem Siemens-SCL in TIA grad nicht sicher, es könnte sein, daß Du so schreiben mußt:
Code:
dnOriginalValue_p := DWORD_TO_DINT(SHL(WORD_TO_DWORD(wHighWord),16) OR WORD_TO_DWORD(wLowWord)) ;

Harald
 
Hallo Harald!

Vielen Dank für die Antwort. Auf die einfachste Lösung, das der Code von Lenze schon SCL ist bin nicht gekommen.... :confused: Ich habe aber bis jetzt auch alles nur in KOP gemacht.

Es funzt mit beiden Varianten. Die Syntax von SHL() ist im TIA ein wenig anders. Das wars auch schon.
#dnOriginalValue_p := DWORD_TO_DINT(SHL(IN := WORD_TO_DWORD(#wHighWord), N := 16) OR WORD_TO_DWORD(#wLowWord))


Ich habe leider noch eine Differenz vom tatsächlichen Wert (z.B. Verstellweg 55 mm) zum angezeigten/errechneten Wert (Anzeige 60 mm). Am Nullpunkt bzw. Referenzpunkt der Achse zeigen beide Wert 0. Ich schätze mal, es liegt in einer Ungenauigkeit in der Umrechnung zwischen dem Inkrementalgeber auf der Motorwelle und der tatsächlichen Umdrehung an der Getriebewelle. Das finde ich aber bestimmt nächste Woche noch mit Lenze raus.

Danke für die Hilfe und ein schönes Wochenende!
Bero
 
Zurück
Oben