Metrik: Stack Size

Benutzerbeschreibung

Eine IEC-61131-3-basierte Anwendung oder Bibliothek wird anhand komplexer Typen strukturiert, z. B. Programme, Funktionsbausteine, globale Variablenlisten, Methoden, Aktionen, Funktionen, Strukturen usw. 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)). Der Aufruf nach Wert für komplexe Typen wie Methoden- oder Funktionseingänge sollte keinesfalls verwendet werden.

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 von Stack Size (Stapelgröße) für IEC-61131-3-Code:

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