Stringkonvertierung

Stringkonvertierung 1:

Undefiniertes Ergebnis bei Überschreitung des Wertebereichs

Wenn der Eingangswert eines Typkonvertierungsoperators außerhalb des Wertebereichs des Ausgangsdatentyps liegt, ist das Ergebnis der Operation nicht definiert und abhängig von der Plattform. Dies ist beispielsweise der Fall, wenn ein negativer Operandenwert von LREAL in den Zieldatentyp UINT konvertiert wird. Auch ein Ausnahmefehler ist dann möglich!

Stringkonvertierung 2:

Informationsverlust möglich

Wenn ein größerer Datentyp in einen kleineren Datentyp konvertiert wird, können Informationen verloren gehen.

Stringkonvertierung 3:

Stringmanipulation bei Konvertierung nach STRING oder WSTRING

Bei einer Typkonvertierung nach STRING oder WSTRING wird der getypte Wert als Zeichenfolge linksbündig abgelegt und bei Überlänge abgeschnitten. Deklarieren Sie deshalb die Rückgabevariablen für die Typkonvertierungsoperatoren <type>_TO_STRING und <type>_TO_WSTRING ausreichend lang, sodass die Zeichenfolge ohne Manipulation Platz findet.

<type>_TO_STRING

Die Operatoren dienen der Konvertierung von einem anderen Datentyp in den Datentyp STRING oder WSTRING.

Als Operand können Sie eine Variable oder ein Literal angeben.

Syntax:

<Datentyp>_TO_STRING (<Variablenname> | <Literal>)
<Datentyp>_TO_WSTRING (<Variablenname> | <Literal>)

STRING_TO_<type>

Die Operatoren dienen der Konvertierung vom Datentyp STRING oder WSTRING in einen anderen Datentyp.

Als Operand können Sie eine Variable oder ein Literal angeben.

Syntax:

STRING_TO_<Datentyp> (<Variablenname> | <Literal>)
WTRING_TO_<Datentyp> (<Variablenname> | <Literal>)

Sie müssen den Operand vom Typ STRING gemäß der Norm IEC 61131-3 angeben. Der Wert muss einer gültigen Konstante (Literal) des Zieldatentyps entsprechen. Dies betrifft die Angabe von Exponentialwerten, infiniten Werten, Präfixen, Gruppierungszeichen ("_") und Kommas. Zusätzliche Zeichen hinter den Ziffern einer Zahl sind erlaubt, z B. 23xy. Zusätzliche Zeichen vor einer Zahl sind nicht erlaubt.

Der Operand muss einen gültigen Wert des Zieldatentyps darstellen.

STRING/WSTRING nach BOOL konvertieren

Operatoren:

STRING_TO_BOOL (<Variablenname> | <Literal>)
WSTRING_TO_BOOL (<Variablenname> | <Literal>)

Nur wenn der Operandenwert 'TRUE' oder 'true' ist, wird ein TRUE zurückgegeben. Dagegen wird bei 'True' ein FALSE zurückgegeben.

Beispiele:

ST-Code

Ergebnis

bVar := STRING_TO_BOOL('TRUE');

TRUE

bVar := STRING_TO_BOOL('true');

TRUE

bVar := STRING_TO_BOOL('True');

FALSE

nVar := STRING_TO_WORD('abc34');

0

nVar := STRING_TO_WORD('34abc');

34

tVar := STRING_TO_TIME('T#127ms');

T#127ms

fVar := STRING_TO_REAL('1.234');

1.234

nVar := STRING_TO_BYTE('500');

244

TO_STRING/TO_WSTRING für Enumerationsvariablen

Wenn Sie die textuellen Bezeichner einer Enumerationskomponente abfragen möchten, um diesen zum Beispiel in einer Textausgabe weiterzuverarbeiten, fügen Sie oberhalb der Deklaration der Enumeration das Attribut 'to_string' hinzu. Im Implementierungsteil können Sie dann auf eine Enumerationsvariable oder auf die Komponenten der Enumeration die Konvertierungsfunktionen TO_STRING bzw. TO_WSTRING anwenden und bekommen dabei den Namen der Enumerationskomponente zurückgeliefert.

Stringkonvertierung 4:

Attribut 'to_string'

Verfügbar ab TC3.1 Build 4024

Die Konvertierungsfunktionen TO_STRING/TO_WSTRING können Sie auch auf Enumerationen anwenden, die nicht mit dem Attribut 'to_string' deklariert sind. In diesem Fall bekommen Sie den numerischen Wert der Enumerationskomponente zurückgeliefert.

Beispiel:

Enumeration E_Sample

{attribute 'qualified_only'}
{attribute 'strict'}
{attribute 'to_string'}
TYPE E_Sample :
(
    eInit := 0,
    eStart,
    eStop
);
END_TYPE

Programm MAIN

PROGRAM MAIN
VAR
    eSample         : E_Sample;
    nCurrentValue   : INT;
    sCurrentValue   : STRING;
    wsCurrentValue  : WSTRING;
 
    sComponent      : STRING;
    wsComponent     : WSTRING;
END_VAR
nCurrentValue  := eSample; 
sCurrentValue  := TO_STRING(eSample);
wsCurrentValue := TO_WSTRING(eSample);

sComponent     := TO_STRING(E_Sample.eStart);
wsComponent    := TO_WSTRING(E_Sample.eStop);

 

Ergebnis der Zuweisungen/Konvertierungsfunktionen:

 

Ergebnis, falls die Enumeration nicht mit dem Attribut 'to_string' deklariert wäre:

Siehe auch: