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:

Situation:

Annahme - Fall 1:

Aufrufabfolge:

Die Aufrufabfolge der Methoden FB_exit, FB_init und FB_reinit für die Funktionsbausteininstanz fbSubSub ist dann wie folgt:

  1. Impliziter Aufruf von FB_SubSub.FB_exit(TRUE) für fbSubSub
  2. Impliziter Aufruf von FB_Sub.FB_exit(TRUE) für fbSubSub
  3. Impliziter Aufruf von FB_Base.FB_exit(TRUE) für fbSubSub
  4. Impliziter Aufruf von FB_Base.FB_init(FALSE, TRUE) für fbSubSub
  5. Impliziter Aufruf von FB_Sub.FB_init(FALSE, TRUE) für fbSubSub
  6. Impliziter Aufruf von FB_SubSub.FB_init(FALSE, TRUE) für fbSubSub
  7. Impliziter Aufruf von FB_SubSub.FB_reinit() für fbSubSub

Annahme – Fall 2:

Aufrufabfolge:

Die Aufrufabfolge der Methoden FB_exit, FB_init und FB_reinit für die Funktionsbausteininstanz fbSubSub ist dann wie folgt:

  1. Impliziter Aufruf von FB_SubSub.FB_exit(TRUE) für fbSubSub
  2. Impliziter Aufruf von FB_Sub.FB_exit(TRUE) für fbSubSub
  3. Impliziter Aufruf von FB_Base.FB_exit(TRUE) für fbSubSub
  4. Impliziter Aufruf von FB_Base.FB_init(FALSE, TRUE) für fbSubSub
  5. Impliziter Aufruf von FB_Sub.FB_init(FALSE, TRUE) für fbSubSub
  6. Impliziter Aufruf von FB_SubSub.FB_init(FALSE, TRUE) für fbSubSub
  7. Impliziter Aufruf von FB_SubSub.FB_reinit() für fbSubSub
  8. Expliziter Aufruf von FB_Sub.FB_reinit() für fbSubSub
  9. Expliziter Aufruf von FB_Base.FB_reinit() für fbSubSub