# PERSISTENTe Variablen



## gamble (23 April 2011)

Hallo miteinander

ich war der Meinung das VAR PERSISTENT in der SPS erhalten bleiben wenn diese neu gestartet bzw resetet wird. dies schein auch zuzutreffen. 

wenn ich mich allerding mit dem Laptop auf dem CX anmelde werden diese wieder auf 0 zurückgesetzt. Warum?

muss ich im Projekt was beachten oder vllt. beim Verbinden?



gruß Marcel


----------



## Scrat (23 April 2011)

Hallo Marcel,

um was für einen CX handelt es sich denn?
Die CX von Beckhoff können nämlich keine Persistenten oder Retain Variablen (Außer der CX50xx, der kann das), dafür ist dann das NOVRAM da.

Gruß Scrat


----------



## gamble (23 April 2011)

ja wie vermutet handelt es sich nicht um eine cx50 sondern um einen cx9000


----------



## Chräshe (23 April 2011)

Hallo Marcel,

 Das Problem hat mich damals auch geärgert. Du hast die Qual der Wahl...

 Um auf den IPC gewisse Daten auf der Steuerung remanent zu speichern, gibt es mehrere Lösungen. 
1) Den Einsatz einer USV damit die CPU die Daten sichert, bevor der Strom weg ist – die kostet allerdings was...
2) die Benutzung vom NOVRAM, welcher mit dem ständigen lesen und schreiben stark die CPU belastet...
3) oder die Deklaration als Persistent und Benutzung des Bausteins „WritePersistentData“ - was einen gewissen zusätzlichen Programmieraufwand bedeutet...
4) Seit kurzem gibt es die Embedded-PCs mit Atom-Prozessor und 1s USV wie z.B. den CX50xx. Dort reicht es aus, die Variablen als „PERSISTENT“ zu deklarieren und im Programm die Funktion FB_S_UPS*  aufzurufen...

 Empfehlen würde ich dir Variante 4. Die  CX50xx- Steuerungen sind noch verhältnismäsig günstig und von der Rechenleistung zwischen den CX1010 und CX1020 einzuornen.

 Die universellere Lösung ist Variante 3. Vermutlich hast du deine SPS schon . Ein Beispiel findest du hier:
Beispiel: Persistente Variablen

 Frohe Ostern
 Chräshe


----------



## gamble (23 April 2011)

was noch erschwerend dazukam: "kein Programm auf der Steuerung. Laden?"


----------



## trinitaucher (23 April 2011)

Scrat schrieb:


> Die CX von Beckhoff können nämlich keine Persistenten oder Retain  Variablen (Außer der CX50xx, der kann das), dafür ist dann das NOVRAM  da.


Hä? Was für'n Quatsch!
Aber PERSISTENT oder RETAIN Daten werden nicht gespeichert, wenn man einfach den Strom abdreht! Auch bei gewöhnlichen PCs wird dann nichts gespeichert. Nur wenn das Windows ordentlich "beendet" wird, kann das TwinCAT die Daten speichern. Da beim CX das aber meist nicht gemacht wird (sondern einfach Strom abgeklemmt wird), mag es einem so vorkommen, als ob remanente Daten per RETAIN/PERSISTENT Deklaration auf CXen nicht funktionieren.
NOVRAM oder 1-Sek-USV (CX5000) wären dann notwendig.

Zwischenlösung:
Mittels dem FB "WritePersistentData" in gewissen Abständen die Daten abspeichern.



gamble schrieb:


> was noch erschwerend dazukam: "kein Programm auf der Steuerung. Laden?"


Kein Bootprojekt?
Diese Optionen im System Manager aktiviert?:
http://infosys.beckhoff.com/index.p...ager/basics/tcsysmgr_plcsettings.htm&id=10846


----------



## gamble (23 April 2011)

trinitaucher schrieb:


> Kein Bootprojekt?
> Diese Optionen im System Manager aktiviert?:
> http://infosys.beckhoff.com/index.p...ager/basics/tcsysmgr_plcsettings.htm&id=10846


 
ja wurde gefixt, thx


----------



## Scrat (24 April 2011)

trinitaucher schrieb:


> Zwischenlösung:
> Mittels dem FB "WritePersistentData" in gewissen Abständen die Daten abspeichern.



Aber das ist nur eine Notlösung! Wenn man Zyklisch Daten auf die CF-Karte speichert hält die auch keine Ewigkeit. Die CFs verhalten sich wie SSDs die auch nach bestimmten Zyklen ausgetauscht werden müssen, da zu viele Speicherbereiche defekt sind.

Gruß Scrat


----------



## Chräshe (25 April 2011)

Scrat schrieb:


> Aber das ist nur eine Notlösung! Wenn man Zyklisch Daten auf die CF-Karte speichert hält die auch keine Ewigkeit. Die CFs verhalten sich wie SSDs die auch nach bestimmten Zyklen ausgetauscht werden müssen, da zu viele Speicherbereiche defekt sind.



Hallo Scrat,

bei dem Beispiel „IPC_X86.zip“ ist es eben nicht so, dass zyklisch geschrieben wird.  Es wird geprüft, ob sich im persistenten Bereich eine Änderung ergeben hat. Siehe unter der Funktion MEMCMP…
Erst wenn das der Fall ist, wird der aktuelle Speicherinhalt mit dem Referenzspeicher (stPersistent_Save) überschrieben (siehe Funktion MEMCPY) und mit „WritePersistentData“ die Variablen auf die Karte gesichert. 
Man braucht zwar den doppelten Speicher, was bei Beckhoff nicht so schnell zum Problem wird, aber es wird nur bei Änderung in den Flash geschrieben. 
Für Rezepturen, Einstellungen Positionslisten usw. ist das absolut zufrieden stellend. 

:evil: Kritisch wird es, wenn bei den persistenten Daten Variablen dabei sind, die sich schnell und häufig ändern. Das könnte zum Beispiel bei Stückzählern oder remanenten Schrittketten der Fall sein. Dann hilft es nur auf das NOVRAM, oder wenn es sehr viele Variablen sind auf die USV auszuweichen.

 Bei CPU’s mit 1s USV tritt so ein Problem erst gar nicht auf. Dort findet alles im Hintergrund statt, wie es sich für eine SPS auch gehört. Als Anwender deklariert man nur die persistenten Variablen und ruft den Baustein FB_S_UPS* auf.

Gruß
Chräshe


----------



## Schnick und Schnack (26 April 2011)

> bei dem Beispiel „IPC_X86.zip“ ist es eben nicht so, dass zyklisch geschrieben wird. :wink: Es wird geprüft....


Richtig. Nur bin ich der Meinung, mich daran zu Erinnern, dass es eine Situaion gibt, bei der Variabeln im NOVRAM auch zurückgesetzt werden. Ich glaube es war wenn das System af Stop geht oder so. Bin mir echt nicht mehr scher.


Gruss


----------

