Instanzen von Funktionsbausteinen können im Selbsthaltebereich abgelegt werden, das heißt, alle Zustände der Funktionsbausteinvariablen bleiben nach einem Stromausfall erhalten. Dazu muss die Instanz im POE-Kopf als Klasse VAR_RETAIN oder VAR_EXTERNAL_RETAIN eingetragen sein. Im Fall von VAR_EXTERNAL_RETAIN muss die Instanz zuvor als Klasse VAR_GLOBAL_RETAIN in der globalen Variablenliste deklariert werden.
Wird für eine Instanz die Klasse VAR_RETAIN oder VAR_EXTERNAL_RETAIN verwendet, werden vom Compiler für die Nichtselbsthaltevariablen der Klassen VAR, VAR_INPUT, VAR_OUTPUT oder VAR_IN_OUT der Instanz Adressen aus dem Selbsthaltebereich vergeben und nur nach dem Übertragen des Programms initialisiert. Unterinstanzen der Klasse VAR werden wie Unterinstanzen der Klasse VAR_RETAIN behandelt. Die Adressen für sonstige Variablen oder Unterinstanzen der Klassen VAR_RETAIN, VAR_OUTPUT_RETAIN, VAR_EXTERNAL oder VAR_EXTERNAL_RETAIN werden wie für Instanzen der Klasse VAR oder VAR_EXTERNAL vergeben. Die Werte der Variablen aus den Klassen VAR_CONSTANT und VAR_EXTERNAL_CONSTANT werden als konstante Werte in den Programmcode eingetragen.
Wird für eine Instanz die Klasse VAR oder VAR_EXTERNAL verwendet, hängt es von der Deklaration der Variablen oder Unterinstanzen des Funktionsbausteins ab, ob diese als selbsthaltend (VAR_RETAIN) angenommen werden oder nicht (VAR).
POE-Kopf des Programms Prog
Ein Programm Prog instanziert den Funktionsbaustein FB1 zweimal:
POE-Kopf des Funktionsbausteines FB1
Der POE-Kopf des Funktionsbausteines FB1 hat die nachfolgenden Einträge: Im Funktionsbaustein FB1 wird wiederum auf zwei Instanzen des Funktionsbausteins FB2 zugegriffen.
POE-Kopf des Funktionsbausteines FB2
Der POE-Kopf des Funktionsbausteines FB2 hat die nachfolgenden Einträge:
Speicherverteilung des Programms Prog: