Erweitertes Retain Handling
Dieses Thema enthält die folgenden Abschnitte:
- Was sind Retain-Daten?
- Erweitertes Retain Handling (ab PLCnext-Firmware-Version 2020.6)
- Retain-Daten aus dem Cockpit speichern/laden
Was sind Retain-Daten?
Eine Steuerung besitzt neben dem flüchtigen Speicher (normalerweise RAM) einen Retain-Speicher. Die im RAM gespeicherten Daten gehen verloren, sobald die Steuerung abgeschaltet wird. Im Gegensatz dazu bleiben die Daten im Retain-Speicher beim Abschalten der Steuerung erhalten.
Die technische Implementierung des Retain-Speichers (z.B. über integrierten NVRAM oder durch Speichern der Retain-Daten in einer Datei auf einer an der Steuerung eingesteckten SD-Karte) hängt von der verwendeten PLCnext Technology-Steuerung ab. Für den normalen Betrieb spielt die Implementierung keine Rolle. Zum Tragen kommt diese jedoch, wenn Sie eine defekte Steuerung austauschen.
Gemäß IEC 61131-3 müssen Variablen und Ports, die im Retain-Speicher gespeichert werden sollen, mit dem Schlüsselwort 'Remanent' deklariert werden (siehe das Thema "Eigenschaften von Variablen/Ports".) Die Datenliste enthält eine entsprechende Spalte. In C#-Bibliotheken muss das Attribut GdsRetain verwendet werden.
Die PLCnext Technology-Laufzeit berechnet aus den Retain-Variablen eine CRC für das Retain-Speicherlayout. Die Retain-CRC wird zusammen mit den Retain-Werten im Retain-Speicher gespeichert. Dir Firmware führt diese Sicherung automatisch vor jedem Kaltstart durch.
Beim Einschalten der Steuerung versucht die Laufzeit standardmäßig zunächst einen Warmstart. Dieser wird nur durchgeführt, wenn die CRC im Retain-Speicher mit der CRC des aktuell geladenen Projekts übereinstimmt.
Erweitertes Retain Handling (ab PLCnext-Firmware-Version 2020.6)
Das Ändern von Retain-Daten im Programm der Steuerung, z.B. durch Einfügen, Ändern oder Löschen von Retain-Variablen oder der zugehörigen Datentypen, resultiert in einer anderen CRC. Nach dem Senden an die Steuerung (entweder mit dem Befehl 'Schreiben und Starten' oder durch Kopieren der Binärdateien während die Steuerung gestoppt ist), erkennt die Laufzeit die abweichende CRC und die Änderungen im Speicherlayout der Retain-Variablen.
Das Verhalten der PLCnext-Laufzeit nach solchen Änderungen hängt von der Firmware-Version ab: Bis Firmware-Version 2020.3 erfolgt ein Neustart, auch wenn ein Warmstart angefordert wurde. Ab Firmware-Version 2020.6 wird das erweiterte Retain Handling wie unten beschrieben unterstützt.
Hinweis
Die sicherheitsbezogene SPS unterstützt kein erweitertes Retain Handling. |
Ohne erweitertes Retain Handling würde das Ändern von Retain-Daten in der Applikation (wie im oben beschriebenen Szenario) einen Kaltstart der Steuerung erfordern. Grund dafür ist, dass die Adressen, an welchen das modifizierte Programm die Retain-Variablen im Steuerungsspeicher erwartet, eventuell durch die Programmänderungen und das anschließende Kompilieren verändert wurden.
Erweitertes Retain Handling behält den Wert jeder remanenten Variablen ohne zugewiesenes Prozessdaten-Element, indem dieser von der Steuerung gelesen wird, bevor das geänderte und neu kompilierte Projekt auf die Steuerung geschrieben wird. Nach dem Schreiben des geänderten Programms auf die Steuerung sendet das System die zuvor gespeicherten Variablenwerte wieder an die entsprechenden Speicheradressen.
Beim erweiterten Retain Handling wird versucht, so viele Retain-Werte wie möglich zu behalten.
Dazu speichert die PLCnext-Laufzeit beim Laden des Projekts das Speicherlayout der Retain-Variablen in einer Datei. Beim nächsten Laden eines Projekts wird die zuvor gespeicherte Datei mit dem Speicherlayout verwendet, um Änderungen im Retain-Speicherlayout zu erkennen. Die gefundenen Änderungen im Layout verwendet die PLCnext-Laufzeit dazu, um möglichst vielen Retain-Daten zu behalten.
- Der Projektname bleibt gleich.
- Die Datei mit den Informationen zum Speicherlayout und die daraus berechnete CRC ist verfügbar und kann gelesen werden.
- Die CRC stimmt mit der entsprechenden CRC aus der Datei mit den Informationen zum Retain-Speicherlayout überein.
- Eine neue Retain-Variable wird immer mit ihrem Anfangswert initialisiert (es werden keine Werte gehalten). Ist in der Variablendeklaration kein Anfangswert zugewiesen, wird der Standardwert des jeweiligen Datentyps verwendet.
- Wurde der Name einer Retain-Variable geändert, wird diese als neue Variable betrachtet. Grund: das Retain Handling erkennt jede remanente Variable an ihrem Instanzpfad.Das gleiche gilt, wenn der Name eines Programms oder einer FB-Instanz geändert wurde. In diesem Fall werden alle enthaltenen Variablen und Kind-Instanzen als neue Variablen betrachtet.
- Wurde der Datentyp einer Retain-Variable geändert, hängt das Verhalten des erweiterten Retain Handlings vom "alten" und "neuen" Datentyp ab:
- Elementare Datentypen: Die PLCnext-Laufzeit behält den Wert, wenn beides elementare Datentypen sind (mit Ausnahme von Strings) und der alte Datentyp ohne Verluste (Wertebereich, Genauigkeit) in den neuen Datentyp konvertiert werden kann. Hier wird der Mechanismus von GDS-Verbindungen verwendet.
- Anwenderdefinierte Datentypen (String, Felder und Strukturen): es werden alle Elemente initialisiert.
- Gelöschte Retain-Variablen sind für das Retain Handling nicht von Bedeutung. Es kann jedoch vorkommen, dass die übrigen Retain-Variablen im Speicherabbild der Steuerung verschoben werden.
- Retain-Variablen können im Speicherabbild der Steuerung verschoben werden, wenn Sie Variablen in der Variablentabelle einfügen, löschen und verschieben.
- Wenn sich die Definition eines anwenderdefinierten Datentyps selbst ändert, werden die oben genannten Regeln auf jedes Element angewendet. Das gilt auch, wenn sich der Name oder Datentyp der Variablen nicht geändert hat.
- Jedes Element in einem Feld wird durch seinen Index identifiziert.In CC++/C# startet das Feld mit Index 0. Elemente können hinzugefügt oder gelöscht werden. Bei einem Warmstart behalten die überlappenden Elemente des Index ihre Werte.In der IEC 61131-3-Programmierung ist ein Feld durch das erste ("unterer Grenzwert") und das letzte ("oberer Grenzwert") Indexelement definiert. Dies führt zu einem speziellen Verhalten:
- Wird ein Feld erweitert, werden die hinzugefügten Elemente beim Start initialisiert. Bereits vorhandene Retain-Werte behalten ihren Wert.
Beispiel: Feld[4..10] wird erweitert in Feld[3..11]. Die Elemente 3 und 11 werden initialisiert, Elemente 4 bis 10 behalten ihren Wert. - Wird ein Feld in ein anderes Feld verschoben, behalten nur die überlappenden Elemente (mit bereits vorhandenem Index) ihre Retain-Werte. Die anderen Werte werden initialisiert oder gelöscht, wie im folgenden Beispiel gezeigt.
Beispiel: Feld[4..10] wird verschoben in Feld[7..13]. Nur die Elemente 7 bis 10 behalten ihre Werte (auch wenn das Feld vor und nach der Änderung 7 Elemente enthält). Die Elemente 4 bis 6 gehen verloren und die neuen Elemente 11 bis 13 werden initialisiert.
- Wird ein Feld erweitert, werden die hinzugefügten Elemente beim Start initialisiert. Bereits vorhandene Retain-Werte behalten ihren Wert.
- Bei verschachtelten komplexen Datentypen werden die oben genannten Regeln rekursiv angewendet.
Retain-Daten aus dem Cockpit speichern/laden
Das oben beschriebene Retain Handling wird automatisch von der Laufzeit der Steuerung durchgeführt. Es muss nicht manuell eingegriffen werden.
Zusätzlich können Sie die Retain-Daten ihrer Applikation sichern und wiederherstellen. Auf diese Weise können Sie einen bestimmten Zustand Ihrer Applikation zu einem gewünschten Zeitpunkt "konservieren". Bei Bedarf können Sie die gespeicherten Retain-Werte wieder laden und die Applikation im konservierten Zustand fortsetzen. Wenn Sie die Sicherungsdatei auf eine SD-Karte speichern, können Sie die Retain-Werte bspw. nach einem Austausch der Steuerung wieder verwenden oder auf andere Steuerungen/Applikationen übertragen.
Zu diesem Zweck stehen in der Symbolleiste des Cockpits von PLCnext-Steuerungen (ab Firmware-Version 2020.6) die folgenden Befehle zur Verfügung:
Hinweis
Diese Befehle sind im Cockpit der sicherheitsbezogenen SPS nicht verfügbar, da diese kein erweitertes Retain Handling unterstützt. |