Struct mit Struct initialisieren

schlittk

Level-2
Beiträge
49
Reaktionspunkte
6
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

wie kann ich ein Struct in der GLV initialisieren, welches ein weiteres Struct enthält?

Bsp.:

TYPE Position_Struct :
STRUCT
diX : DINT; //X-Koordinate
diY : DINT; //Y-Koordinate
diZ : DINT; //Z-Koordinate
END_STRUCT
END_TYPE

TYPE PositionList_Struct :
STRUCT
positionList : ARRAY [0..2] OF Position_Struct;
END_STRUCT
END_TYPE

PositionList_Struct soll initialisiert werden.

Danke!
 
Was ich noch dazu sagen kann, ist dass die beiden Structs in einer Bibliothek liegen und ich sie in einem Projekt initialisieren möchte.
Eine Initialisierung in der Bibliothek funktioniert mit folgendem Aufruf ohne Syntaxfehler.

positionsLeftAxisSystem : PositionList_Struct := ( positionList := [(diX := 1, diY := 2, diZ := 3),(diX := 1, diY := 2, diZ := 3),(diX := 1, diY := 2, diZ := 3)] );
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Warum rufst du im POU nicht die den ersten Struct als Array auf? Dafür musst du nicht noch einen weiteren Struct anlegen, der eigentlich nichts macht.
 
Der direkte Aufruf funktioniert. Mich würde aber schon interessieren wie es mit einem zweiten Struct funktioniert.
 
Dann verstehe ich wohl nicht was du genau möchtest.

Du hast einen Struct mit 3 Koordinaten. Diesen hast du dann noch mal in ein Array gepackt. Das könntest du auch im POU tun.

Oder meinst du es so?
Code:
TYPE test1 :
STRUCT
    a : BOOL; 
    b : INT; 
    c : STRING;
END_STRUCT
END_TYPE
Code:
TYPE test1_mit_struct :
STRUCT
    test_ : ARRAY[0..2] OF test1;
    
END_STRUCT
END_TYPE
Code:
PROGRAM PLC_PRG
VAR
    dtTest :  test1_mit_struct;
 
    dummy: BOOL;
    
END_VAR
Code:
dtTest.test_[0].a := TRUE;
dtTest.test_[1].a := FALSE;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde gern die Initalisierung zusammen mit der Dekleration in einer Globalen Variablenliste vornehmen. Im beschriebenen Beispiel könnte ich auf den zweiten Struct verzichten. Das habe ich auch schon getestet, das funktioniert. Ich denke aber, dass ich in anderen Fällen wieder mal auf dieses Problem stoßen werde.

Die Dekleration und Initialisierung einer Globalen Variable direkt in der Bibliothek funktioniert bei meinem Beispiel mit folgeder Zeile

Code:
positionsLeftAxisSystem : PositionList_Struct := ( positionList := [(diX  := 1, diY := 2, diZ := 3),(diX := 1, diY := 2, diZ := 3),(diX := 1, diY  := 2, diZ := 3)] );

Versuche ich die gleiche Zeile in einem Projekt, welches die Bibliothek verwendet, funktioniert dies nicht, auch nicht wenn ich die Bibliotheks präfixes ergänze.
 
Hallo schlittk,

so weit ich das sehe kannst du deine Struktur weiterhin so deklarieren. Die "Fehlermeldungen" werden scheinbar durch den Precompiler hervorgerufen. Code lässt sich dennoch erzeugen und das Projekt auf den Controller übertragen.
 
Hallo .:WAGO::0100146:.,

viel Dank für die Antwort. Ja der Code lässt sich erzeugen und scheint auch zu funktionieren.

Gibt es eine Möglichkeit die Fehlermeldungen hierfür zu unterdrücken?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo schlittk,

so weit ich das sehe ist dies Teil des "intelligenten Kodierens", das sich zwar abstellen lässt, jedoch ist dies natürlich auch an viele weitere Funktionen gebunden, wie zum beispiel dem unterstreichen nicht deklarierter Variablen. Dementsprechend würde ich dies nicht empfehlen.
 
Zurück
Oben