Implizite Datentypkonvertierung
Gemäß IEC 61131-3 unterstützen bestimmte Funktionen und Funktionsbausteine die implizite Typkonvertierung der Datentypen, die an den Ein-/Ausgängen angeschlossen sind. Implizite Typkonvertierung bedeutet, dass der Datentyp automatisch in den geforderten Datentyp umgewandelt wird. Eine Funktion zur expliziten Typkonvertierung im Code wird dadurch nicht benötigt.
Funktionen/Funktionsbausteine, die eine implizite Typkonvertierung unterstützen, können durch das automatische Umwandeln der Datentypen unterschiedliche Datentypen an den Formalparametern verarbeiten. Dies macht die Bausteine flexibler.
In der IEC 61131-3 ist festgelegt, welche Datentypen implizit konvertiert werden dürfen und für welche Konvertierungen eine Funktion zur expliziten Typkonvertierung verwendet werden muss.
Für die implizite Typkonvertierung gilt folgendes:
- Die implizite Typkonvertierung ist nur möglich, wenn der Wertebereich und die Genauigkeit des Eingangsdatentyps nicht beeinflusst werden, d.h. auf den Wertebereich und die Genauigkeit des Ausgangsdatentyps übertragen werden können.
- ANY_NUM-Datentypen können implizit in andere ANY_NUM-Datentypen konvertiert werden.
ANY_DURATION-Datentypen können implizit nur in andere ANY_DURATION-Datentypen konvertiert werden.
ANY_BIT-Datentypen können implizit nur in andere ANY_BIT-Datentypen konvertiert werden.
Für ANY_DATE und STRING sowie für alle anwenderdefinierten Datentypen ist keine implizite Typkonvertierung möglich. - Die implizite Typkonvertierung ist nur möglich, wenn der Quelldatentyp kleiner als der Zieldatentyp ist:
8-Bit-Datentypen können in 16-, 32- und 64-Bit-Datentypen konvertiert werden
16-Bit-Datentypen können in 32- und 64-Bit-Datentypen konvertiert werden
32-Bit-Datentypen können in 64-Bit-Datentypen konvertiert werden - Bei ANY_REAL-Datentypen muss die entsprechende Genauigkeit verwendet werden:
REAL-Mantisse = 23 Bits
LREAL-Mantisse = 52 Bits - Bei Unsigned Integer-Datentypen (ganzzahlig, ohne Vorzeichen) wird nur die Größe ausgewertet; das Vorzeichenbit wird als "normales" höchstwertigstes Bit behandelt. Aus diesem Grund können die Datentypen implizit in jeden größeren ANY_NUM-Datentyp umgewandelt werden.
Die folgende Tabelle zeigt die möglichen impliziten Datentypkonvertierungen (grün markiert). Alle anderen Konvertierungen sind entweder nicht möglich oder können mit Hilfe einer expliziten Typkonvertierungsfunktion (sofern verfügbar) durchgeführt werden.