TO_WORD-Baustein
Kurz-Information
Name |
TO_WORD |
→POE-Typ |
|
Kategorie |
|
Konform zur →IEC-Norm |
mehr als in IEC-Norm vorgesehen möglich
und
|
Grafische Schnittstelle |
|
Verfügbar ab |
|
Funktionalität
Der Baustein dient zur expliziten Konvertierung des an IN anliegenden Werts in einen Wert vom Datentyp WORD.
Falls der anliegende Wert im gemeinsamen Wertbereich des Eingangsdatentyps und des Ergebniswerts WORD liegt, so liefert der Baustein diesen Wert.
Beachten Sie:
Falls ein negativer Wert vom Datentyp REAL oder LREAL am Eingang anliegt, liefert der Baustein den Wert 0. Falls ein negativer Wert von einem anderen Datentyp anliegt, liefert der Baustein einen Wert entsprechend des Datentyps für den Ergebniswert.
Bei der Umwandlung von Datentypen auf den TIME-Datentyp und umgekehrt wird immer auf Sekunden-Basis konvertiert.
Falls ein Wert vom Datentyp STRING am Eingang anliegt, wird der Wert in einen Dezimalwert (Basis: 10, erlaubte Ziffern: 0 bis 9) konvertiert und dann wird dieser Dezimalwert in einen Wert des Ziel-Datentyps konvertiert. Diese Spezialfälle sind dabei möglich (siehe unter " Beispiel für Verwendung im ST-Editor" ) :
Falls der Wert mit dem Zeichen + , mit Leerzeichen oder Tabulatoren (= sogenannten "Whitespace") beginnt und falls der Wert innerhalb des Wertbereichs des Ziel-Datentyps liegt, wird der Wert in einen positiven Dezimalwert (wie ohne diese Zeichen) konvertiert. Der Ausgang ENO wird hier auf den Wert TRUE gesetzt.
Details zu dieser Konvertierung: Ein dem Wert vorangestelltes Zeichen + wird ignoriert , ebenso werden Leerzeichen und Tabulatoren ignoriert.Falls der Wert mit dem Zeichen – beginnt und der Wert innerhalb des Wertbereichs des Ziel-Datentyps liegt, wird der Wert analog zu einem anliegenden, negativen INT-Wert konvertiert. Auch hier wird d er Ausgang ENO auf den Wert TRUE gesetzt.
Details zu dieser Konvertierung: Die Obergrenze des Ziel-Datentyps wird in den positiven Dezimalwert konvertiert, dieser Dezimalwert wird um den Wert 1 erhöht und dann wird der STRING-Wert (eigentlich der entsprechende Dezimalwert) subtrahiert. Das Ergebnis wird in einen Wert des Ziel-Datentyp konvertiert.Falls der Wert ein nicht erlaubtes Zeichen enthält, liefert der Baustein den Wert 0. Hier wird der Ausgang ENO auf den Wert FALSE gesetzt.
Erlaubte Zeichen
Nicht erlaubte Zeichen
Ziffern (Basis: 10, Zahlen: 0 bis 9)
Beispiel für Wert mit erlaubtem Zeichen: '12'andere Zeichen, wie z.B. Buchstaben
Beispiele für Wert mit nicht erlaubtem Zeichen: '12a3', 'a123'ein dem Wert vorangestelltes Zeichen + oder –
Beispiel für Wert mit erlaubtem Zeichen: +2 oder –3Wiederholungen von + oder – am Anfang des Werts, das Zeichen + oder – innerhalb des Werts
Beispiele für Wert mit nicht erlaubtem Zeichen: '++1', '1–3'einzelne Unterstrich-Zeichen _ innerhalb des Werts
Beispiel für Wert mit erlaubtem Zeichen: 1_2 oder 1_2_3Unterstrich-Zeichen _ am Anfang oder Ende des Werts, mehrere Unterstrich-Zeichen _ direkt hintereinander
Beispiel für Wert mit nicht erlaubtem Zeichen: _12, 12_ oder 1__2Falls der zu konvertierende STRING-Wert die Obergrenze des Ziel-Datentyps übersteigt, liefert der Baustein die Obergrenze des Ziel-Datentyps. Auch h ier wird der Ausgang ENO auf den Wert FALSE gesetzt.
Falls ein Wert vom Datentyp CHAR am Eingang anliegt, erfolgt die Konvertierung analog zu einem STRING-Wert. Als Unterschied zur STRING-Konvertierung sind bei der CHAR-Konvertierung nur die einzelnen Ziffern 0 bis 9 erlaubt. Für alle anderen Zeichen (Buchstaben, die Zeichen +, - und _) liefert der Baustein den Wert 0 und der Ausgang ENO wird auf den Wert FALSE gesetzt.
Explizite Konvertierung laut IEC-Norm
Die IEC-Norm sieht eine explizite Konvertierung der folgenden Datentypen auf WORD vor:
LINT, DINT, INT, SINT, ULINT, UDINT, UINT, USINT, LWORD, DWORD, BYTE, BOOL
Die IEC-Norm (Edition 3.0) sieht eine binäre Übertragung der nachfolgenden Eingangsdatentypen vor. Abweichend davon wird der entsprechende Wert aber laut IEC-Norm (Edition 2.0) konvertiert.
SINT
Eingänge, Ergebniswert
|
Bezeichner |
Beschreibung |
|
Eingänge: |
IN |
REAL, LREAL, USINT, UINT, UDINT, ULINT, SINT, INT, DINT, LINT, TIME, BOOL, BYTE, WORD, DWORD, LWORD, STRING, CHAR oder TIME_OF_DAY |
zu konvertierender Wert |
Ergebniswert: |
– |
WORD |
|
Der Eingang EN und der Ausgang ENO sind für den →Aufruf
des Bausteins verfügbar. Siehe "Ausführungssteuerung: EN, ENO" für Informationen zum Eingang EN und zum Ausgang ENO.
Interne Fehlerdiagnose für Baustein
Der Baustein prüft den Wert, der am Eingang anliegt. In den folgenden Fällen wird der Ausgang ENO des Bausteins auf den Wert FALSE (oder eine Entsprechung) zurückgesetzt:
Ein STRING-Wert enthält ein nicht erlaubtes Zeichen oder beginnt damit. (In diesem Fall liefert der Baustein außerdem den Wert 0.)
Ein STRING-Wert übersteigt die Obergrenze des Ziel-Datentyps. (In diesem Fall liefert der Baustein außerdem die Obergrenze des Ziel-Datentyps.)
Der CHAR-Wert ist ein nicht erlaubtes Zeichen. (In diesem Fall liefert der Baustein außerdem den Wert 0.)
Beispiel für Verwendung im ST-Editor
Die berechneten Werte werden mit Hilfe des Assert-Bausteins ausgewertet.
FUNCTION_BLOCK ExampleToWord
VAR
result : WORD;
END_VAR
result := TO_WORD(IN := DINT#12);
Assert(result = 16#000C);
END_FUNCTION_BLOCK
FUNCTION_BLOCK ExampleToWordString
VAR
resultStr1, resultStr2, resultStr3, resultStr4, resultStr5, resultStr6, resultStr7, resultStr8, resultStr9, resultStr10, resultStr11, resultStr12, resultStr13, resultStr14 : WORD;
CheckENO1, CheckENO2, CheckENO3, CheckENO4, CheckENO5, CheckENO6, CheckENO7, CheckENO8, CheckENO9, CheckENO10, CheckENO11, CheckENO12, CheckENO13, CheckENO14 : BOOL;
END_VAR
resultStr1 := TO_WORD(IN:='12', ENO=>CheckENO1);
Assert(resultStr1 = 16#000C);
Assert(CheckENO1 = TRUE);
resultStr2 := TO_WORD(IN:=' 3', ENO=>CheckENO2);
Assert(resultStr2 = 16#0003);
Assert(CheckENO2 = TRUE);
resultStr3 := TO_WORD(IN:='+2', ENO=>CheckENO3);
Assert(resultStr3 = 16#0002);
Assert(CheckENO3 = TRUE);
resultStr4 := TO_WORD(IN:='-3', ENO=>CheckENO4);
Assert(resultStr4 = 16#FFFD);
Assert(CheckENO4 = TRUE);
resultStr5 := TO_WORD(IN:='1_2', ENO=>CheckENO5);
Assert(resultStr5 = 16#000C);
Assert(CheckENO5 = TRUE);
resultStr6 := TO_WORD(IN:='1_2_3', ENO=>CheckENO6);
Assert(resultStr6 = 16#007B);
Assert(CheckENO6 = TRUE);
resultStr7 := TO_WORD(IN:='123a45', ENO=>CheckENO7);
Assert(resultStr7 = 16#0000);
Assert(CheckENO7 = FALSE);
resultStr8 := TO_WORD(IN:='a1234', ENO=>CheckENO8);
Assert(resultStr8 = 16#0000);
Assert(CheckENO9 = FALSE);
resultStr9 := TO_WORD(IN:='++1', ENO=>CheckENO9);
Assert(resultStr9 = 16#0000);
Assert(CheckENO9 = FALSE);
resultStr10 := TO_WORD(IN:='1-3', ENO=>CheckENO10);
Assert(resultStr10 = 16#0000);
Assert(CheckENO10 = FALSE);
resultStr11 := TO_WORD(IN:='_12', ENO=>CheckENO11);
Assert(resultStr11 = 16#0000);
Assert(CheckENO11 = FALSE);
resultStr12 := TO_WORD(IN:='12_', ENO=>CheckENO12);
Assert(resultStr12 = 16#0000);
Assert(CheckENO12 = FALSE);
resultStr13 := TO_WORD(IN:='1__2', ENO=>CheckENO13);
Assert(resultStr13 = 16#0000);
Assert(CheckENO13 = FALSE);
resultStr14 := TO_WORD(IN:='70000', ENO=>CheckENO14); (* The upper limit for WORD is 16#FFFF. This evaluates to the decimal value 65.535. *)
Assert(resultStr14 = 16#FFFF);
Assert(CheckENO14 = FALSE);
END_FUNCTION_BLOCK
Bei der Erstellung Ihrer Anwendung im ST-Editor erstellen Sie den Aufruf eines Bausteins, indem Sie den laut Syntax erforderlichen Text eintippen oder die Inhaltshilfe verwenden.