Codesys 2.3.9.55 Constante verändert sich

Welded

Level-1
Beiträge
2
Reaktionspunkte
0
Hallo,
es tritt das Problem auf, dass sich eine in VAR_GLOBAL CONSTANT gesetzte Konstante verändert, sobald das Programm gestartet wird. Im Programmablauf verändert sie sich dann erneut, auf einen reproduzierbaren Wert, die aber nicht logisch ist, also nicht im Code oder als Ausdruck vorkommen.
Es wird an vielen Stellen auf die Konstante zugegriffen, so dass ich nicht leicht die Codestellen auskommentieren kann, die in Frage kommen. Alle Zugriffe sind natürlich ohnehin nur lesend, Schreibzugriff auf eine Konstante sollte ja auch hoffentlich einen Fehler werfen.
Die veränderte Konstante führt im weitern Programmablauf dann zu Fehlern, sie wird als Index für Arrayzugriffe verwendet, was dann natürlich einen out of bounds Fehler wirft - aber das ist ja nur ein Symptom.
Zur Verdeutlichung hier mal Screenshots:
FehlerConstante.jpg
Hat jemand von euch eine Idee, woran das liegen könnte? Eine Constante sollte sich doch eigentlich nie ändern, oder?

Viele Grüße
Welded
 
Hallo Welded
Schreibzugriff auf eine Konstante sollte ja auch hoffentlich einen Fehler werfen
Wenn im Programm schreibend darauf zugegriffen wird kommt Fehler 4020.
Was allerdings geht ist ein schreibender Zugriff über die Visu. Hier wird kein Fehler generiert und man kann die Constante ändern.
Holger
 
Wenn im Programm schreibend darauf zugegriffen wird kommt Fehler 4020.
Was allerdings geht ist ein schreibender Zugriff über die Visu. Hier wird kein Fehler generiert und man kann die Constante ändern.
Man kann sich auf nichts mehr verlassen, ausser auf Murphy!
Der hat in weiser Voraussicht gesagt "Alle Konstanten sind variabel".
 
Ob man Konstanten über die Visu ändern kann kann ich auf die Schnelle nicht sagen/prüfen, aber verschieb die Deklaration mal, z.B. an den Anfang der GVL oder in eine eigene GVL, dadurch müsste sich die Adresse der Konstanten ändern. Falls die Ursache ein amoklaufender Pointer oder eine Bereichsüberschreitung beim Schreiben in ein Array ist müsste jetzt in einer anderen Variable Schrott drin stehen.
Zeig doch bitte mal, was vor der Konstanten deklariert wird.

Von irgendwas mit Internetzugang gesendet.
 
Zuletzt bearbeitet:
Ok, ich habe die Lösung scheinbar gefunden. Ich habe an einem anderen Rechner (mit einer anderen Codesysinstallation, aber gleiche Version) das Programm mit dem Problem geöffnet. Und da trat das Phänomen nicht auf.
Dann habe ich es noch mal auf dem ursprünglichen Rechner probiert, und das Problem war wieder da. Es schien also an der Codesys Installation zu hängen. Ich habe dann Codesys einmal neu installiert, und das Problem war weg.
Das ist zwar für mich erstmal ein schönes Ergebnis, aber trotzdem finde ich es bedenklich, dass solche Fehler zufällig auftreten. Was wäre gewesen, wenn die geänderte Konstante keinen out of bounds Fehler produziert hätte? Dann hätte ich das vielleicht nie gemerkt, aber irgendein Steuerungswert wäre Falsch gewesen. Aber ich finde es auch schwer, dazu einen Bugreport zu schreiben, weil ich das Problem ja jetzt selbst nicht mehr reproduzieren kann.
Trotzdem vielen dank für eure Antworten. Deine Idee oliver.tonn, die Deklaration in eine andere GVL zu packen um die Adresse zu ändern ist auf jeden Fall gut. Das werde ich als erstes Testen, wenn ich so ein Problem nochmal sehe.

PS: Falls jemand aus persönlichem Interesse dem Problem noch weiter auf den Grund gehen möchte, und dazu mehr Infos braucht, einfach kurz melden.

Viele Grüße
Welded
 
Zurück
Oben