TIA SWAP Befehl

franzlurch

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

ich habe folgendes Problem mit einer S7-1200 und hoffe ihr könnt mir weiterhelfen.

Aufbau:
S7-1200 mit einem Profinet Slave im Little Endian Format. Ich hatte den Slave schon ettliche male in Verbindung mit einer S7-300 im Einsatz und dann einfach mit TAW u. TAD die Wörter gedreht.
Mit der 1200er CPU habe ich nun das Problem, dass Variablen im REAL Format nicht korrekt übergeben werden.

Zum drehen verwende ich jetzt den Befehl SWAP:

"fb_in".fb_in_programmnummer := SWAP_WORD("IW100");

Für die Variable Programmnummer (int) ist das kein Problem.
Als SWAP Befehl gibt es den Befehl SWAP_WORD u. SWAP_DWORD. Kann mir jemand sagen, ob man damit nur Ganzzahlen und keine Gleikommazahlen drehen kann!?!

Grüße

Christian
 
Als SWAP Befehl gibt es den Befehl SWAP_WORD u. SWAP_DWORD. Kann mir jemand sagen, ob man damit nur Ganzzahlen und keine Gleikommazahlen drehen kann!?!
Weder noch.
Damit kann man nur die Bytefolge von WORD bzw. DWORD tauschen.
;)

Es gibt aber einige implizite Formatwandlungen, z.B. von INT zu WORD, um die sich der Programmierer nicht kümmern muss.
Und es gibt explizite Wandlungen, die eben angegeben werden müssen, wie z.B. REAL_TO_DWORD bzw. wieder zurück DWORD_TO_REAL.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Oder anders ausgedrückt: man kann damit die Bytes von jedem 16-Bit- oder 32-Bit-Datentyp tauschen, die Anweisungen SWAP_WORD und SWAP_DWORD akzeptieren aber nur die Angabe von WORD oder DWord und deshalb muß man selber explizit die Interpretationsvorschrift (Typecast) <datentyp>_TO_WORD oder <datentyp>_TO_DWORD hinzufügen, also:
Code:
"mySwapedReal" := DWORD_TO_REAL(SWAP_DWORD(REAL_TO_DWORD("myRawReal")));

Harald
 
Zurück
Oben