Skip to main content

Variable: PERSISTENT

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.

Tipp

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.

Tipp

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.

Tipp

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.

Wichtig

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 96. 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

Beschreibung

Direkt in der persistenten globalen Variablenliste

Die 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

Die Variable ist persistent und liegt im geschützten Speicherbereich und im Speicher (Doppelbelegung).

Nur lokal in einem Programm

Nur lokal in einem Funktionsbaustein

Die 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

Eine solche Deklaration hat keine Auswirkung. Die Variable ist nicht persistent.

Tipp

Wählen Sie im Persistenzeditor den Befehl Deklarationen → Alle Instanzpfade hinzufügen, wenn lokale Variablen mit PERSISTENT gekennzeichnet sind.

Tipp

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.