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:

Der Funktionsbaustein FB_Sample ist die Basisklasse für den abgeleiteten Funktionsbaustein FB_SampleExt.

Mit der speziellen Variablen SUPER ruft die abgeleitete Klasse FB_SampleExt den in AS geschriebenen Ablauf der Basisklasse auf.

Attribut 'no_virtual_actions' 1:

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

nAN := nAn + 1; // Counting the action calls 
sTestAct:='father_action'; 
METH1();  // Call of the method METH1 in order to set the string variable sTestMeth

Im Fall der abgeleiteten Klasse FB_SampleExt wird die Schrittaktion durch eine spezielle Implementierung von ACT1 ersetzt. ACT1 unterscheidet sich vom Original nur durch Zuweisung der Zeichenkette 'child_action' anstelle von 'father_action' an die Variable sTestAct.

Ebenso wird die Methode METH1, die in der Basisklasse der Variablen sTestMeth den String 'father_method' zuweist, dahingehend überschrieben, dass sTestMeth nun den Wert 'child_method' erhält. Das Hauptprogramm MAIN ruft eine Instanz des Funktionsbausteins FB_SampleExt namens „fbSampleExt“ auf. Wie erwartet spiegelt der Wert der Strings den Aufruf von Aktion und Methode der abgeleiteten Klasse wider:

Attribut 'no_virtual_actions' 2:

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

{attribute 'no_virtual_actions'} 
FUNCTION_BLOCK FB_Sample... 

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

Attribut 'no_virtual_actions' 3: