Persistente Variablen werden in der persistenten globalen Variablenliste im Deklarationsabschnitt
VAR_GLOBAL RETAIN PERSISTENT
deklariert. Für Variablen, die außerhalb des Persistenzeditors mit dem Schlüsselwort
PERSISTENT
gekennzeichnet sind, werden dort Instanzpfade hinzugefügt.
Ab CODESYS-Version 3.3.0.1 bewirkt eine Variablendeklaration mit PERSISTENT RETAIN
dasselbe wie mit RETAIN PERSISTENT
oder PERSISTENT
.
Syntax der Deklaration in der globalen persistenten Variablenliste PersistentVars
VAR_GLOBAL PERSISTENT RETAIN <identifier> : <data type> (:= <initialization>)?; <instance path to POU variable> END_VAR
Syntax der Deklaration in POUs
<scope> PERSISTENT RETAIN <identifier> : <data type> ( := <initialization> )?; // ( ... )? : Optional END_VAR <scope> : VAR | VAR_INPUT | VAR_OUTPUT | VAR_IN_OUT | VAR_STAT | VAR_GLOBAL
Eine Zuweisung von Ein-, Ausgabe- oder Speicheradressen mit dem Schlüsselwort AT
ist nicht erlaubt.
Verwenden Sie in persistenten Variablenlisten nie den Datentyp POINTER TO
. Bei erneutem Download der Applikation können sich nämlich deren Adressen verändern.
Im Meldungsfenster werden entsprechende Compilerwarnungen ausgegeben.
Wenn Sie die Namen oder die Datentypen einer remanenten Variablen häufig ändern,
ist es besser, diese als Retain-Variablen nur mit dem Schlüsselwort RETAIN
zu deklarieren.




HINWEIS

Vermeiden Sie das Einfügen von Instanzpfaden, da in diesem Fall doppelt so viel Speicher verbraucht wird und eine erhöhte Zykluszeit auftreten kann. Deklarieren Sie stattdessen Variablen direkt in der Liste der persistenten Variablen.
Beispiel
Deklaration in der persistenten Variablenliste PersistentVars
:
{attribute 'qualified_only'} VAR_GLOBAL PERSISTENT RETAIN g_iCounter : INT; // Generated instance path of persistent variable PLC_PRG.fb_A.iPersistentCounter_A: INT; END_VAR
Deklaration im Funktionsbaustein FB_A
:
FUNCTION_BLOCK FB_A VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR PERSISTENT iPersistentCounter_A : INT; END_VAR
Deklaration im Programm PLC_PRG
:
VAR fb_A1 : FB_A; END_VAR
Mögliche Deklarationsstellen
Direkt in der persistenten globalen Variablenliste |
Variable ist persistent und liegt im geschützten Speicherbereich. |
Lokal in einem Programm mit Instanzpfad in der persistenten Variablenliste Lokal in einem Funktionsbaustein mit Instanzpfad in der persistenten Variablenliste |
Variable ist persistent und liegt im geschützten Speicherbereich und im Speicher (Doppelbelegung). |
Nur lokal in einem Programm Nur lokal in einem Funktionsbaustein |
Variable ist nicht persistent. Im Meldungsfenster wird eine Warnung ausgegeben. Tipp: Wählen Sie den Befehl „Deklarationen Alle Instanzpfade hinzufügen“, um die Variablen in die persistente Variablenliste aufzunehmen. |
Lokal in einer Funktion |
Diese Deklaration hat keine Auswirkung. Die Variable ist nicht persistent. |
Wählen Sie im Persistenzeditor den Befehl „Deklarationen Alle Instanzpfade hinzufügen“, wenn lokale Variablen mit PERSISTENT
gekennzeichnet sind.
Vermeiden Sie möglichst, Variablen, die lokal in einem Funktionsbaustein deklariert
sind, mit PERSISTENT
zu kennzeichnen. Denn dabei wird die Funktionsbaustein-Instanz vollständig im remanenten
Speicher abgelegt und nicht nur die gekennzeichnete Variable.