Remanente Variablen - PERSISTENT, RETAIN

Remanente Variablen können ihren Wert über die übliche Programmlaufzeit hinaus behalten. Sie können remanente Variablen als RETAIN-Variablen oder noch strenger als PERSISTENT-Variablen im SPS-Projekt deklarieren.

Voraussetzung für die volle Funktionalität von RETAIN-Variablen ist ein entsprechender Speicherbereich auf der Steuerung (NovRam). Persistente Variablen werden nur beim Shutdown von TwinCAT geschrieben. Dazu bedarf es in der Regel einer entsprechenden USV. Ausnahme: Persistente Variablen können auch mit dem Baustein FB_WritePersistentData geschrieben werden.

Wenn es den entsprechenden Speicherbereich nicht gibt, gehen bei einem Stromausfall auch die Werte von RETAIN- oder PERSISTENT-Variablen verloren.

Remanente Variablen - PERSISTENT, RETAIN 1:

Die AT-Deklaration dürfen Sie nicht in Kombination mit VAR RETAIN oder VAR PERSISTENT verwenden.

Persistente Variablen

Sie deklarieren persistente Variablen, indem Sie im Deklarationsteil von Programmierobjekten hinter dem Schlüsselwort für den Variablentyp (VAR, VAR_GLOBAL etc.) das Schlüsselwort PERSISTENT hinzufügen.

PERSISTENT-Variablen behalten ihren Wert nach einem unkontrollierten Beenden, einem Reset kalt oder einem erneuten Download des SPS-Projekts.
Bei einem erneuten Start des Programms arbeitet das System mit den gespeicherten Werten weiter. In diesem Fall initialisiert TwinCAT andere „normale“ Variablen neu, entweder mit ihren explizit vorgegebenen Initialwerten oder mit den Standardinitialisierungen.
TwinCAT initialisiert PERSISTENT-Variablen nur bei einem Reset Ursprung neu.

Ein Anwendungsbeispiel für persistente Variablen ist ein Betriebsstundenzähler, der nach einem Stromausfall und auch nach einem erneuten Download des SPS-Projekts weiter zählen soll.

Übersichtstabelle zum Verhalten von PERSISTENT-Variablen

Nach Online-Befehl

VAR PERSISTENT

Reset kalt

Werte werden beibehalten

Reset Ursprung

Neuinitialisierung der Werte

Download

Werte werden beibehalten

Online-Change

Werte werden beibehalten

Beispiel:

Persistente Variablenliste:

VAR_GLOBAL PERSISTENT
    nVarPers1 : DINT; (* 1. Persistent variable *)
    bVarPers2 : BOOL; (* 2. Persistent variable *)
END_VAR
Remanente Variablen - PERSISTENT, RETAIN 2:
  • Vermeiden Sie die Verwendung des Datentyps POINTER TO in persistenten Variablenlisten, da sich die Adresswerte bei erneutem Download des SPS-Projekts verändern können. TwinCAT gibt entsprechende Compiler-Warnungen aus.
  • Wenn Sie eine lokale Variable in einer Funktion als PERSISTENT deklarieren, bleibt dies ohne Auswirkung. Die Verwendung von Datenpersistenz ist hier nicht möglich.
  • Das Verhalten bei einem Reset kalt kann mit dem Pragma ‘TcInitOnReset‘ beeinflusst werden

RETAIN-Variablen

Sie deklarieren RETAIN-Variablen, indem Sie im Deklarationsteil von Programmierobjekten hinter dem Schlüsselwort für den Variablentyp (VAR, VAR_GLOBAL etc.) das Schlüsselwort RETAIN hinzufügen.

Als RETAIN deklarierte Variablen werden zielsystemabhängig, aber typischerweise in einem eigenen Speicherbereich verwaltet, der gegen Stromausfall gesichert sein muss. Der sogenannte Retain‑Handler sorgt dafür, dass die RETAIN-Variablen am Ende eines SPS-Zyklus und nur bei Änderung in den entsprechenden Bereich des NovRams geschrieben werden. Der Umgang mit dem Retain-Handler ist in der Dokumentation C/C++ im Kapitel „Retain Daten“ beschrieben.

RETAIN-Variablen behalten ihren Wert nach einem unkontrollierten Beenden (Spannungsausfall). Bei einem erneuten Start des Programms arbeitet das System mit den gespeicherten Werten weiter. In diesem Fall initialisiert TwinCAT andere „normale“ Variablen neu, entweder mit ihren explizit vorgegebenen Initialwerten oder mit den Standardinitialisierungen.
TwinCAT initialisiert RETAIN-Variablen neu bei einem Reset Ursprung.

Eine mögliche Anwendung ist ein Stückzähler in einer Fertigungsanlage, der nach einem Stromausfall weiter zählen soll.

Übersichtstabelle zum Verhalten von RETAIN-Variablen

Nach Online-Befehl

VAR RETAIN

Reset kalt

Werte werden beibehalten

Reset Ursprung

Neuinitialisierung der Werte

Download

Werte werden beibehalten

Beispiele:

In einer POU:

VAR RETAIN
    nRem1 : INT;
END_VAR

In einer GVL:

VAR_GLOBAL RETAIN
    nVarRem1 : INT;
END_VAR
Remanente Variablen - PERSISTENT, RETAIN 3:
  • Wenn Sie eine lokale Variable in einem Programm oder Funktionsbaustein als RETAIN deklarieren, speichert TwinCAT genau diese Variable im Retain-Bereich (wie eine globale RETAIN-Variable).
  • Wenn Sie eine lokale Variable in einer Funktion als RETAIN deklarieren, hat dies keine Auswirkung. TwinCAT speichert die Variable nicht im Retain-Bereich.

Gesamte Übersichtstabelle

Der Grad der Werteerhaltung von RETAIN-Variablen ist automatisch in der von PERSISTENT-Variablen enthalten.

Nach Online-Befehl

VAR

VAR RETAIN

VAR PERSISTENT

Reset kalt

Neuinitialisierung der Werte

Werte werden beibehalten

Werte werden beibehalten

Reset Ursprung

Neuinitialisierung der Werte

Neuinitialisierung der Werte

Neuinitialisierung der Werte

Download

Neuinitialisierung der Werte

Werte werden beibehalten

Werte werden beibehalten

Online-Change

Werte werden beibehalten

Werte werden beibehalten

Werte werden beibehalten

Siehe auch: