Fragen zu RETAIN und PERSISTENT (TwinCAT)

suud

Level-1
Beiträge
24
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
verstehe ich das richtig, dass nur die PERSISTENT Variablen ihren Wert auch über einen Neustart des PCs hinaus behalten?
Welchen Sinn hat dann "VAR RETAIN PERSISTENT"?
Und warum muss bei RETAIN die komplette FB-Instanz im Retain-Bereich gespeichert werden, bei PERSISTENT aber nicht?! Bzw. wenn ich einen kleinen FB mit einer einzigen RETAIN Variablen als Baustein in einem sehr viel größeren FB benutze, dann wird praktisch mein komplettes SPS-Programm im Retain-Bereich gespeichert. Ist zwar kein Problem den Bereich zu vergrößern, aber hat das nicht auch negative Auswirkungen z.B. auf die Performanz?
Also was deklariert man am besten RETAIN, was PERSISTENT und was "RETAIN PERSISTENT"?
:confused::s17::confused:
 
Hallo suud

Ich kenne mich da auch nicht gerade gut aus. Die RETAIN daten werden bei "PLC RESET","Alles bereinigen" und "Urlöschen". Die PERSITENT daten nur beim "Urlöschen"

Damit RETAIN und PERSITENTgespeichert werden, muss das Windows heruntergefahren werden (Einfach den Hauptschalter ausschalten ist nicht gerade gut). Es gibt auch einen Funktionsblock um die Persitenten Daten zu schreiben. Ich rate dir aber ab, Daten die viel ändern mit diesem Funktionsblock immer wieder zu schreiben. Beim Schreiben wird immer wieder eine neue Datei auf dem Flash erzeugt (In dieser Zeit sollte die Anlage nicht abgeschaltet werden).

Ich verwende darum das NVRAM zur Datensicherung(Aktueller job) . Du kannst Variablen über den Systemmanager mit dem NVRAM verbinden. Das geht gut bei einem CX1010 (Grosse rechenleistung). Bei einem CX9000(kleine Rechenleistung) ist es aber besser du schreibst die Daten selbst mit einem Funktionsblock. Da du sonst zu viel Rechenleistung verlierst.

Die Persitenten Daten verwende ich um verschiedene Jobs zu speichern. Also Daten die im laufenden Betrieb nicht gebraucht werden. Bei einem CX9000 würde ich das aber nicht machen. Das Flash ist dort in der SPS eingebaut (kein compactflash) und nicht sehr schnell. Der CX9000 hat ja dafür sehr viel NVRAM. Da hat es genug Platz für die verschiedenen Jobs.

Falls du die Persitenten Daten verwendest und du die SPS mit dem Powerschalter abschalten willst, musst du die Persitenten Daten gleich nach dem Start der SPS einmal schreiben. Den die SPS kopiert sie in ein old um.

Gruss

Thomas
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das mit dem Urlöschen kann aber doch nicht der einzige Unterscheid sein?
Was bewirkt denn folgende Deklaration?:
Code:
VAR RETAIN PERSISTENT
     MaxValue: INT;
END_VAR
 
Danke. Allerdings kann die Tabelle auf Seite 4-9 oben eigentlich nicht ganz richtig sein, denn PRESISTENT Variablen werden bei einem Reset ja nicht neu
initialisiert, RETAIN Variablen allerdings schon (jedenfalls bei TwinCAT). In der Tabelle ist es aber genau umgekehrt?!
Und wenn beides nur beim geregeleten Neustart gespeichert wird, warum müssen dann RETAIN Variablen zusammen mit den kompletten Instanzen aller übergeordneter FBs gespeichert werden, PERSISTENT Daten aber nicht? Könnte mir nur vorstellen, dass das was damit zu tun hat, dass PERSISTENT Daten mit Instanzpfad und Symbolnamen abgelegt werden...

Ich habe nun noch an anderer Stelle gelesen, dass bei Controllern mit NVRAM die RETAIN Daten eben einmal pro Zyklus dort abgespeichert werden und PERSISTENT nur beim geregelten Neustart/Ausschalten und nicht im NVRAM. Hier wären also auch die RETAIN-Daten Nullspannungssicher.

Also eine eindeutige Definition was wann wie wo gepeichert wird scheint es wohl nicht zu geben? Ich glaube ich entscheide mich einfach für eine Variante und denke dann nicht weiter drüber nach... ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
"Ich habe nun noch an anderer Stelle gelesen, dass bei Controllern mit NVRAM die RETAIN Daten eben einmal pro Zyklus dort abgespeichert werden und PERSISTENT nur beim geregelten Neustart/Ausschalten und nicht im NVRAM. Hier wären also auch die RETAIN-Daten Nullspannungssicher."

Das gilt bei Beckhoff CX9000-CX1030 aber nicht. Mit Persistent und retain werden die Daten nicht ins NVRAM gespeichert sondern ins Flash.

Was hast du für eine SPS?

Das Pdf dokument beschreibt codesys nicht die Umsetztung von Beckhoff. Was verstehst du unter Reset? Menu Online->Reset

Gruss

Thomas
 
Schließe mich dem an: guck ins Handbuch der Steuerung. Kenne die Thematik nur von WAGO und da ist es z. T. auch steuerungsabhängig, so dass man teilweise keine RETAIN PERSISTENT anlegen kann.
Also zumindest das Handbuch für den 750-841 erklärt den Zusammenhang (auch mit den Speicherbereichen) ganz gut, auch die Reaktionen auf die einzelnen Resets. Aber: nicht einfach auf Beckhoff übertragen sondern da mal das entsprechende Handbuch durchwälzen.
 
Ich benutze hier TwinCAT PLC auf einem "normalen" PC.
Mit Reset meine ich den Online-Reset in der PLC.
Und in der Online-Hilfe werden meine Fragen leider auch nicht so wirklich beantwortet.
Ich bin halt davon ausgegangen, dass die Spezifikation das Verhalten relativ klar vorgibt und nicht, dass da jeder Hersteller sein eigenes Süppchen kochen kann.

Worum es mir ja eigentlich geht ist, ob es negative Auswirkungen hat, wenn mein Retain-Bereich ca. 1MB oder noch größer wird. Und das nur weil es mehrere sehr grosse FBs gibt, die alle irgendwo einen ganz kleinen FB mit einer Retain-Variablen verwenden (z.B. gibt es in der Oscat-Lib ein paar FBs mit RETAIN-Variablen).
Im Prinzip kann ich mir das ja sparen und die entsprechenden Variablen auch einfach persistent machen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
"dass die Spezifikation das Verhalten relativ klar vorgibt und nicht, dass da jeder Hersteller sein eigenes Süppchen kochen kann"

ja das wäre schön ....


" auf einem "normalen" PC "

Dann hast du aber auch kein NVRAM
 
" auf einem "normalen" PC "

Dann hast du aber auch kein NVRAM
TwinCAT könnte aber so tun als gäbe es eins.
In der Online-Hilfe steht z.B.
"Ein Anwendungsbeispiel für Retain Variablen wäre ein Stückzähler in einer Fertigungsanlage, der nach einem Stromausfall weiterzählen soll"
Das dürfte sich dann wohl auf die Bus-Controller mit NOVRAM beziehen.
Denn wenn beim PC nur bei geregletem Neustart/Runterfahren gespeichert wird, würde das nichts bringen.
Aber wenn auch beim PC pro Zyklus gespeichert wird, würde das das System extrem ausbremsen.
 
"Worum es mir ja eigentlich geht ist, ob es negative Auswirkungen hat, wenn mein Retain-Bereich ca. 1MB oder noch größer wird. Und das nur weil es mehrere sehr grosse FBs gibt, die alle irgendwo einen ganz kleinen FB mit einer Retain-Variablen verwenden (z.B. gibt es in der Oscat-Lib ein paar FBs mit RETAIN-Variablen).
Im Prinzip kann ich mir das ja sparen und die entsprechenden Variablen auch einfach persistent machen"


Vom timing her sollte es keine Auswirkung haben. Da in deinem Fall die Retain-Daten am anfang einmal gelesen werden um beim beenden einmal geschrieben werden.

Wenn du aber etwas im FB veränderst, verlierst du die Retain-Daten.

Für mich ist es sauber wenn retain und Persitente Daten auch gleichzeitig Globale daten sind.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Beckhoff geht davon aus, dass eine USV verwendet wird, welche das Windows korrekt beendet.

Bei den PC- und ARM-Basierten SPS werden die Daten nicht mit den ausdrücken persitent und retain automatisch ins NVRAM gespeichert. Das muss man selbst machen (Im System Manager mit NVRAM verlinken oder über FB).
 
Ich habe bisher immer nur PERSISTENT genutzt, weil ich von der Beckhoff-Schulung noch im Kopf habe, dass PERSISTENT wirkliches "speichern" ist. Also Der letzte Wert vor dem PC-Reset bleibt erhalten.
Die Variablen werden nicht mit ihren Initialwerten überschrieben. Nur ein "Urlöschen" löscht diese Variablen wieder ab.
 
Ich habe bisher immer nur PERSISTENT genutzt, weil ich von der Beckhoff-Schulung noch im Kopf habe, dass PERSISTENT wirkliches "speichern" ist. Also Der letzte Wert vor dem PC-Reset bleibt erhalten.
Die Variablen werden nicht mit ihren Initialwerten überschrieben. Nur ein "Urlöschen" löscht diese Variablen wieder ab.

Zudem kann man die Dateien super über FTP wegsichern. Weiters wird wirklich alles gesichert, man kann nichts vergessen. Zudem kommt eine Änderung mit notwendigen Neustart des Systems bei meinen Anlagen nicht besonders gut.
Daher schließe mich Dir vollinhaltlich an.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Persistente Vars sind deutlich robuster, da diese mit Name, Typ und Daten gespeichert werden. Retain ist nur ein Block, passt der nicht mehr durch Änderungen zueinander wird es schwierig für die Daten.

Viele Grüße
 
Persistente Vars sind deutlich robuster, da diese mit Name, Typ und Daten gespeichert werden. Retain ist nur ein Block, passt der nicht mehr durch Änderungen zueinander wird es schwierig für die Daten.


Werden Persitente daten wirklich anders gespeichert als retain?

Falls die Persitenten Daten wirklich anders gespeichert werden, wie kann ich es einstellen, dass wenn ich die Daten erweitert habe ich nicht die einstellungen der anderen Daten verliere?

Was passiert mit einem struct ?
 
Hallo,

wenn Du das Speicherformat von beiden meinst ja, beide Daten werden aber letztlich in einer Datei gespeichert. Retain als fester Block, Resistent als einzelne Items. Änderst Du aber auch da einzelne Structs, wie willst dann die "alten" Persistent Daten noch laden?

Viele Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Änderst Du aber auch da einzelne Structs, wie willst dann die "alten" Persistent Daten noch laden?

Beim Starten werden die Daten initialisiert mit dem init Wert. Beim Öffnen der persitenten Daten werden die bekannten Variablen mit den Persitenten Daten gesetzt.

So hätte man in den alten Variablen den gespeicherten Wert und in den neuen Wert den init Wert. Das sollte machbar sein wenn der Variablen Name mit dem Variablen Wert gespeichert wurde und nicht nur ein Speicher abbild.

Das wäre doch eine gute Lösung oder? Kann das Twincat schon so etwas?

Gruss

Thomas
 
richtig Bührer, bei "PERSISTENT" werden die Daten per Variable gesichert und wieder geladen. Im Übrigen "belastet" NOVRAM sehr wohl das System, je nach System mehr oder weniger. Bei Verlinkung im System Manager wird im jedem Zyklus gesichert und NOVRAM ist auch nicht das Schnellste. Man kann aber auch SPS Bausteine nutzen, um Optimierungen zu machen - da muß man es selbst programmieren.

Viele Grüße
 
Bei einem CX9000 kann man nur mit dem SPS-Baustein arbeiten. 128K verlinken mit einem 255 MHz Arm Prozessor ist nicht möglich. Bei einem CX1010 / CX1020 kann verlinkt werden. Da gibt es auch nur 8k Nvram.

Gruss

Thomas
 
Zurück
Oben