Typ | Funktion |
Beschreibung | Die überladene Funktion TO_UINT konvertiert den am Eingang anliegenden Wert in einen Ausgangswert vom Datentyp UINT (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, LINT, USINT, UDINT, ULINT
- Gleitkommazahlen: REAL, LREAL
- 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.
- Eingangsgröße <= Ausgangsgröße: Nicht verwendete Bits im Ausgangsdatentyp werden auf 0 gesetzt.
- Eingangsgröße > Ausgangsgröße: Ist der Eingangsdatentyp größer als der UINT-Ausgang (> 16 Bit), werden nur die Bits 0 bis 15 des Eingangswertes in den Ausgangswert kopiert.
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 LINT-Wert wird bei einer ANY_UNSIGNED-Konvertierung in einen ULINT-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 einem Eingangswert vom Typ ANY_UNSIGNED (Ganzzahl ohne Vorzeichen), werden die "nicht verwendeten" Bits im Zieldatentyp auf 0 gesetzt. Bei einem Eingangswert vom Typ ANY_SIGNED (Ganzzahl mit Vorzeichen) wird das höchstwertige Bit (MSB) nicht weiter als Vorzeichenbit interpretiert.Eingangsgröße > Ausgangsgröße: Wenn der Wert der Quellvariable nicht in den Zieldatentyp passt, werden nur die Bits des Eingangswerts in den Zieldatentyp kopiert, die in den Zieldatentyp passen. Beispiel: bei einer TO_UDINT-Konvertierung werden nur die Bits 0 bis 31 des Eingangswerts in die Zielvariable kopiert und bei einer TO_USINT-Konvertierung nur die Bits 0 bis 7.
Beispiel: out := TO_UINT(INT#-5);
- Der INT-Wert INT# -5 wird in den LINT-Wert LINT# -5 konvertiert.
- Der LINT-Wert LINT#-5 wird in den ULINT-Wert ULINT#18446744073709551611 konvertiert.
- Der ULINT-Wert ULINT#18446744073709551611 wird in den UINT-Wert UINT#65531 konvertiert.
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. |
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_UINT trifft dies auf Eingangswerte vom Datentyp 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.
Fehlerfall | Ausgabewert RFC/NFC/AXC F 3152 | Ausgabewert AXC F 2152 |
Überlaufwert | Überlaufwert | Überlaufwert |
REAL/LREAL-Wert >= LINT_MAX | 0 | 0
|
REAL/LREAL-Wert <= LINT_MIN | 0 | 0 |
REAL/LREAL-Wert > ULINT_MAX | 0 | LIMIT (Maximalwert) |
REAL/LREAL-Wert < -ULINT_MAX | 0 | 1 |
REAL/LREAL: NaN | 0 | 0 |
REAL/LREAL: Inf+ | 0 | LIMIT (Maximalwert) |
REAL/LREAL: Inf- | 0 | 1 |
Nicht-literaler String (Ganzzahl, Binärliteral, Oktett, Hex, Dez) | 0 | 0 |
String-Überlauf (Ganzzahl, Binäroktett, Hex, Dez) | Überlaufwert | Überlaufwert |
|
Beispiele | Beispiele in ST
out := TO_UINT(16#7F); (* liefert 127 *)
out := TO_UINT(16#FFFF); (* liefert 65.535 *)
out := TO_UINT(16#FFFF0000); (* liefert 0 *)
out := TO_UINT(DINT#65535); (* liefert 65.535 *)
out := TO_UINT(DINT#65536); (* liefert 0 *)
out := TO_UINT(SINT#-128); (* liefert 128 *)
out := TO_UINT(DINT#-65537); (* liefert 65.535 *)
out := TO_UINT(UDINT#65537); (* liefert 1 *)
out := TO_UINT(REAL#6.5535E+004); (* liefert 65.535 *)
out := TO_UINT(REAL#6.5536E+004); (* liefert 0 *)
out := TO_UINT('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 ENO auf FALSE gesetzt.
|