Skip to main content

Attribut: no_virtual_actions

Das Pragma wird für Funktionsbausteine angewendet, die von einem in AS implementierten Funktionsbaustein abgeleitet werden und den grundsätzlichen AS-Ablauf dieser Basisklasse nutzen. Die daraus aufgerufenen Aktionen zeigen dasselbe virtuelle Verhalten wie Methoden. Dies bedeutet, dass die Implementierungen der Aktionen in der Basisklasse von der abgeleiteten Klasse durch eigene, spezifische Implementierungen ersetzt werden können.

Wenn Sie das Pragma auf die Basisklasse anwenden, dann sind ihre Aktionen vor einem Überladen geschützt.

Syntax:

{attribute 'no_virtual_actions'}

Einfügeort: Oberste Zeile im Deklarationsteil des Funktionsbausteins

Beispiel 10.

Der Funktionsbaustein POU_SFC ist die Basisklasse für den abgeleiteten Funktionsbaustein POU_child. Mit der speziellen Variablen SUPER ruft die abgeleitete Klasse POU_child den in AS geschriebenen Ablauf der Basisklasse auf.

_cds_img_pragma_virtual1.png
_cds_img_attribute_nva_ex1.png

Die beispielhafte Implementierung dieses Ablauf ist beschränkt auf den Initialschritt gefolgt von einem einzigen Schritt mit angebundener Schrittaktion ActiveAction. Dieser Schritt mit angebundener Schrittaktion übernimmt die Belegung der Ausgangsvariablen.

an_int := an_int+1;    // Counting the action calls
test_act := 'father_action';
METH();              // Call of the method METH in order to set the string variable test_meth

Im Fall der abgeleiteten Klasse POU_child wird die Schrittaktion durch eine spezielle Implementierung von ActiveAction ersetzt. Active Action unterscheidet sich vom Original nur durch Zuweisung der Zeichenkette 'child_action' anstelle von 'father_action' an die Variable test_act.

Ebenso wird die Methode METH, die in der Basisklasse der Variablen test_meth den String 'father_method' zuweist, dahingehend überschrieben, dass test_meth nun den Wert 'child_method' erhält.Das Hauptprogramm PLC_PRG ruft eine Instanz des Funktionsbausteins POU_child namens Child auf. Wie erwartet spiegelt der Wert der Strings den Aufruf von Aktion und Methode der abgeleiteten Klasse wieder:

_cds_img_pragma_virtual3.png

Nun stellen Sie der Basis jedoch das Pragma {attribute 'no_virtual_actions'} voran:

{attribute 'no_virtual_actions'}

FUNCTION_BLOCK POU_SFC...

Dadurch ändert sich das Verhalten: Während für die Methode METH weiterhin die Implementierung der abgeleiteten Klasse herangezogen wird, resultiert der Aufruf der Schrittaktion nun in einem Aufruf der Aktion ActiveAction der Basisklasse. Daher erhält test_act nun den Wert 'father_action':

_cds_img_pragma_virtual4.png