Persistente Variablen werden im Deklarationsabschnitt VAR_GLOBAL RETAIN PERSISTENT
in der Liste der persistenten globalen Variablen deklariert. Für Variablen, die außerhalb
des Persistenzeditors mit dem Schlüsselwort PERSISTENT
gekennzeichnet sind, werden dort Instanzpfade hinzugefügt.
Ab CODESYS V3.3.0.1 hat eine Variablendeklaration mit PERSISTENT RETAIN
die gleiche Wirkung wie mit RETAIN PERSISTENT
oder PERSISTENT
.
Syntax der Deklaration in der Liste der globalen persistenten Variablen PersistentVars
VAR_GLOBAL PERSISTENT RETAIN <identifier> : <data type> (:= <initialization>)?; <instance path to POU variable> END_VAR
Syntax der Erklärung in POEs
<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 Eingängen, Ausgängen oder Speicheradressen mit dem Schlüsselwort
AT
ist nicht zulässig.
Verwenden Sie niemals den Datentyp POINTER TO
in persistenten Variablenlisten. Wenn die Anwendung erneut heruntergeladen wird,
könnten sich die Adressen ändern. Die entsprechenden Compiler-Warnungen werden im
Meldungsfenster angezeigt.
Wenn Sie die Namen oder Datentypen von remanenten Variablen häufig ändern, ist es
besser, sie nur mit dem Schlüsselwort RETAIN
als Retain-Variablen zu deklarieren.




HINWEIS

Vermeiden Sie das Einfügen von Instanzpfaden, da in diesem Fall doppelt so viel Speicher verwendet wird und eine höhere Zykluszeit auftreten kann. Deklarieren Sie stattdessen Variablen in der Liste der persistenten Variablen.
Beispiel
Deklaration in der Liste der persistenten Variablen 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
Erklärung im Funktionsblock FB_A
FUNCTION_BLOCK FB_A VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR PERSISTENT iPersistentCounter_A : INT; END_VAR
Erklärung im Programm PLC_PRG
VAR fb_A1 : FB_A; END_VAR
Mögliche Meldeorte |
Beschreibung |
---|---|
Direkt in der Liste der persistenten globalen Variablen |
Die Variable ist persistent und befindet sich im geschützten Speicherbereich. |
lokal in einem Programm mit einem Instanzpfad in der Liste der persistenten Variablen lokal in einem Funktionsblock mit einem Instanzpfad in der Liste der persistenten Variablen |
Die Variable ist persistent und befindet sich im geschützten Speicherbereich und im Speicher (doppelte Zuordnung). |
Nur lokal in einem Programm Nur lokal in einem Funktionsblock |
Die Variable ist nicht persistent. Im Meldungsfenster wird eine Warnung angezeigt. TIPP: Klicken Sie auf „Declarations Add All Instance Paths“ um die Variablen in die Liste der persistenten Variablen zu importieren. |
Örtlich in einer Funktion |
Diese Art von Erklärung hat keine Wirkung. Die Variable ist nicht persistent. |
Klicken Sie im Persistenzeditor auf „Deklarationen Alle Instanzpfade hinzufügen“, wenn lokale Variablen als PERSISTENT
markiert sind.
Vermeiden Sie nach Möglichkeit die Kennzeichnung von Variablen als PERSISTENT
, die in einem Funktionsblock deklariert werden. Der Grund dafür ist, dass die Instanz
des Funktionsblocks vollständig im remanenten Speicher gespeichert wird und nicht
nur die markierte Variable.