Retain-Variablen behalten ihren Wert nach einen Warmstart. Der Grad der Werteerhaltung ist bei persistenten Variablen aber höher.
Für die Verlängerung der Lebensdauer ist ein spezieller nichtflüchtiger Speicherbereich auf der Steuerung nötig, beispielsweise als NVRAM oder USV. Das Sichern der Retain-Variablen in einem solchen Speicher erfordert keinen zusätzlichen Zeitbedarf, was ein Vorteil gegenüber dem Datenerhalt mit Persistence Manager ist. Wenn die Steuerung keine Hardware-Unterstützung bietet, werden die Daten üblicherweise in einer Datei gespeichert. Dann bleiben die Daten zwar erhalten, wenn Sie die Steuerung korrekt herunterfahren. Bei einem Stromausfall oder einem "Stecker ziehen" kommt es aber zum Datenverlust.
Deklaration
Um eine Retain-Variable zu deklarieren, fügen Sie einer Variablendeklaration das Schlüsselwort
RETAIN
hinzu.
Verhalten
Werterhalt bei
-
Unkontrolliertem Beenden
-
Aufruf des Befehls „Reset warm“
Neuinitialisierung bei
-
Erneutem Download der Applikation
-
Aufruf des Befehls „Reset kalt“ (im Gegensatz zu persistenten Variablen)
-
Aufruf des Befehls „Reset Ursprung“
Wenn Sie eine Applikation neu starten, werden deren Variablen üblicherweise mit
einem explizit vorgegebenen Initialwerten oder mit einem Standardwert initialisiert.
Variablen, die mit dem Schlüsselwort RETAIN
gekennzeichnet sind, werden zielsystemabhängig in einem eigenen Speicherbereich verwaltet
und behalten ihren Wert. Die Variablen sind so beispielsweise gegen Stromausfall geschützt.
Sie können Retain-Variablen also bei einem Stückzähler in einer Fertigungsanlage
anwenden, um auch nach einem Stromausfall weiterzählen zu können.
Speicherlokation von persistenten Funktionsbaustein-Instanzen
Funktionsbaustein-Instanzen liegen am Stück im Speicher. Das ist notwendig, damit
der gleiche Code auf verschiedenen Instanzen arbeiten kann. Wenn nun eine Variable
in einem Funktionsbaustein mit RETAIN
gekennzeichnet ist, dann wird jede Instanz des Funktionsbausteins mit allen Variablen
gesichert. Auch die Variablen des Funktionsbausteins, die nicht so gekennzeichnet
sind. Nichtflüchtiger Speicher steht aber nicht in gleichem Maß zur Verfügung wie
Arbeitsspeicher.
Ein Funktionsbaustein, der als Variable einen Pointer auf eine Instanz im SRAM hat, wird nicht im gesicherten Speicher abgelegt.
Import von CoDeSys V2.3-Projekten
Wenn Sie ein CoDeSys V2.3-Projekt öffnen, um es in CODESYS V3 zu importieren, bleiben die Deklarationen von Retain-Variablen erhalten und sind unverändert wirksam.