# Retain



## RobiHerb (6 Oktober 2010)

Umgebung CoDeSys 2.x.

Nach dem Anlegen von neuen RETAIN Variablen und Download des Programms stehen in den bisher vorhandenen RETAIN Variablen Schrott Werte!

Anscheinend verschiebt sich der Speicherbereich (wäre auch logisch).

Wie sollte man vorgehen, dass die neuen RETAINs hinten angehängt werden und somit die Position der vorhandenen Daten sich nicht ändert?

Unser Trick ist bisher, einfach in Reserve eine Reihe von Daten anzulegen und aus diesem Pool bei Bedarf durch Umbenennung die neuen Variablen zu generieren.


----------



## Markus Rupp (6 Oktober 2010)

Der Recource-Allocator funktioniert meines wissens nach so, das je nachdem wo die deklaration stattfindet allociert wird.

heißt wenn die linkorder bzw, die struktur des programms x aufweist und du vor x den programmteil y einfügst, ändern sich auch die adressen.

unser trick dabei ist es die variablen entweder global anzulegen und den var so zu strukturieren das die neuen dann darunter geschrieben werden oder ebend deine variante, ich lege einen array an der indirekt angesprochen wird und so dimensioniert wird das er eine sinnvolle reserve beinhaltet, zweiteres ist für meinen geschmack zwar nicht immer schön, aber funktional das beste was ich bisher gefunden habe.


----------



## bits'bytes (6 Oktober 2010)

Hallo,

verwendet ihr keine Default-Werte ? 

Wie werden die Werte beim Kunden initialisiert falls die CPU mal getauscht wird? Dann gehen ja alle Werte verloren. Kann er die dann eingeben ? Ich meine weiß er was er eingeben muss ?

Danke für die Info
bg
bb


----------



## Markus Rupp (6 Oktober 2010)

die initialwerte werden folgendermassen initialisiert:

über ein retain welches bool high aufweißt wird einmalig ein FB aufgerufen welcher die initialisierung als konstanten beinhaltet und via move in den array schreibt, nach dem dies geschehen ist wird der fb obig benannte retain-var auf bool low setzen, was bewirkt das der fb nicht mehr aufgerufen wird.

so machen wir es, hat den positiven nebeneffekt das ma in einem einzigen blick alle initialwerte sieht. und bei bedarf (und entsprechender programmierung) auch während der runtime quasi auf "werkseinstellungen" zurücksetzen kann.


----------

