Attribut 'no_explicit_call'

Das Pragma fügen Sie einer POU hinzu, um jeden direkten Aufruf dieser POU zu unterbinden.

Dies ist beispielsweise für objektorientierte Funktionsbausteine relevant, die ausschließlich über Methoden (Method-Bausteine) und Eigenschaften (Property-Bausteine) angesteuert werden können. Ein Aufruf des FB-Bodys wäre in diesem Fall funktionslos bzw. nicht erlaubt. Wenn der Body eines Funktionsbausteins, der mit dem Attribut 'no_explicit_call‘ deklariert ist, dennoch direkt aufgerufen wird, weist der Compiler mithilfe eines Kompilierfehlers auf diese fehlerhafte Nutzung des Funktionsbausteins hin.

Syntax: {attribute 'no_explicit_call' := '<text value>'}

Einfügeort: Oberste Zeile im Deklarationsteil eines Funktionsbausteins.

Beispiel:

In dem folgenden Beispiel wird ein Funktionsbaustein deklariert, dessen FB-Body direkt aufgerufen werden darf (FB_DirectCallAllowed). Ein weiterer Funktionsbaustein wird deklariert, dessen FB-Body hingegen nicht direkt aufgerufen werden darf (FB_DirectCallNotAllowed). Daher wird dieser Funktionsbaustein mit dem Attribut 'no_explicit_call‘ deklariert, wobei das Attribut mit dem Hinweis-Text 'do not call this POU directly‘ versehen wird. Des Weiteren wird beiden Funktionsbausteinen eine beispielhafte Methode hinzugefügt.

Die beiden Funktionsbausteine werden je einmal instanziiert und direkt aufgerufen. Auch die Beispielmethoden werden für die FB-Instanzen aufgerufen.

Beim Übersetzen dieses Programms wird für den direkten Aufruf der Instanz fbDirectCallNotAllowed ein entsprechender Kompilierfehler erzeugt (in diesem Fall: „do not call this POU directly“). Die drei anderen Aufrufe werden vom Compiler nicht unterbunden.

Funktionsbaustein FB_DirectCallAllowed:

FUNCTION_BLOCK FB_DirectCallAllowed
VAR
END_VAR
 
METHOD SampleMethod
VAR_INPUT
END_VAR

Funktionsbaustein FB_DirectCallNotAllowed:

{attribute 'no_explicit_call' := 'do not call this POU directly'} 
FUNCTION_BLOCK FB_DirectCallNotAllowed
VAR
END_VAR
METHOD SampleMethod
VAR_INPUT
END_VAR

Programm MAIN:

PROGRAM MAIN
VAR
    fbDirectCallAllowed     : FB_DirectCallAllowed;
    fbDirectCallNotAllowed  : FB_DirectCallNotAllowed;
END_VAR
fbDirectCallAllowed();                  // => OK
fbDirectCallAllowed.SampleMethod();     // => OK
 
fbDirectCallNotAllowed();               // => NOK: generates compile error “do not call this POU directly”
fbDirectCallNotAllowed.SampleMethod();  // => OK