Verhalten bei abgeleiteten Bausteinen
Beachten Sie bei Verwendung der Methoden FB_init, FB_reinit und FB_exit im Kontext von abgeleiteten Bausteinen die folgenden Hinweise.
FB_init bei abgeleiteten Bausteinen
Wenn ein Funktionsbaustein von einem anderen Funktionsbaustein abgeleitet ist, dann wird für diesen Funktionsbaustein automatisch die FB_init-Methode des Basisfunktionsbausteins ausgeführt. Falls die FB_init-Methode des abgeleiteten Funktionsbausteins explizit hinzugefügt wird, wird diese im Anschluss an die FB_init-Methode des Basisfunktionsbausteins ausgeführt (siehe Verhalten bei abgeleiteten Bausteinen).
Wenn die FB_init-Methode des abgeleiteten Funktionsbausteins in expliziter Form vorhanden sein soll, muss diese dieselben Parameter definieren wie die FB_init-Methode des Basisfunktionsbausteins. Sie können jedoch weitere Parameter hinzufügen, um für die abgeleitete Instanz eine spezielle Initialisierung einzurichten.
FB_reinit bei abgeleiteten Bausteinen
Um eine Reinitialisierung der Basisimplementierung des Funktionsbausteins zu erreichen, müssen Sie FB_reinit explizit für den Basisbaustein aufrufen (über SUPER^.FB_reinit()
). Dabei können Sie den Rückgabewert auswerten.
FB_exit bei abgeleiteten Bausteinen
Wenn ein Funktionsbaustein von einem anderen Funktionsbaustein abgeleitet ist, dann wird für diesen Funktionsbaustein automatisch die FB_exit-Methode des Basisfunktionsbausteins ausgeführt. Falls die FB_exit-Methode des abgeleiteten Funktionsbausteins explizit hinzugefügt wird, wird diese zuerst ausgeführt und anschließend die FB_exit-Methode des Basisfunktionsbausteins (siehe Verhalten bei abgeleiteten Bausteinen).
Beispiel für die Aufrufabfolge bei abgeleiteten Bausteinen
Die Funktionsbausteine FB_Base, FB_Sub und FB_SubSub leiten voneinander ab. Dabei gilt:
- FB_Sub EXTENDS FB_Base
- FB_SubSub EXTENDS FB_Sub
Situation:
- Alle drei Funktionsbausteine verfügen jeweils über eine eigene FB_init-, FB_reinit- und FB_exit-Methode.
- Der Baustein FB_SubSub ist instanziiert. Dem Baustein wird per Online-Change eine zusätzliche Variable hinzugefügt.
Annahme - Fall 1:
- Es wird keine Reinitialisierung der Basisimplementierung gewünscht. Das heißt, dass in der Methode FB_SubSub.FB_reinit der Aufruf SUPER^.FB_reinit() nicht vorhanden ist.
Aufrufabfolge:
Die Aufrufabfolge der Methoden FB_exit, FB_init und FB_reinit für die Funktionsbausteininstanz fbSubSub ist dann wie folgt:
Impliziter Aufruf von FB_SubSub.FB_exit(TRUE) für fbSubSub
Impliziter Aufruf von FB_Sub.FB_exit(TRUE) für fbSubSub
Impliziter Aufruf von FB_Base.FB_exit(TRUE) für fbSubSub
Impliziter Aufruf von FB_Base.FB_init(FALSE, TRUE) für fbSubSub
Impliziter Aufruf von FB_Sub.FB_init(FALSE, TRUE) für fbSubSub
Impliziter Aufruf von FB_SubSub.FB_init(FALSE, TRUE) für fbSubSub
Impliziter Aufruf von FB_SubSub.FB_reinit() für fbSubSub
Annahme – Fall 2:
- Es wird eine Reinitialisierung der Basisimplementierung gewünscht. Das heißt, dass in den Methoden FB_SubSub.FB_reinit und FB_Sub.FB_reinit der Aufruf SUPER^.FB_reinit() vorhanden ist.
Aufrufabfolge:
Die Aufrufabfolge der Methoden FB_exit, FB_init und FB_reinit für die Funktionsbausteininstanz fbSubSub ist dann wie folgt:
Impliziter Aufruf von FB_SubSub.FB_exit(TRUE) für fbSubSub
Impliziter Aufruf von FB_Sub.FB_exit(TRUE) für fbSubSub
Impliziter Aufruf von FB_Base.FB_exit(TRUE) für fbSubSub
Impliziter Aufruf von FB_Base.FB_init(FALSE, TRUE) für fbSubSub
Impliziter Aufruf von FB_Sub.FB_init(FALSE, TRUE) für fbSubSub
Impliziter Aufruf von FB_SubSub.FB_init(FALSE, TRUE) für fbSubSub
Impliziter Aufruf von FB_SubSub.FB_reinit() für fbSubSub
Expliziter Aufruf von FB_Sub.FB_reinit() für fbSubSub
Expliziter Aufruf von FB_Base.FB_reinit() für fbSubSub