TIA Variablenwert online ändern

Zuviel Werbung?
-> Hier kostenlos registrieren
Konsequente Folge: es gibt keine direkte Möglichkeit, das Bitmuster aus einem (z.B. zusammengebastelten oder ge-SWAP-ten ) DWORD einer REAL-Variable zuzuweisen - das geht nur mit UNION/AT oder per Pointer.
Wie geht das in der S7 Welt denn? Tatsächlich mit RealVar := DWordVar?
Im Codesys Universum kann man sich mit MEMCPY behelfen.

Von irgendwas mit Internetzugang gesendet
 
Wie geht das in der S7 Welt denn? Tatsächlich mit RealVar := DWordVar?
Code:
RealVar := DWORD_TO_REAL(DWordVar);
Bei S7-SCL werden BYTE/WORD/DWORD (normgerecht) als Bitstring behandelt und xWORD_TO_*-Konvertierungen kopieren den Bitstring ohne irgendwelche Veränderungen oder Konvertierungen (wie ein Typecast in C).

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Achtung bei TIA-SCL - Siemens macht nun auch so einen Scheixx mit der Gleichsetzung von Bitstrings mit Unsigned-Ganzzahl-Datentypen (z.B. DWORD = UDINT) und führt überdies bei der S7-1500 eine implizite Konvertierung von DWORD nach REAL entsprechend UDINT_TO_REAL ein.

Aus der teilweise verworrenen Hilfe zu TIA V13 :

"Übersicht über die Datentypkonvertierung (S7-300, S7-400)"
Hinweis
Konvertieren von Bitfolgen in SCL


Alle Bitfolgen (BYTE, WORD, DWORD und LWORD) werden in Ausdrücken wie die entsprechenden Ganzzahlen ohne Vorzeichen (USINT, UINT, UDINT und ULINT) behandelt. Daher wird z. B. die implizite Konvertierung von DWORD nach REAL wie eine Konvertierung von UDINT nach REAL durchgeführt.
Ein paar Zeilen weiter aber:
Implizite Konvertierung
...
  • Mit IEC-Prüfung
    ...
    Die implizite Konvertierung von Bitfolgen in anderen Datentypen ist nicht möglich.
    ...
  • Ohne IEC-Prüfung (Voreinstellung)
    ...
    Die implizite Konvertierung von Bitfolgen in Gleitpunktzahlen ist nicht möglich.

"Explizite Konvertierung von DWORD (S7-300, S7-400)"
DWORD zu REAL : MOVE : Das Bitmuster des Quellwerts wird ohne Änderung rechtsbündig in den Zieldatentyp übertragen.


"Übersicht über die Datentypkonvertierung (S7-1500)"
Hinweis
Konvertieren von Bitfolgen in SCL


Alle Bitfolgen (BYTE, WORD, DWORD und LWORD) werden in Ausdrücken wie die entsprechenden Ganzzahlen ohne Vorzeichen (USINT, UINT, UDINT und ULINT) behandelt. Daher wird z. B. die implizite Konvertierung von DWORD nach REAL wie eine Konvertierung von UDINT nach REAL durchgeführt.
"Implizite Konvertierung von DWORD (S7-1500)"
DWORD zu REAL : Der Wert wird in das Format des Zieldatentyps konvertiert. (Der Wert "-1" wird z. B. in den Wert "-1.0" umgewandelt.)

"Explizite Konvertierung von DWORD (S7-1500)"
DWORD[SUP]1)[/SUP] zu REAL : DWORD_TO_REAL : Das Bitmuster des Quellwerts wird ohne Änderung rechtsbündig in den Zieldatentyp übertragen.

[SUP]1)[/SUP] Bitfolgen (BYTE, WORD, DWORD, LWORD als eine vorzeichenlose Ganzzahl mit der gleichen Bitlänge interpretiert. Der Datentyp BYTE wird als USINT, WORD als UINT, DWORD als UDINT und LWORD als ULINT interpretiert.

Harald
 
Und in allen anderen Sprachen der IEC wie IL, LAD, FBD und SFC ist das nicht so, nur in ST? Extra für die faulen und dummen ST-Programmierer?
SFC hab ich mir geschenkt, aber in LAD (KOP), FBD (FUP) läuft es unter TC3 genau wie in ST. IL (AWL) konnte ich in TC3 nicht testen, weil AWL nicht mehr unterstützt wird, habe es stattdessen in TC2 getestet und auch da kommt 2 raus.
 
Auf deren Webseite steht etwas von
"Editoren PAS STL, PAS IL, PAS LD nach EN/IEC 61131-3 vom TÜV Süd als LVL (Limited Variability Languages) eingestuft". Vermutlich hängt das besondere Verhalten damit zusammen.

Wenn man die Standardisierung der IEC-Sprachen mit anderen Sprachen vergleicht, dann ist das wirklich lächerlich was da veranstaltet wird. Das ist das Papier nicht wert auf das es gedruckt wird.
 
Hier ein Screenshot eines Beispiels mit Deklaration.
Anhang anzeigen 39231
Hallo Oliver,

ich finde in der TC3-Doku im Beckhoff InfoSys leider keine Angaben zu impliziter *INT_TO_*REAL-Konvertierung.
Wird bei impliziter Konvertierung Ganzzahl zu REAL/LREAL immer DINT_TO_REAL verwendet (oder DINT_TO_LREAL) und vielleicht deshalb "unsichtbar" alle Operatoren/Ausdrücke vorher auf DINT "hochskaliert"?
Werden in Deinem Beispiel-FUP wegen der impliziten Konvertierung am Ende (Zuweisung an r32_Messwert) vielleicht alle Operatoren vorher automatisch als DINT verwendet? Weise mal vor der Zuweisung an r32_Messwert auf ein i16_Zwischenergebnis zu.

Vergleiche mal bitte die Ergebnisse folgender Formulierungsvarianten (möglichst auch mal in FUP):
Code:
i16_Eingangswert := 9000;

r32_Messwert_1 := i16_Eingangswert * 10 / 32767;

i16_Zwischenergebnis := i16_Eingangswert * 10 / 32767;
r32_Messwert_2 := i16_Zwischenergebnis;

r32_Messwert_3 := INT_TO_REAL( i16_Eingangswert * 10 / 32767 );

r32_Messwert_4 := i16_Eingangswert * 10.0 / 32767;

Gibt es in TC3-FUP explizite Typkonvertierungen, wie etwa INT_TO_REAL? Kann man an den Eingängen und Ausgängen der Operatoren-Boxen explizit Datentypen angeben wie in Siemens-TIA? Macht eine MOVE-Box implizite Typkonvertierungen?

PS:
Wenn r32_Messwert ein REAL ist, wieso gibt das TC3-System dann beim Beobachten den Value "2.0" als "2" ohne Kommastellen an?! :roll:

Harald
 
Zurück
Oben