SIZEOF-Baustein
Kurz-Information
Name |
SIZEOF |
→POE-Typ |
|
Kategorie |
|
Konform zur →IEC-Norm |
nicht in IEC-Norm vorgesehen |
Grafische Schnittstelle |
|
Verfügbar ab |
|
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.
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 |
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
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 |
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:
"Bausteine für sichere Logik", ob dieser Baustein für das Entwickeln von sicherheitsrelevanten Anwendungen unterstützt wird.
"Kennzeichnung von sicherer Logik im FBS-Editor", welche Auswirkung die Verwendung des Bausteins als Baustein für sichere Logik hat.
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.