# Deklaration Konstanten PLC-Control



## MarkusP (14 Februar 2011)

Ich hätte da wieder einmal eine Frage an Euch. Eigentlich etwas ganz banales, aber offenbar doch nicht...

Eine über VAR CONSTANT deklarierte Variable erhält ja den ihr im Code zugewiesenen Wert. Als ich später einmal im Code den Wert der Konstante änderte (das dachte ich zumindest), war das Erstaunen groß, dass der Inhalt der "Variablen" nachwievor der alte war. Ich musste die Steuerung zurücksetzen, damit der Wert des Codes übernommen wurde! Damit würde sich die Konstanten ja gleich verhalten wie eine "normale" Variable, die mit einem Startwert initialisert wird 

Kann mir das jemand erklären? (in der Doku finde ich weder bei Beckhoff noch bei 3S etwas darüber)

Danke und schönen Abend!


----------



## Mario_K (15 Februar 2011)

Hallo Markus,

laut meinem Verständnis für Konstanten behält diese den initialisierten Wert und kann nicht vom Code aus überschrieben werden.
Eine normale Variable wird immer auf 0 initialisiert. Möchte man einen anderen Wert am Anfang in der Variable stehen haben muss man dies mit einer Initialisierung machen. Egal ob mit oder ohne eigener Initialisierung sind normale Variablen aber immer vom Code schreibbar.

Grüße, Mario


----------



## StructuredTrash (15 Februar 2011)

Bei der Standardeinstellung des Compilers werden Konstanten tatsächlich im Datenspeicher abgelegt. Es sind sozusagen initialisierte Variablen mit Schreibschutz. Merken tut man das manchmal, wenn man zu viele Online Changes gemacht hat und die Speicherbereiche nicht mehr richtig reorganisiert werden. Dann ändern sich auch schon mal die Werte von Konstanten.
Um dies zu vermeiden, kannst Du im PLC Control unter "Projekt/Optionen/Übersetzungsoptionen" den Punkt "Konstanten ersetzen" einschalten. Dann schreibt der Compiler die Konstantenwerte direkt in das Programm. Hat ausserdem den Vorteil, dass man dann Konstanten als Bitselektor in Integervariablen verwenden kann (statt WordVar.5 WordVar.NameVonBit5).


----------



## MarkusP (15 Februar 2011)

Mario_K schrieb:


> Hallo Markus,
> laut meinem Verständnis für Konstanten behält diese den initialisierten Wert und kann nicht vom Code aus überschrieben werden.


 
Ich meinte mit Code natürlich richtigerweise in der Variablendeklaration. Und das funktioniert dann nicht. Den Wert der Variable kann man jedoch jederzeit ändern. (z.B. in einer Watchliste)

Ich werde einmal die Compiler Option wie von StructuredTrash beschrieben testen.

Danke für Eure Antworten


----------

