Prinzipieller Programmaufbau Globaler Variablen

Wu Fu

Level-1
Beiträge
283
Reaktionspunkte
32
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe eine Frage zum prinzipiellen anlegen von (globalen) Variablen.
Ich hatte vor langer Zeit ein Problem mit Wago Controllern, wenn die Hardware verändert wurde (I/Os dazu oder weg) haben sich interne Speicherbereiche verschoben und die retain und/oder persistent Variablen hatten andere (falsche) Werte.
Daraufhin bin ich dazu übergegangen, alle retain/persistent variablen global zu speichern. Dies war laut damaliger Aussage vom Support die bessere Variante.

Nun werden aber die Programme mittlerweile immer unübersichtlicher, ich würde zukünftig gerne die Variablen wieder im entsprechenden Programmteil anlegen.
Seht Ihr hier ein Problem, bekomme ich wieder Probleme mit den retain/persistent Variablen?

Wie legt Ihr eure retain/persistent Variablen an um kein Problem bei I/O-Erweiterungen zu bekommen?

Schöne Grüße
Daniel
 
Moin,
Du könntest Merker verwenden und diese als Retain und/oder Persistent deklarieren, da Merker auch im nicht flüchtigen Speicherbereich liegen. Damit hat eine Variable immer eine fixe Adresse im Speicher.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin
Bei einer Veränderung der Hardware ist das normal das die Daten nicht stimmen. Daher gibt es bei den meisten Steuerungen die Möglichkeit die Retain Dateninhalte zu speichern und später wieder zuladen. Manche machen das auch über "Rezepte"



Sent from my iPhone using Tapatalk
 
Vielen Dank für eure Antworten, hierzu hätte ich noch folgende Fragen.

Du könntest Merker verwenden und diese als Retain und/oder Persistent deklarieren
Hierzu würde ich in der Variablendeklaration unter Adresse den Merkerbereich angeben und die Variabel natürlich als reatin und persistent deklarieren, richtig?
Wenn das klappt scheint es eine gute Lösung zu sein, ich muss mir nur noch eine Strategie überlegen, wie ich den Überblick behalte, welche Merker bereits belegt sind.

die Möglichkeit die Retain Dateninhalte zu speichern und später wieder zuladen
Meinst Du über den PLC-Browser?
So sichere ich mir die Daten momentan bereits.
Funktioniert das auch, wenn sich die Speicherbereich nach einer Hardwäreänderung in einem anderen Speicherbereich befinden?
Ich kenne leider den Mechanismus dahinter nicht.

Schöne Grüße
 
Entweder jede Variable auf einen einzelnen Merkerbereich, oder eine eigene Struktur.
VAR RETAIN PERSISTENT
wVar_01 AT %MW0: BOOL;
xVar_02 AT %MX1.0: WORD;
xVar_03 AT %MX1.1: WORD;
END_VAR

VAR RETAIN PERSISTENT
typVarSet AT %MW0: myVar;
END_VAR

TYPE myVar :
STRUCT
xVar_11 : BOOL;
wVar_12 : WORD;
xVar_13 : BOOL;
END_STRUCT
END_TYPE

Speichern und Laden aller Retain-Variablen geht mit der SysLibPLcCtrl.lib
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Funktioniert das auch, wenn sich die Speicherbereich nach einer Hardwäreänderung in einem anderen Speicherbereich befinden?

Das Prozessabbild (HW-Änderungen) liegt in einem seperaten Speicherbereich und stellt sicher kein Problem dar, aber beim Hinzufügen neuer Variablen kommt unter umständen blödsinn bei raus.
 
Hallo KLM,

vielen Dank für Deine Antwort.
Die erste Variante mit einzelnen Mekerbereichen scheint mir sympathischer.
Ich muss mir dann nur gewissenhaft immer die benutzen Merker notieren.

Die SysLibPLcCtrl.lib scheint mir das gleiche zu machen wir die PLC-Browser Befehle saveretain und restoreretain nur mit dem Unterschied, dass ich den Namen selbst festlegen kann.

Das Prozessabbild (HW-Änderungen) liegt in einem seperaten Speicherbereich und stellt sicher kein Problem dar, aber beim Hinzufügen neuer Variablen kommt unter umständen blödsinn bei raus.
Wenn ich Dich richtig verstehe.
Bei Verwendung von Merkern siehts du kein Problem bei HW-Änderungen
Bei Verwendung von Merkern siehts du evtl ein Problem beim Hinzufügen neuer Variablen?

Mhh, da müsste ich mir mal Hardware besorgen und das testen.
So wie ich dass mit den Variablen in Erinnerung habe als ich dies im Programm und nicht global abgelegt habe, hatte ich nicht immer das Problem sondern nur manchmal, warum auch immer.
Ich habe nur die Befürchtung dass beim Test im Büro alles klappt und an der Anlage dann doch wieder nicht.

Schöne Grüße
Daniel
 
Bei Verwendung von Merkern siehts du kein Problem bei HW-Änderungen
Richtig. Kein Problem, weil andere Speicherbereiche.

Bei Verwendung von Merkern siehts du evtl ein Problem beim Hinzufügen neuer Variablen?
Kein Problem, solange Du nicht die Merker durchander bringst. Einen weiteren Retain Merker hinten anhängen geht aber.
Weitere "normale" Retain Variablen sollte auch gehen, das aber bitte testen.
Edit: Bei letzterem tritt natürlich wieder das Eingangsproblem auf, nur die Retain Merker sollten gleich bleiben ;)
 
Zuletzt bearbeitet:
Zurück
Oben