# Codesys bzw. TwinCAT PLC-Control



## MarkusP (4 Februar 2008)

Guten Abend!

Ich arbeite nun schon geraume Zeit (nun genau 1 Jahr) mit TwinCAT PLC-Control und habe auch schon etliche Projekte realisiert. Je mehr ich damit arbeite und die vielfältigen Möglichkeiten langsam zu realisieren beginne, bewahrheitet sich aber auch gleichzeit für mich der Satz: "Ich weiss, dass ich nichts weiss".

Nun doch zu meinem aktuellen Problem und Frage. Ich hoffe es kann mir jemand weiterhelfen.

Ich arbeite sehr viel mit Strukturen. Die instanzierten Variablen werden dann einem zugehörigen FB z.B. als Eingangsvariablen mitgegeben. Dies hat für mich einfach den Vorteil, dass der Baustein nich x-Eingangs- oder Ausgangsvariablen hat. Da ich aber nicht allwissend bin, passiert es natürlich, dass die Struktur um Variablen erweitert werden muss.

Dabei ist mir öfters aufgefallen, dass danach die Werte der Variablen in der Struktur "weg" waren. Mir wurde daraufhin gesagt, dies sei ein normales Verhalten, da ja das dann eine "NEUE" Variable sei, die dann initialisiert wird.

Ich habe das jetzt nachgestellt (allerdings nur mit einer handvoll Strukturelemten) und auch nach Änderung, also hinzufügen, ja sogar löschen von Strukturelementen, waren die Werte der Variablen nicht weg, alle hatten ihren richtigen Wert, wie vor der Änderung.

Sind hier bestimmte Regeln zu beachten?

Weiters ist mir aufgefallen dass auch nach einem Online-Change manchmal der Inhalt von Variablen verloren geht. Ist so ein Verhalten TwinCAT-spezifisch oder liegt das Problem (wenn es eines gibt) bei Codesys?

Für weiterführende Hilfe wäre ich sehr dankbar,

LG

MarkusP.


----------



## Werner29 (5 Februar 2008)

Hallo Markus,

beim Online Change müssen natürlich alle alten Variablenwerte erhalten bleiben und alle neuen Variablen initialisiert werden. Das gilt auch für Strukturen. Wenn du eine Struktur um eine Komponente erweiterst, dann werden alle Variablen von diesem Typ umkopiert. Die alten Komponenten behalten ihren Wert, die neuen werden initialisiert.
Jetzt kann ich natürlich mit Deinem "manchmal geht der Inhalt von Variablen verloren" wenig anfangen. Ich kann dir nur sagen, so sollte es nicht sein.
Grundsätzlich ist das Verhalten beim Online Change in Twincat und Codesys das gleiche.

Bernhard


----------



## MarkusP (5 Februar 2008)

Danke für die beruhigende Antwort! Aufgrund eines älteren Beitrages schließe ich darauf, dass Sie von 3S sind?!

Kann es doch einen Grund geben (Fehler meinerseits), dass Daten irgendwie "verloren" gehen?

Zitat: Wenn man vergisst das Bootprojekt zu erzeugen, dann hast du in den persistenten Daten die neuen Strukturen und beim nächsten Hochstart mit dem alten Bootprojekt passen diese nicht zusammen und werden verworfen...

Das wäre für mich eventuell schon eine Erklärung. (Fehler meinerseits)

Kann beim Umkopieren der Strukturelemente in die neuen Elemente ein Fehler passieren? Bei einem Freund von mir gab es nach einem Online-Change offenbar sogar Überlappungen mit Hardwareadressen. Dies war aber auch nicht mehr nachvollziehbar. 

Villeicht ist es auch bloß eine Einstellungssache...

Ich muss dazu sagen, dass wir in den Projekten einige hunderte (wenn nicht tausende) Variablen haben, und dieses Problem "mit verloren gegangenen" Variableninhalten erst einige male bei vereinzelten Variablen aufgetreten ist, und die Ursache für für mich nicht nachvollziehbar war bzw. reproduzierbar ist. Es verunsichert mich halt nur ein bißchen und ich kenne ja den genauen Mechanismus des ONLINE-Changes nicht. Zudem könnte ich aber auch nicht immer alle Variablen kontrollieren.  

Vielen Dank nochmal!

LG

Markus.


----------



## MarkusP (12 März 2008)

Werner29 schrieb:


> beim Online Change müssen natürlich alle alten Variablenwerte erhalten bleiben und alle neuen Variablen initialisiert werden. Das gilt auch für Strukturen. Wenn du eine Struktur um eine Komponente erweiterst, dann werden alle Variablen von diesem Typ umkopiert. Die alten Komponenten behalten ihren Wert, die neuen werden initialisiert.
> Jetzt kann ich natürlich mit Deinem "manchmal geht der Inhalt von Variablen verloren" wenig anfangen. Ich kann dir nur sagen, so sollte es nicht sein.
> Grundsätzlich ist das Verhalten beim Online Change in Twincat und Codesys das gleiche.
> Bernhard


 
Hatte gerade gestern wieder das Phänomen, dass nach einer Strukturerweiterung alle Variablen in allen Instanzen initialisiert, also Null waren :shock:. Ich hatte eine Variable mitten in der Struktur hinzugefügt, und dachte dass dies vielleicht der Grund sein könnte. Habe heute versucht das hier im Büro nachzustellen, aber es ist nach Hinzufügen der Variable kein Datenverlust festzustellen, d.h. die Strukturen wurden brav umkopiert. (wie von Dir beschrieben) Was läuft hier nur schief . Vielleicht kann mir wer weiterhelfen.

Schönen Abend noch!


----------



## trinitaucher (12 März 2008)

Ich hatte auch schon einige seltsame Effekte mit PLC Control, aber es hat mich ehrlich gesgt bisher nie gestört.
Man weiß leider nicht genau, wie TwinCAT intern die Speicherbelegung organisiert. Es wird ja ein Byte-Alignment verwendet.
Wenn eine Struktur erweitert wird, muss auch der Arbeitsspeicher neu organisiert werden. Zudem werden, glaube ich, intern für Strukturen und sonstige Variablen (Byte / Boolsche Variablen) jeweils separate "IndexGroups" genutzt (ADS).
Mag sein, dass es damit was zu tun hat...


----------



## MarkusP (12 März 2008)

Hast Du Deine "seltsamen Effekte" jemals (z.B. bei Beckhoff) hinterfragt? Für mich ist nämlich Datenverlust so ziemlich das schlimmste. Wir haben uns zwar einen DataLoader (C##) programmiert, aber das ist erstens bei 1000en Variablen zeitaufwendig und zweitens will ich das eigentlich nicht. Weiters hasse ich nichts mehr, als wenn etwas nicht mehr nachvollziehbar bzw. reproduzierbar ist.


----------



## Techniker (16 März 2008)

Wie sind deine Variablen denn deklariert?

VAR_GLOBAL: 
- nicht remanent, behalten bei Programmdownload ihren Wert *nicht*

VAR_GLOBAL RETAIN
- remanent, behalten bei Programmdownload ihren Wert *nicht

*VAR_GLOBAL PERSISTENT
- nicht remanent, behalten ihren Wert bei Programmdownload

VAR_GLOBAL RETAIN PERSISTENT
- remanent, behalten ihren Wert bei Programmdownload 

Bitte schau dir das mal im Handbuch an!


----------



## MarkusP (18 März 2008)

Habe das Problem jetzt mit dem Support der Firma Beckhoff auflösen können. Wenn ein Programm eingeloggt wird, bei dem kein Online-Change mehr möglich ist (steht bei Dialog in Klammer), dann werden alle geänderten Datentypen neu initialisiert! Dieses Verhalten finde zurzeit aber nicht einmal in der Doku. Da ich sehr viel Offline also im Büro arbeite, kann das durchaus passiert sein. Das Problem  lässt sich auch leicht jederzeit nachvollziehen: Ausloggen, Struktur ändern, Einloggen und danach aber <Alles Laden> wählen. Dies verhält sich genauso als wie ein Einloggen, bei dem ein Online-Change nicht möglich ist. Also Vorsicht beim Einloggen von Programmen. Ich wollte euch diese Info nicht vorenthalten.


----------



## trinitaucher (18 März 2008)

Danke!
Gut zuwissen!


----------

