FB_Init, FB_Reinit und FB_ExitMethoden
Allgemeine Aufgabe der Methoden
Sie können die Methoden FB_Init und FB_Reinit explizit einsetzen, um die Initialisierung von Funktionsbausteinvariablen sowie das Verhalten beim Verlassen von Funktionsbausteinen zu beeinflussen.
In diesem Kapitel werden diese Methoden sowie deren Anwendung und Wirkung in unterschiedlichen Situationen beschrieben, in denen eine Variableninitialisierung durchgeführt werden muss.
Die Methode FB_Init ist standardmäßig implizit verfügbar. Sie wird von EcoStruxure Machine Expert zur Initialisierung eines Funktionsbausteins oder einer Struktur verwendet.
Um die Initialisierung zu beeinflussen, können Sie die Methode FB_Init explizit deklarieren, indem Sie den betreffenden Standard-Initialisierungscode erweitern. Dadurch können Sie den Rückgabewert auswerten.
Die Methode FB_Reinit muss explizit deklariert werden.
Wenn die Methode FB_Reinit verfügbar ist, wird sie nach der Kopie der Instanz des entsprechenden Funktionsbausteins (im Rahmen einer Online-Änderung nach Änderungen an der Funktionsbausteindeklaration) aufgerufen. Sie reinitialisiert dann das neue Instanzmodul. Der Rückgabewert wird nicht ausgewertet. Um eine Reinitialisierung des Basisfunktionsbausteins zu erreichen, müssen Sie FB_Reinit explizit für den betreffenden Funktionsbaustein aufrufen. Dadurch können Sie den Rückgabewert auswerten.
Die Methode FB_Exit muss explizit deklariert werden.
Wenn eine Implementierung vorhanden ist, wird die Methode aufgerufen, bevor die Steuerung den Code der Funktionsbausteininstanz entfernt (impliziter Aufruf). Der Rückgabewert wird nicht ausgewertet.
In den folgenden Abschnitten werden Anwendungsfälle dieser Metoden für unterschiedliche Betriebsbedingungen vorgestellt.
Beim Download einer Anwendung in eine Steuerung, die sich im Standardzustand befindet, werden die Speicherpositionen der Variablen in den gewünschten Initialzustand gesetzt. Die Datenbereiche der Funktionsbausteine werden auf die gewünschten Werte eingestellt. Sie können diesen Prozess beeinflussen, indem Sie FB_Init explizit für die Funktionsbausteine und Strukturen im Programmcode der Anwendung implementieren.
Wenn die Methodenparameter bInCopyCode auf FALSE und die Methodenparameter bInitRetains auf TRUE stehen, dann verweist das darauf, dass ein erster Download durchgeführt wird.
Wenn der BefehlOnline Change ausgeführt wird, können die Methoden FB_Exit, FB_Init und FB_Reinit zur Beeinflussung der Initialisierung von Funktionsbausteinen verwendet werden.
Im Rahmen einer Online-Änderung werden die an der Anwendung im Offline-Modus vorgenommenen Änderungen in die Steuerung heruntergeladen. Die Instanzen der Funktionsbausteine werden wie folgt mit den neuen Instanzen aktualisiert:
Wenn Sie nur Änderungen am Implementierungsteil eines Funktionsbausteins und nicht am Deklarationsteil vorgenommen haben, werden die Datenbereiche nicht ersetzt. Die Methoden FB_Init, FB_Reinit und FB_Exit werden nicht aufgerufen.
Wenn Sie Änderungen am Deklarationsteil eines Funktionsbausteins vorgenommen haben, wird der im Abschnitt FB_Reinitbeschriebene Kopierprozess durchgeführt, sobald der Befehl Online Change ausgeführt wird. Im Dialogfeld Applikationsinformation wird eine Liste der seit dem letzten Download geänderten Objekte bereitgestellt. Dieses Dialogfeld wird angezeigt, wenn Sie auf die Schaltfläche Details... in dem Dialogfeld klicken, in dem Sie die Option Mit Online Change einloggen auswählen.
Wenn die Methodenparameter bInCopyCode von FB_Init und FB_Reinit auf TRUE und die Methodenparameter bInitRetains auf FALSE stehen, dann bedeutet das, dass eine Online-Änderung durchgeführt wird.
Aufrufe im Rahmen einer Online-Änderung
Die Ausführung des Befehls Online Change kann zu einer Änderung des Inhalts von Adressen führen.
|
UNGÜLTIGER ZEIGER |
Überprüfen Sie die Gültigkeit der Zeiger, wenn Sie Zeiger für Adressen verwenden und den Befehl „Online Change“ ausführen. |
Die Nichtbeachtung dieser Anweisungen kann Verletzungen oder Sachschäden zur Folge haben. |
Im Rahmen einer Online-Änderung werden nacheinander folgende Aufrufe ausgeführt:
Schritt |
Aktion |
Kommentar |
---|---|---|
1 |
FB_Exit |
old_inst.FB_Exit(bInCopyCode := TRUE); FB_Exit wird aufgerufen, um vor dem Start des Kopierprozesses einen Breinigungsprozess auszulösen. Die Methode bereitet die Daten auf den nächsten Kopierprozess vor und beeinflusst den Zustand der neuen Instanz. Andere Teile der Anwendung werden über die im Speicher vorgenommenen Positionsänderungen informiert. Denken Sie daran, dass die Variablen des Typs POINTER bzw. REFERENCE bei einer Online-Änderung ihre Werte beibehalten und deshalb nach Abschluss des Vorgangs unter Umständen nicht mehr auf die gewünschen Speicherpositionen verweisen. Variablen des Typs INTERFACE werden bei einer Online-Änderung angepasst. Externe Ressourcen, z. B. Socket-, Datei- oder andere Handles, können von der neuen Instanz übernommen werden, häufig ohne dass bei der Online-Änderung eine separate Handhabung erforderlich wäre, vorausgesetzt, die Systemressourcen sind nicht vom Kopierprozess im Rahmen der Online-Änderung betroffen. Nach Bedarf muss das über Init- oder Reinit-Implementierungen verwaltet werden. |
2 |
FB_Init |
new_inst.FB_Init(bInitRetains := FALSE, bInCopyCode := TRUE); FB_Init kann zur Durchführung spezifischer Vorgänge im Rahmen einer Online-Änderung verwendet werden. Dabei kann es sich beispielsweise um eine angemessene Initialisierung von Variablen an den neuen Speicherpositionen oder um die Bereitstellung von Informationen zur neuen Position bestimmter Variablen für andere Anwendungsteile handeln. |
3 |
Kopiervorgang copy |
copy(&old_inst, &new_inst); Die vorhandenen Werte bleiben unverändert. Zu diesem Zweck werden sie aus der alten in die neue Instanz kopiert. |
4 |
FB_Reinit |
new_inst.FB_Reinit(); Die Methode FB_Reinit wird nach dem Kopiervorgang aufgerufen. Sie stellt die Variablen der Funktionsbausteininstanz auf die definierten Werte ein. Sie können beispielsweise Variablen an den neuen Speicherpositionen initialisieren oder Informationen zur neuen Position bestimmter Variablen für andere Anwendungsteile bereitstellen. Implementieren Sie die Methode FB_Reinit unabhängig von einer Online-Änderung, da sie von der Anwendung jederzeit aufgerufen werden kann, sobald ein Funktionsbaustein in seinen ursprünglichen Zustand zurückgesetzt werden muss. |
HINWEIS: Wenn Sie das Pragma {attribute no_copy} zu einer Variablen eines Funktionsbausteins hinzufügen, wird die betreffende Variable bei der Online-Änderung nicht kopiert, sondern lediglich initialisiert.
Download einer aktualisierten Anwendung
Wenn Sie eine Anwendung in eine Steuerung herunterladen, auf der bereits eine Anwendung ausgeführt wird, wird die vorhandene Anwendung ersetzt. Sie können z. B. die Methode FB_Exit heranziehen, um einer externen Ressource (beispielsweise Socket- oder Datei-Handles) einen vorgegebenen Zustand zuzuweisen.
Wenn die Methodenparameter bInCopyCode und bInitRetains auf FALSE stehen, verweist das darauf, dass eine aktualisierte Anwendung heruntergeladen wird.
Bevor der erste Zyklus der Tasks einer Anwendung ausgeführt wird, werden die Zuweisungen der Initialwerte verarbeitet.
Beispiel:
T1 : TON := (PT:=t#500ms);
Die Zuweisungen werden nach dem Aufruf von FB_Init ausgeführt. Um die Wirkung dieser Zuweisungen prüfen zu können, verknüpfen Sie das Pragma {attribute call_after_init} mit einem Funktionsbaustein und einer Methode eines Funktionsbausteins (z. B. die aufgerufene MyInit). Fügen Sie dieses Attribut über dem Deklarationsteil des Funktionsbausteins und über dem Deklarationsteil der entsprechenden Methode ein. Verknüpfen Sie das Pragma ebenfalls mit Funktionsbausteinen, die andere Funktionsbausteine erweitern, die das Pragma {attribute call_after_init} verwenden. Dabei ist es von Vorteil, der zugehörigen Methode denselben Namen, dieselbe Signatur und dasselbe Attribut zuzuweisen. Rufen Sie dazu SUPER^.MyInit auf. Wählen Sie den gewünschten Methodennamen aus (außer FB_Init, FB_Reinit und FB_Exit). Die Methode wird nach der Verarbeitung der Initialwert-Zuweisungen und vor dem Start der Tasks einer Anwendung aufgerufen.
HINWEIS: Wenn der explizit definierte Initialisierungscode ausgeführt wird, dann wurde der Funktionsbaustein bereits vollständig über den impliziten Initialisierungscode initialisiert. Aus diesem Grund darf SUPER^.FB_Init nicht aufgerufen werden.
Schnittstelle der Methode FB_Init
METHOD FB_Init : BOOL
VAR_INPUT
bInitRetains : BOOL; // TRUE: the retain variables are initialized (reset warm /reset cold)
bInCopyCode : BOOL; // TRUE the instance will be copied to the copy-code afterward (online change)
END_VAR
Der Rückgabewert wird nicht verwendet.
In einer Methode FB_Init können zusätzliche Funktionsbausteineingänge deklariert werden. Weisen Sie die Eingänge in der Deklaration einer Funktionsbausteininstanz zu.
Beispiel: Methode FB_Init für einen Funktionsbaustein serialdevice:
METHOD PUBLIC FB_Init : BOOL
VAR_INPUT
bInitRetains : BOOL; // Initialization of the retain variables
bInCopyCode : BOOL; // Instance is copied to copy-code
iCOMnum : INT; // additional input: number of the COM interface that is to be observed
END_VAR
Instanziierung des Funktionsbausteins serialdevice:
com1: serialdevice (iCOMnum:=1);
com0: serialdevice (iCOMnum:=0);
Schnittstelle der Methode FB_Reinit
METHOD FB_Reinit : BOOL
Schnittstelle der Methode FB_Exit
Der Parameter bInCopyCode. ist obligatorisch.
METHOD FB_Exit : BOOL
VAR_INPUT
bInCopyCode : BOOL; // TRUE: the exit method is called in order to leave the instance which will be copied afterwards (online change).
END_VAR
Abgeleitete Funktionsbausteine
Wenn ein Funktionsbaustein aus einem anderen Funktionsbaustein abgeleitet wird, dann muss die Methode FB_Init des abgeleiteten Funktionsbausteins dieselben Parameter definieren wie die Methode FB_Init des Basisfunktionsbausteins. Sie können jedoch zusätzliche Parameter hinzufügen, um eine spezielle Initialisierung für diese Instanz zu implementieren.
Beispiel für die Aufrufreihenfolge der abgeleieteten Funktionsbausteine für FB_Exit und FB_Init
Für die in dieser Liste genannten POUs wird Folgendes vorausgesetzt: SubFB EXTENDS MainFB und SubSubFB EXTENDS SubFB:
Schritt |
Aktion |
---|---|
1 |
fbSubSubFb.FB_Exit(...); |
2 |
fbSubFb.FB_Exit(...); |
3 |
fbMainFb.FB_Exit(...); |
4 |
fbMainFb.FB_Init(...); |
5 |
fbSubFb.FB_Init(...); |
6 |
fbSubSubFb.FB_Init(...); |