Verständnis Retain Persistent

vollmi

Level-3
Beiträge
5.436
Reaktionspunkte
1.409
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen. Ich habe eine frage wegen der Variablendeklaration in Codesys.

Man kann ja Variablen in VAR RETAIN PERSISTENT deklarieren das sie erhalten bleiben (in der Anleitung alles gut beschrieben).

Dasselbe auch in der Schnittstelle eines FBs.
Aber was muss mit der Deklaration des FBs selber passieren?
Code:
FUNCTION_BLOCK FB_PRISM
VAR RETAIN PERSISTENT
    wlastCMDH    : WORD; (* Datenpunkt letzter Schaltbefehl Hand Signal *)
    wlastCMDA    : WORD;  (* Datenpunkt letzter Schaltbefehl Automatik Signal *)
END_VAR


Muss ich die Instanz selber auch in VAR RETAIN PERSISTENT deklarieren wenn ich im FB selber RETAIN PERSISTENT nutze?
Code:
VAR RETAIN PERSISTENT
    VOR01_Q16280_GR_N1    : FB_PRISM;
    VOR01_Q16280_GR_N2    : FB_PRISM;
    VOR02_Q16280_GR_N1    : FB_PRISM;
    VOR02_Q16280_GR_N2    : FB_PRISM;
    VOR_Q16280_GR_G1    : FB_PRISM;
END_VAR

Oder kann ich die Deklaration im normale VAR machen?
Code:
VAR 
    VOR01_Q16280_GR_N1    : FB_PRISM;
    VOR01_Q16280_GR_N2    : FB_PRISM;
    VOR02_Q16280_GR_N1    : FB_PRISM;
    VOR02_Q16280_GR_N2    : FB_PRISM;
    VOR_Q16280_GR_G1    : FB_PRISM;
END_VAR


mfG René
 
Bei der SPS, die ich bevorzugt benutze (Intercontrol) wird durch das REATAIN nur festgelegt, dass die Variablen in einem Bereich liegen, der persistent gemacht werden kann.

Man kann nach Beschreiben der Variablen einen Funktion starten, die einen SAVE im EEProm auslöst oder aber auch beim Runterfahren (Spannungsabschalten) im letzten Zyklus diese Funktion aufrufen. Die SPS hat eine kleine Hardware Pufferung des SPS Kerns, damit der letzte Zyklus erkannt und sicher durchgeführt werden kann und auch alle Ausgänge in eine sichere Lage geschaltet werden.

Das ganze dürfte aber bei jeder Hardware der verschiedenen Hersteller proprietär gelöst sein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
vollmi schrieb:
Aber was muss mit der Deklaration des FBs selber passieren?
Laut CoDeSys OnlineHelp wird die ganze POU als Retain Persistant behandelt sobald auch nur eine variable der POU diese Eigenschaft hat. Egal wie die Instance deklariert wird.
Das trifft aber nicht unbedingt auf alle Hersteller/Anbieter zu, die auf CoDeSys basieren. Bei Schneider Electric (SoMachine) z.Bsp. hat das Keyword Persistent keine Bedeutung, für Persitente variablen muss eine extra Variblen-Liste (Persistent_Table) angelegt werden. Und es werden nur Variablen als Retain behandelt, welche auch unter VAR_RETAIN deklariert wurden.

vollmi schrieb:
Muss ich die Instanz selber auch in VAR RETAIN PERSISTENT deklarieren wenn ich im FB selber RETAIN PERSISTENT nutze?
Bei CoDeSys nicht.

vollmi schrieb:
Oder kann ich die Deklaration im normale VAR machen?
Bei CoDeSys ja.
 
Hallo,
also irgendwie stimmt das doch nicht so ganz wie oben beschrieben.
Wenn du in einem FB eine Variable als Retain deklarierst wird die komplette Instance des FBs im seperaten Speicher für Retain Variablen gespeichert, aber nur die Variablen als Retain behandelt welche auch als Retain deklariert sind. Bei einem Programm werden nur die als Retain deklarierten Variablen im Speicher für Retain Variablen abgelegt.
Zu Persistent Variablen steht, das diese nur in einer speziellen GVL deklariert "Persistent Variables" werden können. Dazu muss das Zielsystem natürlich über einen Speicherbereich verfügen der das Verhalten der Persistent Variablen unterstützt.

Das würde jetzt in Deinem Fall bedeuten, die entsprechenden Variablen deines Bausteines sind nur Retained. Vorrausgesetzt Du hast die Instance zwischen VAR...END_VAR deklarierst. Wenn Du Instance des FBs zwischen VAR_RETAIN...END_VAR deklarierst ist der komplette FB Retained. Und wenn Du die Instance des FBs in einer speziellen GVL "Persistent Variables" deklarierst ist der komplette Baustein Persistent.

Ich glaube nun ist die Verwirrung perfekt.

Ich beziehe mich hier auf CoDeSys V3!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Retain . Speicerung erfolgt über Adressen, Persistent über den Symbolischen Namen, ist also sicherer. Wie gespeichert wird hängt von der STeuerung ab. Manche haben einen NovRAM, dazu gibt es FB´s. Manche haben das On-Board mittels USV oder integriert mittels modul. Da muss man dann nix machen. Mache haben gar nix und es muss auf den Flash geschrieben werden. Hier muss man vorsichtig sein um den Flash nicht durch zu häufiges schreiben zu zerstören
 
Zurück
Oben