Variable: PERSISTENT Permanentlink

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 dieselbe Wirkung wie mit ‎RETAIN PERSISTENT‎ oder ‎PERSISTENT‎.

In einem Funktionsblock darf es keine Variablendeklaration geben, die ausschließlich ‎PERSISTENT‎ enthält, sondern nur solche, die ‎PERSISTENT RETAIN‎ oder ‎RETAIN PERSISTENT‎ enthalten.

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

HINWEIS
HINWEIS
HINWEIS

HINWEIS

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