TO_LWORD-Baustein

Kurz-Information

Name

TO_LWORD

→POE-Typ

→Funktion

Kategorie

Standard (safe), ConvertBaustein mit interner Fehlerdiagnose

Konform zur →IEC-Norm

(Fehler) derzeit eingeschränkt; siehe "Funktionalität"

und

(Plus) mehr als in IEC-Norm vorgesehen möglich; siehe "Explizite Konvertierung laut IEC-Norm"

Grafische Schnittstelle

Verfügbar ab

Version 1.0.0 (für Neuron Power Engineer) – Anfangsvariante

Version 1.90.0 (für Neuron Power Engineer) – Erweiterung: TIME_OF_DAY für IN

Version 2.0.15 (für Bibliothek Standard) – Erweiterung: STRING für IN ohne Zeichen _, interne Fehlerdiagnose

Version 2.0.16 (für Bibliothek Standard) – Erweiterung: STRING für IN mit Zeichen _

Version 2.0.17 (für Bibliothek Standard) – Erweiterung: CHAR für IN

Version 3.1.0 (für Bibliothek Standard) – Für Eingänge vom Datentyp REAL wird die optimierte float-Variante der C-Runtime verwendet. Im Vergleich zu früheren Versionen können in den Grenzwertbereichen des Bausteins (geringfügig) andere Ergebnisse geliefert werden.

Version 3.8.0 (für Bibliothek Standard (safe)): Baustein in diese Bibliothek verschoben

Funktionalität

Der Baustein dient zur expliziten Konvertierung des am Eingang IN anliegenden Werts in einen Wert vom Datentyp LWORD.

Falls der anliegende Wert im gemeinsamen Wertbereich des Eingangsdatentyps und des Ergebniswerts LWORD liegt, so liefert der Baustein diesen Wert.

Abweichung zur IEC-Norm

Die IEC-Norm definiert, dass die Konvertierung für die Datentypen, die laut der IEC-Norm vorgesehen sind, als Binär-Transfer erfolgt. Dieser Baustein weicht jedoch von der IEC-Norm ab. Die Werte der Datentypen LREAL, DINT, INT, SINT, CHAR werden abweichend von der IEC-Norm konvertiert (siehe die nachfolgende Beschreibung für diese Datentypen).

Beachten Sie zusätzlich:

  • Ein Wert des Datentyps REAL oder 0 im Bereich von ULINT bis zum maximalen Wert von 18_446_744_073_709_551_615 (d.h., ULINT) wird auf einen -Wert gerundet. Erst danach erfolgt der Binär-Transfer dieses Werts auf den Zieldatentyp. Dafür gilt das folgende Verhalten (laut der IEC-Norm):

    • Ist der Quelldatentyp kleiner als der Zieldatentyp, wird der Quellwert in den ganz rechten Bytes der Zielvariablen gespeichert und die ganz linken Bytes werden auf Null gesetzt (= mit 0 aufgefüllt).

    • Ist der Quelldatentyp größer als der Zieldatentyp, werden nur die ganz rechten Bytes der Quellvariablen im Zieldatentyp gespeichert.

  • 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.

  • Falls ein anliegender REAL-Wert mit mehr als 6 Vorkomma-Stellen konvertiert wird, kann das Ergebnis inexakt sein. Beispiel: Für REAL#4_294_967_290.0 liefert der Baustein den Ergebniswert 0. Grund sind die Anzahl der signifikanten Stellen von REAL (Details: siehe "Unterstützte Datentypen (in ST)" der Hinweis 3 und der Hinweis 4 nach der Tabelle).

  • Falls ein anliegender LREAL-Wert mit mehr als 15 Vorkomma-Stellen konvertiert wird, kann das Ergebnis inexakt sein. Beispiel: Für LREAL#9223372036854775807.0 liefert der Baustein den Ergebniswert -9223372036854775808. Grund sind die Anzahl der signifikanten Stellen von LREAL (Details: siehe "Unterstützte Datentypen (in ST)" der Hinweis 3 und der Hinweis 4 nach der Tabelle).

  • Für die Konvertierung von DINT, INT und SINT gilt: Diese Datentypen werden bei der Konvertierung nicht mit 0 aufgefüllt, sondern abhängig vom Vorzeichen mit Bits (0 oder 1) aufgefüllt. Beispiel: TO_LWORD(SINT#-1) ergibt in Neuron Power Engineer 16#FFFFFFFFFFFFFFFF – statt des Ergebnisses 16#0000000000000FF (wie laut der IEC-Norm erwartet).

  • 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 der 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. Der Ausgang ENO wird hier auf den Wert FALSE gesetzt.

      Erlaubte Zeichen

      Nicht erlaubte Zeichen

      Ziffern (Basis: 10, Zahlen: 0 bis 9)
      Beispiel für Wert mit erlaubtem Zeichen: '7'

      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 –3

      Wiederholungen 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 Wertes
      Beispiel für Wert mit erlaubtem Zeichen: 1_2 oder 1_2_3

      Unterstrich-Zeichen _ am Anfang oder Ende des Werts, mehrere Unterstrich-Zeichen _ direkt hintereinander
      Beispiel für Wert mit nicht erlaubtem Zeichen: _12, 12_ oder 1__2

    • Falls der zu konvertierende STRING-Wert die Obergrenze des Ziel-Datentyps übersteigt, liefert der Baustein die Obergrenze des Ziel-Datentyps. Auch hier 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 LWORD vor:

LREALLINTDINTINTSINTULINTUDINTUINTUSINT, DWORDWORD, BYTE, BOOLCHAR

Die IEC-Norm (Edition 3.0) sieht eine binäre Übertragung aller Eingangsdatentypen vor. Abweichend davon wird der entsprechende Wert bei den folgenden Eingangsdatentypen aber laut IEC-Norm (Edition 2.0) konvertiert.

LREALDINTINTSINTCHAR

Details zum Neuron Power Engineer-Verhalten des Bausteins finden Sie im Abschnitt "Funktionalität".

Eingänge, Ergebniswert

 

Bezeichner

→Datentyp

Beschreibung

Eingänge:

IN

REALLREALUSINTUINTUDINTULINTSINTINTDINTLINTTIMEBOOLBYTEWORDDWORDLWORDSTRING, CHAR oder TIME_OF_DAY

zu konvertierender Wert

Ergebniswert:

LWORD

 

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.

Informieren Sie sich unter:

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.

Beispiel für DINT-Wert
FUNCTION_BLOCK ExampleToLword
  VAR
   result : LWORD; 
  END_VAR
 
  result := TO_LWORD(IN := DINT#12);
  Assert(result = 16#0000_0000_0000_000C);
  
END_FUNCTION_BLOCK
Beispiel für STRING-Werte
FUNCTION_BLOCK ExampleToLwordString
  VAR
   resultStr1, resultStr2, resultStr3, resultStr4, resultStr5, resultStr6, resultStr7, resultStr8, resultStr9, resultStr10, resultStr11, resultStr12, resultStr13, resultStr14 : LWORD;
   CheckENO1, CheckENO2, CheckENO3, CheckENO4, CheckENO5, CheckENO6, CheckENO7, CheckENO8, CheckENO9, CheckENO10, CheckENO11, CheckENO12, CheckENO13, CheckENO14 : BOOL;
  END_VAR
   
  resultStr1 := TO_LWORD(IN:='12', ENO=>CheckENO1);
  Assert(resultStr1 = 16#0000_0000_0000_000C);
  Assert(CheckENO1 = TRUE);
     
  resultStr2 := TO_LWORD(IN:='    3', ENO=>CheckENO2);
  Assert(resultStr2 = 16#0000_0000_0000_0003);
  Assert(CheckENO2 = TRUE);
   
  resultStr3 := TO_LWORD(IN:='+2', ENO=>CheckENO3);
  Assert(resultStr3 = 16#0000_0000_0000_0002);
  Assert(CheckENO3 = TRUE);
  
  resultStr4 := TO_LWORD(IN:='-3', ENO=>CheckENO4);
  Assert(resultStr4 = 16#FFFF_FFFF_FFFF_FFFD);
  Assert(CheckENO4 = TRUE);
   
  resultStr5 := TO_LWORD(IN:='1_2', ENO=>CheckENO5);
  Assert(resultStr5 = 16#0000_0000_0000_000C);
  Assert(CheckENO5 = TRUE);
  
  resultStr6 := TO_LWORD(IN:='1_2_3', ENO=>CheckENO6);
  Assert(resultStr6 = 16#0000_0000_0000_007B);
  Assert(CheckENO6 = TRUE);
  
  resultStr7 := TO_LWORD(IN:='123a45', ENO=>CheckENO7);
  Assert(resultStr7 = 16#0000_0000_0000_0000);
  Assert(CheckENO7 = FALSE);
   
  resultStr8 := TO_LWORD(IN:='a1234', ENO=>CheckENO8);
  Assert(resultStr8 = 16#0000_0000_0000_0000);
  Assert(CheckENO9 = FALSE);
   
  resultStr9 := TO_LWORD(IN:='++1', ENO=>CheckENO9);
  Assert(resultStr9 = 16#0000_0000_0000_0000);
  Assert(CheckENO9 = FALSE);
   
  resultStr10 := TO_LWORD(IN:='1-3', ENO=>CheckENO10);
  Assert(resultStr10 = 16#0000_0000_0000_0000);
  Assert(CheckENO10 = FALSE);
  
  resultStr11 := TO_LWORD(IN:='_12', ENO=>CheckENO11);
  Assert(resultStr11 = 16#0000_0000_0000_0000);
  Assert(CheckENO11 = FALSE);
  
  resultStr12 := TO_LWORD(IN:='12_', ENO=>CheckENO12);
  Assert(resultStr12 = 16#0000_0000_0000_0000);
  Assert(CheckENO12 = FALSE);
  
  resultStr13 := TO_LWORD(IN:='1__2', ENO=>CheckENO13);
  Assert(resultStr13 = 16#0000_0000_0000_0000);
  Assert(CheckENO13 = FALSE);
   
  resultStr14 := TO_LWORD(IN:='18500000000000000000', ENO=>CheckENO14);   (* The upper limit for LWORD is 16#FFFF_FFFF_FFFF_FFFF. This evaluates to the decimal value 18.446.744.073.709.551.615. *)
  Assert(resultStr14 = 16#FFFF_FFFF_FFFF_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.