Metrisch: Stack Size

Benutzerbeschreibung

Eine Anwendung oder Bibliothek wird nach komplexen Typen, wie z. B. Programmen, Funktionsbausteinen, globalen Variablenlisten, Methoden, Aktionen, Strukturen usw. organisiert. Innerhalb jedes dieser Typen können Variablen definiert werden.

Wenn ein komplexer Typ, z. B. eine Funktion, eine Methode, eine Aktion, eine Eigenschaft Get, eine Eigenschaft Set oder ein Übergang, aufgerufen wird, wird Speicher im Stapel zur Ausführung der Methode benötigt. Die Informationen zur Stapelgröße ermöglichen die Identifizierung des komplexen Typs, der zu viel Speicher des Stapels beansprucht.

HINWEIS: Der für jede Task verfügbare Stapelspeicher ist begrenzt und wird von der verwendeten Steuerung vorgegeben. Eine umfangreiche Beanspruchung des Stapels kann Ausnahmen zur Folge haben.
HINWEIS: Wenn ein Funktionsbausteintyp als Eingangsvariablentyp einer Methode (Aufruf nach Wert) verwendet wird, wird Speicher für einen komplexen Typ benötigt (siehe Memory Size (Data)). Verwenden Sie den Aufruf nicht für komplexe Typen wie Methoden- oder Funktionseingänge.

Metrikberechnung

Für einen komplexen Typ wie eine Funktion oder Methode werden die Größen der Variablen addiert. Beim Aufruf des komplexen Typs wird die Größe am Stapelanfang zugewiesen und die Eingangswerte werden in den zugewiesenen Speicher kopiert. Bei der Codeausführung der Funktion oder Methode werden diese Speicherwerte verwendet.

HINWEIS: Jeder Methoden- oder Funktionsaufruf verfügt über einen eigenen Speicher, sodass kein Konflikt entsteht, wenn eine Methode parallel von einer anderen Task aufgerufen wird.

Beispiel

Beispiel für die Berechnung der Stapelgröße:

FUNCTION_BLOCK FB_XXX
VAR
    fbComplex: FB_Test; // 20 byte
END_VAR

// method call of FB_XXX
Meth1(TRUE);

METHOD Meth1
VAR_INPUT
   xTest1: BOOL;
END_VARVAR
   iTest2: INT;
END_VAR


METHOD METH2
VAR_INPUT
    fbComp: FB_XXX;
END_VAR

Ergebnis der Metrik „Stack Size“

Stack Size (METH1) = 8
Stack Size (METH2) = 32