Strings

Themenpunkte:

  1. Bezeichner für Größen- und Längenangaben [++]
  2. Empfohlene Default-Größe [+]
  3. Übergabe von großen Strings [+]
  4. Verarbeitung von großen Strings [+]

Bezeichner für Größen- und Längenangaben

Die Größe einer String-Variablen in Bytes als „Size“ bezeichnen.

Die aktuelle Länge eines Strings in Zeichen als „Len“ bezeichnen.

Positives Beispiel:

VAR
    sText     : T_MaxString;
    nTextSize : UDINT;
    nTextLen  : UDINT;
END_VAR
-------------------------------------------
nTextSize := SIZEOF(sText);
nTextLen  := LEN(sText);

Empfohlene Default-Größe

Die empfohlene Default-Größe einer String-Variablen ist T_MaxString (Alias von STRING(255)). Dies gilt sowohl für die lokale Deklaration des Strings als auch für die Deklaration des Parameters in einer Funktion/Methode.

Falls eine andere Größe für den Anwendungsfall fest vorgegeben ist, sollte diese als Größenbeschränkung verwendet werden (Beispiel: T_AmsNetId).

Die Größe von T_MaxString ist als Maximum für Funktionen wie LEN() und CONCAT() definiert und führt zu akzeptabler Performanz von regulären Parameterzuweisungen als „Call by value“.

Static Analysis:

Thematisch empfohlene Static Analysis Regel:

Positives Beispiel:

FUNCTION F_Sample : BOOL
VAR_INPUT
    sParam1  : T_MaxString;
    sParam2  : T_AmsNetId;
END_VAR
PROGRAM MAIN
VAR
    sLocal1  : T_MaxString;
    sLocal2  : T_AmsNetId;
    bReturn  : BOOL;
END_VAR
bReturn := F_Sample(sParam1 := sLocal1,
                    sParam2 := sLocal2);

Übergabe von großen Strings

Falls ein größerer String als T_MaxString erforderlich ist, sollte die Übergabe als „Call by reference“ verwendet werden. Dies kann entweder über VAR_IN_OUT CONSTANT bei ausschließlich lesendem Zugriff oder POINTER TO STRING erreicht werden.

Ein Eingangsparameter als REFERENCE TO STRING(1023) bietet sich nur bedingt an, weil dadurch immer eine fixe Größe der zugewiesenen Variablen verlangt würde. Ist diese Einschränkung hinnehmbar oder gewünscht, bevorzugen Sie diese Variante.

Positives Beispiel:

FUNCTION F_Sample : BOOL
VAR_IN_OUT CONSTANT
    sLonger1     : STRING;
END_VAR
VAR_INPUT
    pLonger2     : POINTER TO STRING;
    nLonger2Size : UDINT;
END_VAR
PROGRAM MAIN
VAR
    sLocal       : STRING(1023);
    bReturn      : BOOL;
END_VAR
bReturn := F_Sample(sLonger1     := sLocal,
                    pLonger2     := ADR(sLocal),
                    nLonger2Size := SIZEOF(sLocal));

Verarbeitung von großen Strings

Bei Verwendung von T_MaxString oder kleineren String-Variablen können Sie String-Funktionen wie CONCAT() oder LEN() verwenden (Tc2_Standard).

Bei größeren String-Variablen müssen Sie Funktionen wie CONCAT2() oder LEN2() nutzen (Tc2_Utilities).