Daten die erhalten bleiben - nach Spannungsausfall oder Online-Change
Bei den Busklemmen-Controller waren remanente und persistente Daten je nach Gerät eine Selbstverständlichkeit. Umso mehr enttäuscht war ich, als ich bei den PC-basierenden Systemen auf das Thema gestoßen bin.
Es gibt inzwischen für jedes Problem ein Lösung. Damit ihr euch nicht durch die unendlichen Weiten des InfoSys quälen müsst, eine kurze Zusammenfassung.
1. Variante: Die CPU verfügt über eine 1-Sekunden-USV
Aktuell verfügen Folgende Steuerungen über die 1s USV: C6915, CX5000, CX8000, CP62xx, CP77xx
Weitere werden hoffentlich folgen...
Hier ist es ausreichend, die Variablen als „PERSISTENT“ zu deklarieren und im Programm die Funktion FB_S_UPS aufzurufen...
Code:
PROGRAM MAIN
VAR
fbUPS : FB_S_UPS; (* UPS-FB instance *)
eUpsMode : E_S_UPS_Mode := eSUPS_WrPersistData_Shutdown;
...
END_VAR
fbUPS(eUpsMode := eUpsMode); (* immer im Main als erste Anweisung stehen lassen *)
2. Variante: Die CPU verfügt über keine USV
Variablen die „PERSISTENT“ deklariert sind, können aus dem Programm heraus mit der Funktion WritePersistentData gespeichert werden. Leider findet das speichern auf der Flash- Karte statt. Dieser Speicher hat eine begrenzte Anzahl an Speicherzyklen, bis er ausfallen kann. Daher sollte man nie hergehen und einfach alle x Sekunden das schreiben auslösen.
In dem Beispiel IPC_X86.zip ist eine schöne Lösung für dieses Problem. Alle zu speichernden Variablen sind unter VAR PERSISTENT in einer Struktur abgelegt. Die Funktion MEMCMP vergleicht diese Struktur mit einer Kopie im normalen Speicherbereich. Sind alle Werte identisch passiert nichts. Sobald ein Wert geändert wird, z.B. durch die Eingabe eines Bedieners..., werden die neuen Werte in die Kopie übertragen (siehe Funktion MEMCPY) und mit WritePersistentData die Variablen auf die Flash- Karte gesichert.
Für Rezepturen, Einstellungen, Positionslisten usw. ist das absolut zufriedenstellend.
Nicht verwenden sollte man diese Variante, wenn Variablen dabei sind, die sich schnell und häufig ändern. Das könnte zum Beispiel bei Stückzählern, Betriebsstundenzähler oder remanenten Schrittketten der Fall sein. Da kommt die 3.Variante ins Spiel...
3. Variante: Die Verwendung des NOVRAM
NOVRAMkann beliebig oft beschrieben und gelesen werden. Die Netzteile für die CX10xx bringen bereits 8k NOVRAM mit.
Die entsprechenden Variablen müssen nur als Ausgang (%Q*) deklariert und im System-Manager mit dem NOVRAM verknüpft werden.
Anzumerken ist, dass die CPU-Belastung mit wachsender NOVRAM- Belegung stark anwächst, da dieser Speicher Zyklisch gelesen und geschrieben wird!
Somit ist die 3.Variante nur als Ergänzung zur 2.Variante interessant.
Lesezeichen