SIZEOF-Baustein

Kurz-Information

Name

SIZEOF

→POE-Typ

→Funktion

Kategorie

IEC-Baustein, MemoryEnh

Konform zur →IEC-Norm

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/add.svg nicht in IEC-Norm vorgesehen

Grafische Schnittstelle

images/download/thumbnails/414781845/SIZEOF-version-1-modificationdate-1535027074385-api-v2.png

Verfügbar ab

  • Version 1.34.0 (für logi.CAD 3) – Anfangsvariante

  • Version 3.5.0 (für Bibliothek Standard) – Bestimmung der Speichergröße durch den Datentyps des Eingangs IN (vorher: Bestimmung durch das übergebene Element), Einschränkung "keine Funktionsbausteine mit allgemeinen Datentypen"

Funktionalität

Der Baustein liefert den Speicher (in Bytes), den das am Eingang IN anliegende Element benötigt (z.B. eine →Variable oder ein →Literal). Dabei wird die benötigte Speichergröße des Datentyps des Eingangs IN bestimmt.
images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/information.svg Es ist möglich, den Speicherbedarf von Datentypen aufgrund von Einstellungen des Compilers oder der Plattform zu konfigurieren.

Spezialfälle (siehe unter " Beispiel für Verwendung im ST-Editor" ):

  • Bei einem anliegenden BOOL-Element hängt der gelieferte Speicher von der verwendeten Plattform für die →SPS ab. Üblicherweise wird der Wert 1 geliefert.

  • Der Aufruf des SIZEOF-Bausteins ohne anliegendes Element (d.h. ohne Parameterliste) liefert üblicherweise den Wert 1. Grund: Hier wird der Datentyp BOOL verwendet.

  • Bei einer anliegenden →Referenz hängt der gelieferte Speicher von der Architektur der erstellen Anwendung (32- oder 64-Bit) ab.

  • Bei einem anliegenden →ARRAY-Element mit einem Index wird der Basistyp des Array-Elements (für den gelieferten Speicher) verwendet und der angegebene Index selbst nicht überprüft (z.B. ob der Index vorhanden ist).

  • Bei einem anliegenden STRING-Element mit einer Länge wird die Länge des STRING-Buffers geliefert. Die Länge des STRING-Buffers wird durch die Deklaration bestimmt.
    STRING-Elemente mit einer Länge sind von Ihnen deklarierte STRING-Variablen; siehe "Deklaration von STRING-Variablen (inkl. Zugriff)".

  • Bei einem anliegenden STRING-Element ohne einer Länge wird ebenfalls die Länge des STRING-Buffers geliefert. Die Länge des STRING-Buffers wird jedoch durch den resultierenden Wert bestimmt.
    STRING-Elemente ohne einer anwenderdefinierten Länge ergeben sich, wenn Sie STRING-Funktionen oder →Zeichenfolge-Literale verwenden.

Eingänge, Ergebniswert


Bezeichner

→Datentyp

Beschreibung

Eingänge:

IN

REAL, LREAL, USINT, UINT, UDINT, ULINT, SINT, INT, DINT, LINT, TIME, BOOL, BYTE, WORD, DWORD, LWORD, STRING, CHAR, DATE_AND_TIME, DATE, TIME_OF_DAY, ein →anwenderdefinierter Datentyp, ein →Funktionsbaustein oder eine →Referenz
Einschränkung: Bei →ARRAY-Datentypen sind nur ein-dimensionale Arrays zulässig.

Weitere Einschränkung: Bei Funktionsbausteinen sind keine Funktionsbausteine mit einem →allgemeinen Datentyp zulässig. Als Folge dieser Einschränkung können Sie die folgenden Bausteine nicht als Eingang des aktuellen Bausteins verwenden: LIMITER_O, LIMITER_U, FORCEMRK, MAX_HOLD, MIN_HOLD und →Vendor-Funktionsbausteine , die mit einem allgemeinen Datentyp deklariert sind
Falls Sie dennoch Instanzen von diesen Funktionsbausteinen verwenden, kommt es beim Erstellen der Anwendung zu einem Linker-Fehler.

Eingangswert

Ergebniswert:

UDINT


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:

Beispiel für Verwendung im ST-Editor

Die berechneten Werte werden mit Hilfe des Assert-Bausteins ausgewertet.

FUNCTION_BLOCK ExampleSizeOf
VAR
result : ARRAY[1..12] OF UDINT;
RealVar : REAL := 1.234E6;
StringVar : STRING[10] := 'abcdef';
RefVar : REF_TO STRING[10] := REF(StringVar);
StructVar : ExampleSizeOfStruct;
ArrayVar : ExampleSizeOfArray;
FB1 : ExampleSizeOfFB;
END_VAR
result[1] := SIZEOF(IN := BOOL#TRUE);
result[2] := SIZEOF(IN := INT#500);
result[3] := SIZEOF(IN := RealVar);
result[4] := SIZEOF(IN := StringVar);
result[5] := SIZEOF(IN := CONCAT(StringVar,StringVar));
result[6] := SIZEOF(IN := STRING#'abcdef');
result[7] := SIZEOF();
result[8] := SIZEOF(IN := RefVar);
result[9] := SIZEOF(IN := RefVar^);
result[10] := SIZEOF(IN := StructVar);
result[11] := SIZEOF(IN := ArrayVar);
result[12] := SIZEOF(IN := FB1);
 
(* The following statements are true, if the application is loaded onto the built-in PLC. *)
ASSERT(result[1] = 1); (* For a PLC based on the vxWorks platform, 'result[1]' might evaluate to '4'. *)
ASSERT(result[2] = 2);
ASSERT(result[3] = 4);
ASSERT(result[4] = 11);
ASSERT(result[5] = 13);
ASSERT(result[6] = 7);
ASSERT(result[7] = 1); (* For a PLC based on the vxWorks platform, 'result[7]' might evaluate to '4'. *)
ASSERT(result[8] = 4); (* This statement is true for a 32-bit PLC. For the 64-bit PLC, 'result[8]' evaluates to '8'. *)
ASSERT(result[9] = 11);
ASSERT(result[10] = 8); (* The variable 'result[10]' evaluates to '8' - due to alignment rules. *)
(* For a PLC based on the vxWorks platform, 'result[10]' might evaluate to '10'. *)
ASSERT(result[11] = 20);
ASSERT(result[12] = 8); (* The variable 'result[12]' evaluates to '8' - due to alignment rules and ENO variable. *)
(* For a PLC based on the vxWorks platform, 'result[12]' might evaluate to '16'. *)
END_FUNCTION_BLOCK
TYPE
ExampleSizeOfStruct : STRUCT
Elem1 : BOOL := TRUE;
Elem2 : INT := 500;
Elem3 : REAL := 1.234E6;
END_STRUCT;
ExampleSizeOfArray : ARRAY [1..10] OF INT;
END_TYPE
 
FUNCTION_BLOCK ExampleSizeOfFB
VAR_INPUT
I1 : BOOL;
I2 : INT;
END_VAR
VAR_OUTPUT
O1 : BOOL;
O2 : INT;
END_VAR
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.