# Persistente oder Remanente daten??



## COOLT (29 Juli 2009)

Hey Leute ich würde gerne bei meine Programm auf die Initialisierung

```
PROGRAM Benutzerlisten_Initialisierung
VAR
    Benutzerliste: ARRAY[1..Max_Benutzer] OF Struct_User;
    Initialisiert: BOOL;
    i: INT;
END_VAR

IF NOT Initialisiert THEN
Benutzerliste[1].sUserID:='1010101';
Benutzerliste[1].sUserlvl:='Admin';
Benutzerliste[1].sUserName:='Mann1';
Benutzerliste[2].sUserID:='2020202';
Benutzerliste[2].sUserlvl:='Techniker';
Benutzerliste[2].sUserName:='Mann2';
Benutzerliste[3].sUserID:='3030303';
Benutzerliste[3].sUserlvl:='Admin';
Benutzerliste[3].sUserName:='Frau';
Initialisiert:=TRUE;
END_IF;
```
Verzichten, da ich die Benutzerliste über eine Visualisierung selber editieren kann, und nach einem system reset alle daten futsch sind aus die initialisierungs daten.
Könntet ihr mir da vielleicht weiterhelfen und mir sagen welche ich denn am besten nehmen sollte? Und mir dann auch gleich erklären wie ich das hinbekomme, dass die Daten dementsprechend gespeichert werden?

Mfg
COOLT


----------



## Cerberus (29 Juli 2009)

Gehe ich richtig in der Annahme, dass du weiterhin mit dem CX1100 arbeitest?


----------



## COOLT (29 Juli 2009)

Jap is immer noch das gleiche grundprogramm wozu ich so wunderbarviele hilfestellungen bekomme habe von euch.


----------



## Cerberus (29 Juli 2009)

Hab *hier* lediglich eine Anleitung für den CX1000 gefunden. Musst mal schauen, wie du damit zurecht kommst und ob es so auch mit dem CX1100 funzt.


----------



## uncle_tom (29 Juli 2009)

Cerberus schrieb:


> Hab *hier* lediglich eine Anleitung für den CX1000 gefunden. Musst mal schauen, wie du damit zurecht kommst und ob es so auch mit dem CX1100 funzt.



genau so geht´s - hab ich selber schon ausprobiert.


Persistent und remanent funktioniert nur wenn das Twincat System ordentlich heruntergefahren wird - also kein Spannungsausfall. Das lässt sich also nur mit einer USV realisieren.

Als Alternative könntest du auch persistente Variablen definieren und diese zur Laufzeit des Programms per FB in gewissen Zeitabständen sichern - aber nicht zu oft, sonst ist irgendwann der Flash kaputt - dann hast du zumindest eine gewisse Remanenz (die Datenänderungen seit der letzen Sicherung gehen halt dann verloren).


----------



## COOLT (30 Juli 2009)

Kann mir jemand vielleicht mal ein Beispiel für den _FB_NovRamReadWrite_-Funktionsbaustein schreiben?
Ich versteh nich so ganz wie ich den deklarieren soll weil die Dokumentationen von Beckhoff voll fürn arsch sind.


----------



## Cerberus (30 Juli 2009)

Also wenn ich die Anleitung richtig verstanden habe, muss kein extra FB geschrieben werden. Laut Anleitung musst du die Variablen, die du sichern möchtest lediglich als Ausgang zu deklarieren und dann im Systemmanager mit dem NOVRAM-Gerät zu verbinden. Aber keine Gewähr. Ich habe lediglich die Anleitung interpretiert und die ganze Thematik noch nie praktisch ausprobiert.


----------



## Chräshe (30 Juli 2009)

Hallo COOLT,

  die Tatsache, dass persistente und remanente Variablen nur persistent und remanent sind, wenn das Twincat System ordentlich heruntergefahren wird, finde ich miserabel. :evil:
  Hier sollte Beckhoff unbedingt nachbessern.
  Allerdings kann man sich recht gut mit dem NOVRAM behelfen. Die entsprechenden Variablen müssen nur als Ausgang (%Q*) deklariert und mit dm 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!

  Ich lege nur Zähler und schnell ändernde Variablen im NOVRAM ab. Rezepturen und andere zu speichernde Daten, die sich nur gelegentlich ändern, lege ich als Datei auf einem USB- Stick ab. Dieser wird nach dem Einschalten einmalig gelesen und nur nach Änderung beschrieben…

  Gruß
  Chräshe


----------



## zotos (30 Juli 2009)

Chräshe schrieb:


> Hallo COOLT,
> 
> die Tatsache, dass persistente und remanente Variablen nur persistent und remanent sind, wenn das Twincat System ordentlich heruntergefahren wird, finde ich miserabel. :evil:
> Hier sollte Beckhoff unbedingt nachbessern.
> ...



Schau Dir mal folgenden Link an:
http://infosys.beckhoff.com/index.p.../TcPlcLibUtilities_FB_WritePersistentData.htm

Man hat also auch die Möglichkeit darauf Einfluss zu nehmen.


----------



## uncle_tom (30 Juli 2009)

zotos schrieb:


> Schau Dir mal folgenden Link an:
> http://infosys.beckhoff.com/index.p.../TcPlcLibUtilities_FB_WritePersistentData.htm
> 
> Man hat also auch die Möglichkeit darauf Einfluss zu nehmen.



Das hab ich ja auch schon erklärt. Einen gewissen Datenausfall hat man aber auch damit, da man ja nicht permanent auf den Flash schreiben kann.

Am elegantesten lässt sich das ganze mit einer USV lösen, die dann dem Twincat-System einen Spannungsausfall mitteilt und dieses dann einen Shutdown auslöst.


----------



## COOLT (31 Juli 2009)

Danke euch Leute werde das dann mal ausprobieren.


----------



## Chräshe (5 August 2009)

zotos schrieb:


> Schau Dir mal folgenden Link an:
> http://infosys.beckhoff.com/index.p.../TcPlcLibUtilities_FB_WritePersistentData.htm
> 
> Man hat also auch die Möglichkeit darauf Einfluss zu nehmen.



   @ zotos
  klar kenne ich den Link. Nur finde ich, dass eine SPS persistente und remanente Variablen haben sollte, ohne dass man Kopfstände machen muss. Bei den kleinen Steuerungen von Beckhoff  geht das, bei den „großen“ PC- basierenden geht das nicht mehr…  sehr schade…:sb8:

  Gruß
  Chräshe


----------



## Rifel (11 August 2009)

*Remanente Merker*

Hi,
also ich habe folgende Erfahrungen gemacht. Wenn man ein NOV DP RAM zu Verfügung hat. Einfach den z.B. Merker als Ausgang deklarieren also Q%.. und dann im Systemmanager unter dem Unterpunkt NOV/DP Ram einen Ausgang erstellen diesem dem Datentyp zuweisen also BIT WORD us.w und dann mit dem vorher in der Variablendeklaration erstellten Ausgang verlinken wie bei einer EA Karte mit einer Variable. Und schon ist der Wert Remanent. 
Das mit den Persiten Daten (weiß nicht ob das grammatikalisch richtig ist aber wisst was ich meine) geht indem man Sie unter VAR_persitent in der Variablendeklaration einträgt und funktioniert definitv nur mit einer USV da erst bei Spannunsausfall an der Klemme der CX die Werte speichert!
MfG Thomas


----------



## COOLT (11 August 2009)

o.k. soweit hab ich das jetz verstanden geht das ganze auch mit Arrays? z.B.: soll eine Benutzerliste als Array beschrieben werden und dann in dem Nov RAM abgespeichert werden. geht das auch?


----------



## Cerberus (14 August 2009)

COOLT schrieb:


> o.k. soweit hab ich das jetz verstanden geht das ganze auch mit Arrays? z.B.: soll eine Benutzerliste als Array beschrieben werden und dann in dem Nov RAM abgespeichert werden. geht das auch?



Was du auf jeden Fall machen kannst ist, dass du für jedes Element deines Arrays eine eigene Variable im Unterpunkt NOV/DP-RAM erstellst.


----------



## COOLT (14 August 2009)

Und wie soll das gehen? Soll ich alle 200 Arrayunterpunkte mit nem ausgang belgen? oder geht das iwie mit ner schleife? und wie ordne ich die dann alle dem gleich ausgang zu? *Verwirrt bin*

Mfg
COOLT


----------



## Cerberus (14 August 2009)

Vergiss es. Bei 200 Elementen hat das keinen Sinn. Du müsstest nämlich alles von Hand anlegen und verknüpfen. Das lohnt sich nicht.


----------

