# Merker Remanent Speichern Beckhoff



## Rifel (12 Februar 2009)

Hi Folks,

Ich bin gerade dabei einen CX1030 zu programmieren und stoße auf ein kleines Problem:

Ich würde gerne einige Merker eines Projekts remanent speichern. Ich habe die Merker in den Globalen Variablen Deklaration zugewiesen und rufe sie in meiner ZenOn Visualisierung dann wieder auf und bearbeite Sie dort auch. Da sie aber Merker sind und keine festen I/O kann ich Sie ja nicht im System Manager ins NOV/DP Ram schreiben daher müsste es ja dann ne andere Lösung geben. 
Sind Sie denn gespeichert/gesichert, wenn ich bei der Variablendeklaration nen Unterpunkt VAR_PRESISTENT einrichten würde und die zu speichernden Merker dort reinsetze?
Danke für die Hilfe hab grad nen Hänger-

Tom


----------



## Neals (12 Februar 2009)

Retain bleibt erhalten bis du einen Reset machst,
Persisten bis zum Urlöschen:

http://www.sps-forum.de/showthread.php?t=22628


----------



## trinitaucher (12 Februar 2009)

Rifel schrieb:


> Sind Sie denn gespeichert/gesichert, wenn ich bei der Variablendeklaration nen Unterpunkt VAR_PRESISTENT einrichten würde und die zu speichernden Merker dort reinsetze?


Ja, das geht. Aber nur, wenn der CX (vielmehr das Windows) auch "sauber" runterfahren kann. Nimmt man einfach Spannung weg sind auch die Daten der PERSISTENTen VARs weg. 
Dann brauchst du ne USV.

Entweder du sicherst deine Werte indem du sie auf I/O-Variablen schreibst, die dann ins NOV-Ram verlinkt werden, oder du nimmst den entsprechenden Funktionsbaustein und schreibst damit deine Werte zyklisch (z.B. jede Sekunde) ins NOV-Ram.


----------



## Rifel (12 Februar 2009)

Hi Nels, Trinitaucher,

vielen Dank erstmal für die Antworten, das mit dem Ordentlichen Runterfahren ist so ne Sache, es wird eigentlich mit Hauptschalter aus ausgeschaltet somit wären die presistenten dann weg.

wie heisst denn der Baustein mit dem ich Zyklisch ins Nov schreiben kann?

THX Rifel


----------



## trinitaucher (12 Februar 2009)

Rifel schrieb:


> wie heisst denn der Baustein mit dem ich Zyklisch ins Nov schreiben kann


http://infosys.beckhoff.com/index.p.../tcplclibiofunctions_fb_novramreadwriteex.htm


----------



## Ritter_Bodo (13 Februar 2009)

Hallo,
du kannst deine Merker zyklisch in eine Variable schreiben und diese dann sichern (z.B. Retrain oder in NOV-RAM)


----------



## trinitaucher (13 Februar 2009)

ach, ich vergaß... man kann auch die PERSISTENTen manuell schreiben:
http://infosys.beckhoff.com/index.p.../tcplclibutilities_fb_writepersistentdata.htm


----------



## Rifel (15 Februar 2009)

*Lösung*

Hi,
also ich habe jetzt das Problem gelöst und möchte das hier noch kurz posten.
Ich habe jetzt die remanent zu speichernden Merker über die Variablendeklaration konkret als Ausgänge deklariert also zum Beispiel den Merker "Rifel" durch Rifel AT%Q*:BOOL; dann bin ich im Systemmanager auf mein NOV-RAM gegeangen und habe eine Variable hinzugefügt. Diese habe ich der Durchgängigkeit halber auch mit Rifel bezeichnet müsste ich aber nicht.
Diese erscheint dann unter Ausgänge im NOV-RAM. Jetzt habe ich über verknüpfen mit die variable Rifel aus dem PLC hinzugefügt. Das wars sie ist jetzt remanent-
Natürlich wäre auch eine Deklaration als Eingang möglich aber das ist bei Merkern ja eigentlich egal ob sie ein Eingang oder ein Ausgang sind...


----------



## asci25 (16 Februar 2009)

Persisstent deklarieren und zyklisch auf der FP speichern lassen find ich einfacher.


----------



## Rifel (20 Februar 2009)

Also dass mit den Remanenzen klappt ja jetzt wunderbar nur hab ich ein anderes Problem-
Ich versuche nen Zählwert (den Zählerstand einer Wasseruhr) zu speichern habe dazu den CV meines Couters ausgewählt und speichere diesen Remanet dass funktioniert solange, bis er von dem ersten Zählimpuls des Couters wieder auf 1 gesetzt wird.
Ich habe auch schon mit dem Support telefoniert die gaben mir den typ das mithilfe des firstcycles zu machen also im Main ne anweisung zu schreiben die mir den Wert der Remanent gespeichert wird in den Lesewert zu schreiben wenn die SPS hochfährt ich glaube aber nicht das dies den gewünschten erfolg bringt und weiß auch nicht genau wie die anweisung aussehen soll. 
Gibt es da noch ne andere Lösung den Zählwert so zu speichern, dass nach dem Neustart von diesem Wert aus weitergezählt wird?


----------



## trinitaucher (20 Februar 2009)

Mit den IEC-bausteinen geht das glaube ich nicht.

Du kannst dir ja selbst so etwas basteln:
Mit einer positiven Flanke zählst du einen Wert hoch. Den Wert selbst speicherst du remanent ab


```
VAR
   trig: R_TRIG;
   bTrigger: BOOL;  (* dein trigger *)
END_VAR
VAR PERSISTENT
   Counter: INT;
END_VAR
(************************)

trig(CLK := bTrigger);
IF trig.Q THEN
   Counter := Counter +1;
END_IF
```

Pack dir das ganze noch in einen schicken FB und fertig isses.


----------



## zotos (20 Februar 2009)

Rifel schrieb:


> ...
> Ich versuche nen Zählwert (den Zählerstand einer Wasseruhr) zu speichern habe dazu den CV meines Couters ausgewählt und speichere diesen Remanet dass funktioniert solange, bis er von dem ersten Zählimpuls des Couters wieder auf 1 gesetzt wird.
> ...



Leg doch die Instanz des FBs in den remanenten Bereich:


```
VAR RETAIN PERSISTENT
    myCounter : CTU;
END_VAR
```


----------

