Skip to main content

Attribut: call_after_init

Wichtig

VAR_INPUT-Deklarationen in Funktionen oder Methoden, die dieses Attribut verwenden, führen zu Übersetzungsfehlern. Grund: Eingabevariablen sind in diesem Fall zum Zeitpunkt des Aufrufs, der implizit während des Online-Change erfolgt, nicht bekannt.

Wichtig

Funktionen, die mit diesem Attribut gekennzeichnet sind, werden nur ausgeführt, wenn sie kompiliert und auf die Steuerung heruntergeladen wurden.

Wenn Ihre Funktion an keiner anderen Stelle in Ihrem Projekt aufgerufen wird, kann der Compiler die Funktion aus dem Build ausschließen. Um sicherzustellen, dass die Funktion immer kompiliert und zur Ausführung verfügbar ist, fügen Sie der Funktionsdeklaration das Pragma {attribute 'linkalways'} hinzu.

Alternativ dazu, können Sie im Eigenschaftendialog der Funktion in der Registerkarte Build die Option Immer binden aktivieren.

Ohne diese Option wird Ihre Initialisierungsfunktion möglicherweise nicht ausgeführt, obwohl sie ordnungsgemäß konfiguriert zu sein scheint.

Anmerkung

Diese Funktionalität wird ab Compilerversion 3.4.1.0 unterstützt.

Das Pragma bewirkt, dass eine Methode implizit nach der Initialisierung einer Funktionsbaustein-Instanz aufgerufen wird. 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.

Eine Methode mit diesem Pragma wird nach der Methode FB_Init und nachdem die Variablenwerte eines Initialisierungsausdrucks in der Instanzdeklaration gültig wurden, aufgerufen

Syntax:

{attribute 'call_after_init'}

Aufruf: Erste Zeile über dem Deklarationsteil der Methode und des Funktionsbausteins.

Beispiel 259. Beispiel

Definition

{attribute 'call_after_init'}
FUNCTION_BLOCK FB_DoIt
... <functionblock definition>

{attribute 'call_after_init'}
METHOD FB_AfterInit
... <method definition>

Die Deklaration setzt folgende Deklaration in die nachfolgende Codeabarbeitung um:

fbDoIt : FB_DoIt := (in1 := 99);

Codeabarbeitung

fbDoIt.FB_Init();
fbDoIt.in1 := 99;
fbDoIt.FB_AfterInit();

So kann in FB_AfterInit auf die benutzerdefinierte Initialisierung reagiert werden.