Habe in der Visualisierung einige Rechtecke, die je nach einem Wert drei verschiedene Farben annehmen sollen. Dazu ist es notwendig die Rechtecke programmierfähig zu machen und einen Namen für jedes Element zu vergeben. Um bei Veränderung der Anzahl der Rechtecke möglichst flexibel zu bleiben, wollte ich die Namen zentral in einem Array von Pointern auf die Rechtecke verweisen lassen. Der Zugriff auf die Farbe erfolgt per .dwFillColor, allerdings stürtzt mir die Wago bei dem Versuch einer Zuweisung eines Wertes über die Dereferenzierung ab.
Beispiel:
Rechteck : Array [1..cAnzahlRechtecke] ofPointertoVisualObjectType;n : usint;cAnzahlRechtecke : USINT :=2;Rechteck[1] :=adr(Rechteck1); (* Pointer auf das erste Rechteck *)Rechteck[2] :=adr(Rechteck2); (* Pointer auf das zweite Rechteck *)forn:=1tocAnzahlRechteckedoRechteck[n]^.dwFillColor :=16#000000FF;end_for
Dabei verursacht die Wago eine Exception NONCONTINUABLE.
Weise ich allerdings die Farbe direkt zu, dann geht alles Problemlos.
Auch ein Pointer direkt auf dwFillColor bricht mit demselben Fehler ab.
Rechteck : Array [1..cAnzahlRechtecke] ofPointertodword;n : usint;cAnzahlRechtecke : USINT :=2;Rechteck[1] :=adr(Rechteck1.dwFillColor); (* Pointer auf das erste Rechteck *)Rechteck[2] :=adr(Rechteck2.dwFillColor); (* Pointer auf das zweite Rechteck *)forn:=1tocAnzahlRechteckedoRechteck[n]^ :=16#000000FF;end_for
Im Onlinemodus wird die Dereferenzierung des Pointers auf die Rechtecke ja mit angegeben, dort scheint alles, so wie es sein soll: dwFillColor hat den Wert, den ich in der Vis vorher zugewiesen habe.
Jemand eine Idee, woran das liegt, oder ist das so generell nicht möglich oder ist das ein Fehler der Wago?
Über Hinweise, wie man herausfindet, wo genau das Problem liegt, wäre ich dankbar.
Interessant ist, dass es bei einer anderen For-Schleife mit einem Array mit Schleifenzähler n als USINT bei ähnlichem Aufbau - aber ohne Pointer - problemlos funktioniert!
Wenn man schon mal sparsam coden will...
Wie auch immer, es geht jetzt und ich bin dafür sehr dankbar!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Vorgeschichte:
Habe in der Visualisierung einige Rechtecke, die je nach einem Wert drei verschiedene Farben annehmen sollen. Dazu ist es notwendig die Rechtecke programmierfähig zu machen und einen Namen für jedes Element zu vergeben. Um bei Veränderung der Anzahl der Rechtecke möglichst flexibel zu bleiben, wollte ich die Namen zentral in einem Array von Pointern auf die Rechtecke verweisen lassen. Der Zugriff auf die Farbe erfolgt per .dwFillColor, allerdings stürtzt mir die Wago bei dem Versuch einer Zuweisung eines Wertes über die Dereferenzierung ab.
Beispiel:
Dabei verursacht die Wago eine Exception NONCONTINUABLE.
Weise ich allerdings die Farbe direkt zu, dann geht alles Problemlos.
Auch ein Pointer direkt auf dwFillColor bricht mit demselben Fehler ab.
Im Onlinemodus wird die Dereferenzierung des Pointers auf die Rechtecke ja mit angegeben, dort scheint alles, so wie es sein soll: dwFillColor hat den Wert, den ich in der Vis vorher zugewiesen habe.
Jemand eine Idee, woran das liegt, oder ist das so generell nicht möglich oder ist das ein Fehler der Wago?
Über Hinweise, wie man herausfindet, wo genau das Problem liegt, wäre ich dankbar.
Related
Talk.ru: 1
Talk.ru: 2
Kann das Problem zumindest jemand nachvollziehen?
Oder hab ich da einen Gedankenfehler im Code?
meines erachtens muss der schleifenzähler n ein integer sein usint ist laut codesys hilfe dort nicht zulässig
Danke, das war genau der richtige Hinweis!
Interessant ist, dass es bei einer anderen For-Schleife mit einem Array mit Schleifenzähler n als USINT bei ähnlichem Aufbau - aber ohne Pointer - problemlos funktioniert!
Wenn man schon mal sparsam coden will...
Wie auch immer, es geht jetzt und ich bin dafür sehr dankbar!