Typ | Funktion |
Beschreibung | Die überladene Funktion TO_LINT konvertiert den am Eingang anliegenden Wert in einen Ausgangswert vom Datentyp LINT (siehe Beschreibung des Eingangs für die unterstützten Datentypen). |
Parameter | Eingang
IN
Datentyp: | Die Funktion unterstützt folgende Datentypen:
- BOOL, BYTE, WORD, DWORD, LWORD
- Integer: SINT, INT, DINT, USINT, UINT, UDINT, ULINT
- Gleitkommazahlen: REAL, LREAL
- LTIME
- STRING, WSTRING
|
Ausgang
OUT
|
Konvertierungsregeln | ANY_BIT-Konvertierung
Die Konvertierung erfolgt durch bitweises Kopieren des Eingangswerts in den Ausgangswert, d.h. es erfolgt eine binäre Übertragung vom Eingangsdatentyp in den Ausgangsdatentyp.
Ist der Eingangsdatentyp kleiner oder gleich groß wie der Ausgangsdatentyp INT, wird der Eingangswert in die rechtsstehenden Bytes des Ausgangsdatentyps geschrieben. Die linksstehenden Bytes werden auf 0 gesetzt.
ANY_INT-Konvertierung
Für die Datentypkonvertierung gilt folgendes:
- Der Quelldatentyp wird auf den größten Datentyp derselben Kategorie von Datentypen erweitert. Beispiel: ein USINT-Wert wird in einen ULINT-Wert konvertiert oder ein SINT-Wert in einen LINT-Wert). Der Quellwert bleibt dabei erhalten.
- Das Ergebnis wird auf den größten Datentyp der Kategorie von generischen Datentypen konvertiert, zu der der Zieldatentyp gehört. Beispiel: ein ULINT-Wert wird bei einer ANY_SIGNED-Konvertierung in einen LINT-Wert konvertiert.
- Das Ergebnis wird zum Zieldatentyp konvertiert.Eingangsgröße <= Ausgangsgröße: Ist der Eingangsdatentyp kleiner oder gleich groß wie der Zieldatentyp ist, werden alle Bits in den Ausgangswert kopiert. Bei ANY_SIGNED-Zieldatentypen wird das höchstwertige Bit als Vorzeichenbit interpretiert. Bei einem Eingangswert vom Typ ANY_UNSIGNED (Ganzzahl ohne Vorzeichen), werden die "nicht verwendeten" Bits im Zieldatentyp auf 0 gesetzt.Eingangsgröße > Ausgangsgröße: Wenn der Datentyp der Quellvariablen nicht in den Zieldatentyp passt, werden nur die Bits des Eingangswerts in den Zieldatentyp kopiert, die in den Zieldatentyp passen. Beispiel: bei einer TO_DINT-Konvertierung werden die Bits 0 bis 31 des Eingangswerts in die Zielvariable kopiert und bei einer TO_INT-Konvertierung die Bits 0 bis 15. Bei ANY_SIGNED-Zieldatentypen wird das höchstwertige Bit als Vorzeichenbit interpretiert.
Beispiel: out := TO_LINT(USINT#255);
- Der USINT-Wert USINT#255 wird in den ULINT-Wert ULINT#255 konvertiert.
- Der ULINT-Wert ULINT#255 wird in den LINT-Wert LINT#255 konvertiert.
- Der letzte Schritt ist nicht notwendig, da der Ausgangswert bereits vom Datentyp LINT ist.
ANY_REAL-Konvertierung
Die Typkonvertierung erfolgt in zwei Schritten. Zuerst wird die Gleitkommazahl auf die nächst größere ganze Zahl gemäß den Standard-Rundungsregeln gerundet (Bsp.: 2,5 wird auf 3 aufgerundet und -2,5 auf -3). Im zweiten Schritt wird der gerundete Eingangswert in die niederwertigsten Bits des Ausgangswerts geschrieben.
Hinweis
Aufgrund des Signifikanzverlustes von REAL-Werten sollten nur REAL-Werte kleiner als LINT_MAX angelegt werden. |
TIME-Konvertierung
Der Datentyp LTIME wird als vorzeichenbehafteter Wert interpretiert (siehe ANY_INT-Konvertierung).
ANY_STRING-Konvertierung
- Der String-Wert muss ein gültiges numerisches Literal des Ausgangsdatentyps sein. Andernfalls liefert die Funktion den Wert 0 zurück und der Laufzeitfehler 'Formatstringfehler' wird ausgegeben (siehe Hinweis unten).
- Zusätzliche Zeichen, Leerzeichen ausgenommen, vor und nach dem numerischen Literal sind nicht erlaubt. Die Funktion liefert den Wert 0 zurück und gibt den Laufzeitfehler 'Formatstringfehler' aus, wenn der String-Wert nicht erlaubte Zeichen enthält.
- Alle führenden und nachfolgenden Leerzeichen im Eingangsstring werden ignoriert.Als Leerzeichen betrachtete ASCII-Codes:
Zeichen | Wert |
Horizontal-Tabulator | 9 (09h) |
Zeilenvorschub | 10 (0Ah) |
Vertikal-Tabulator | 11 (0Bh) |
Seitenvorschub | 12 (0Ch) |
Zeilenumbruch | 13 (0Dh) |
Leerzeichen | 32 (20h) |
- Wenn der Eingangswert den Wertebereich des Ausgangsdatentyps überschreitet, liefert die Funktion den Überlaufwert und der Laufzeitfehler 'Formatstringfehler' wird ausgegeben (siehe Hinweis unten).
- Binäre, oktale, hexadezimale und dezimale Ganzzahlen sind erlaubt. Beispiel:INT#2#0101 (binäre Darstellung des Werts 5)INT#8#606 (oktale Darstellung des Werts 390)INT#10#100 (dezimale Darstellung des Werts 100)INT#16#00FA (hexadezimale Darstellung des Werts 250)
Hinweis
Steuerungstopp bei String-Fehler: Sie können einstellen, ob die Steuerung bei einem String-Fehler automatisch gestoppt werden soll. Dies gibt Ihnen im Fehlerfall die Möglichkeit, den Fehler in Ihrem Projekt zu lokalisieren. Um bei einem String-Fehler die Steuerung automatisch zu stoppen, aktivieren Sie das Symbol in der Symbolleiste des Cockpits. |
Hinweis: Wenn sowohl der Wertebereich als auch die Genauigkeit des Eingangsdatentyps auf den Wertebereich und die Genauigkeit des Ausgangsdatentyps übertragen (gemappt) werden können, so kann ohne Verwendung dieser Funktion eine implizite Typkonvertierung durchgeführt werden. Bei der Funktion TO_LINT trifft dies auf Eingangswerte vom Datentyp DINT, INT, SINT, UDINT, UINT und USINT zu. |
Fehlerverhalten | Fehlerverhalten
Die folgende Tabelle zeigt die Fehler, die bei der Ausführung der Funktion auftreten können, und den von der Funktion im entsprechenden Fehlerfall zurückgegebenen Wert. Der Wert, den die Funktion im Fehlerfall zurückgibt, hängt vom Eingangswert ab (wenn z.B. der Eingangswert vom Datentyp REAL keine gültige Zahl (NaN) ist, gibt die Funktion den Wert 0 zurück).
Fehlerfall | Ausgabewert RFC/NFC/AXC F 3152 | Ausgabewert AXC F 2152 |
Überlaufwert(Siehe den Hinweis für große Real-Werte im Anschluss an die Tabelle.) | Überlaufwert | Überlaufwert |
REAL/LREAL-Wert > LINT_MAX (Überlauf) | LINT_MIN | Überlaufwert |
REAL/LREAL-Wert < LINT_MIN (Überlauf) | LINT_MIN | Überlaufwert |
REAL/LREAL-Wert > ULINT_MAX | LINT_MIN | -1 |
REAL/LREAL-Wert > -ULINT_MAX | LINT_MIN | 1 |
REAL/LREAL: NaN | LINT_MIN | 0 |
REAL/LREAL: Inf+ | LINT_MIN | -1 |
REAL/LREAL: Inf- | LINT_MIN | 1 |
Nicht-literaler String (Ganzzahl, Binärliteral, Oktett, Hex, Dez) | 0 | 0 |
String-Überlauf (Ganzzahl, Binärliteral, Oktett, Hex, Dez)Hinweis: Binäre Konvertierungen führen nicht zu einem Überlauf.) | Überlaufwert | Überlaufwert |
Tritt einer der aufgeführten String-Fehler auf, wird ein String-Fehler im Online-Protokoll des MELDUNGEN-Fensters ausgegeben.
Hinweis zu großen Real-Werten Oft ergibt der Überlauf den Wert 0 oder das Ergebnis hat Lücken. Der Grund dafür liegt in den Eigenschaften von Real-Zahlen, die nur eine bestimmte Anzahl signifikanter Ziffern haben. Bei REAL sind es nur 7 signifikante Werte. Je größer die Zahl ist, desto größer ist die Wahrscheinlichkeit, dass das Ergebnis 0 ist (insbesondere bei kleinen Ausgangstypen).
Beispiele
3.6000000E+7 => 3.600000E+7 => SINT: 0
3.6000001E+7 => 3.600000E+7 => SINT: 0
3.6000002E+7 => 3.600000E+7 => SINT: 0
3.6000003E+7 => 3.600004E+7 => SINT: 4
3.6000004E+7 => 3.600004E+7 => SINT: 4
...
Die Werte 3.600001E+7, 3.600002E+7 und 3.600003E+7 können nicht als REAL-Werte dargestellt werden und werden deshalb auf den nächstmöglichen REAL-Wert gesetzt. Das führt zu Lücken. Je größer die Zahl ist, desto größer wird die Lücke, solange bis immer 0 als Ergebnis angezeigt wird.
|
Beispiele | Beispiele in ST
out := TO_LINT(16#7F); (* liefert 127 *)
out := TO_LINT(16#FFFF); (* liefert -1 *)
out := TO_LINT(16#AFFFFFF0); (* liefert -1.342.177.296 *)
out := TO_LINT(16#FFFF0000); (* liefert -65.536 *)
out := TO_LINT(DINT#-2147483648); (* liefert -2147483648 *)
out := TO_LINT(ULINT#18446744073709551615); (* liefert -1 *)
out := TO_LINT('123'); (* liefert 123 *)
|
Zusätzliche Informationen | EN/ENO-Verhalten
Die POE wird nur dann ausgeführt, wenn TRUE am Eingang EN anliegt. Wenn EN = FALSE ist, wird die POE nicht ausgeführt und ENO auf FALSE gesetzt (FU/FB inaktiv).
Wenn bei der Ausführung der Funktion einer der unter "Fehlerverhalten" aufgeführten Fehler auftritt, wird die POE nicht ausgeführt, der letzte Wert am Ausgang gehalten und ENO auf FALSE gesetzt.
|