Pointer auf FBs bei Wago 750-841 -> Fehler

Fuchks
2007-11-15
2007-11-19
  • Fuchks - 2007-11-15

    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:

    Rechteck : Array [1..cAnzahlRechtecke] of Pointer to VisualObjectType;
    n : usint;
    cAnzahlRechtecke : USINT := 2;
    Rechteck[1] := adr(Rechteck1); (* Pointer auf das erste Rechteck *)
    Rechteck[2] := adr(Rechteck2); (* Pointer auf das zweite Rechteck *)
    for n:= 1 to cAnzahlRechtecke do
       Rechteck[n]^.dwFillColor := 16#000000FF;
    end_for
    

    Dabei verursacht die Wago eine Exception NONCONTINUABLE.

    Weise ich allerdings die Farbe direkt zu, dann geht alles Problemlos.

       Rechteck1.dwFillColor := 16#000000FF;
       Rechteck2.dwFillColor := 16#000000FF;
    

    Auch ein Pointer direkt auf dwFillColor bricht mit demselben Fehler ab.

    Rechteck : Array [1..cAnzahlRechtecke] of Pointer to dword;
    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 *)
    for n:= 1 to cAnzahlRechtecke do
       Rechteck[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.

     

    Related

    Talk.ru: 1
    Talk.ru: 2

  • Fuchks - 2007-11-16

    Kann das Problem zumindest jemand nachvollziehen?

    Oder hab ich da einen Gedankenfehler im Code?

     
  • hugo - 2007-11-16

    meines erachtens muss der schleifenzähler n ein integer sein usint ist laut codesys hilfe dort nicht zulässig

     
  • Fuchks - 2007-11-19

    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!

     

Log in to post a comment.