Attribut 'call_after_init'

Das Pragma bewirkt, dass eine Methode implizit nach der Initialisierung einer Funktionsbausteininstanz aufgerufen wird. Genau genommen wird die Methode nach der Verarbeitung der initialen Zuweisungen und vor dem Start der Tasks eines SPS-Projekts aufgerufen und kann so auf die Vorgaben des Anwenders entsprechend reagieren. Der Name der Methode ist frei wählbar (Ausnahmen: FB_init, FB_reinit und FB_exit).

Aus Performanzgründen müssen Sie das Attribut sowohl dem Funktionsbaustein als auch der Methode in einer eigenen ersten Zeile über dem Deklarationsteil hinzufügen.

Syntax: {attribute 'call_after_init'}

Einfügeort: Erste Zeile über dem Deklarationsteil der Methode und des Funktionsbausteins

TwinCAT ruft die Methode nach der Methode FB_init auf und nachdem die Variablenwerte eines Initialisierungsausdrucks in der Instanzdeklaration gültig wurden.

call_after_init bei abgeleiteten Bausteinen

Ein Baustein, der einen anderen Baustein erweitert, der das Attribut 'call_after_init' verwendet, muss ebenfalls mit dem Attribut versehen werden.

Aus Gründen der Verständlichkeit wird empfohlen, die entsprechende Methode mit dem gleichen Namen, der gleichen Signatur und dem gleichen Attribut zu überschreiben. Das erfordert einen Aufruf von SUPER^.MyInit.

Attribut 'call_after_init' 1:

Methoden, die das Attribut 'call_after_init' enthalten, dürfen keine Eingänge (VAR_INPUT) haben. TwinCAT gibt einen entsprechenden Übersetzungsfehler aus.

Attribut 'call_after_init' 2:

Debugging

Das Finden von Fehlern in Methoden, die mit {attribute 'call_after_init'} deklariert sind, ist mühsam, weil unter anderem das Setzen von Haltepunkten nicht die gewünschte Wirkung haben kann.

Beispiel:

Definition:

{attribute 'call_after_init'}
FUNCTION_BLOCK FB_Sample
... <functionblock definition>
{attribute 'call_after_init'}
METHOD CallAfterInit
... <method definition>

Die Definition setzt zum Beispiel folgende Deklaration in die nachfolgende Codeabarbeitung um:

fbSample : FB_Sample := (nValue1 := 99);

Codeabarbeitung:

fbSample.FB_Init();
fbSample.nValue1 := 99;
fbSample.CallAfterInit();

Somit kann in CallAfterInit() auf die benutzerdefinierte Initialisierung reagiert werden.

Siehe auch: