# Struct mit Struct initialisieren



## schlittk (2 Mai 2017)

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!


----------



## schlittk (2 Mai 2017)

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)] );


----------



## ccore (2 Mai 2017)

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.


----------



## schlittk (2 Mai 2017)

Der direkte Aufruf funktioniert. Mich würde aber schon interessieren wie es mit einem zweiten Struct funktioniert.


----------



## ccore (2 Mai 2017)

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?

```
TYPE test1 :
STRUCT
    a : BOOL; 
    b : INT; 
    c : STRING;
END_STRUCT
END_TYPE
```


```
TYPE test1_mit_struct :
STRUCT
    test_ : ARRAY[0..2] OF test1;
    
END_STRUCT
END_TYPE
```


```
PROGRAM PLC_PRG
VAR
    dtTest :  test1_mit_struct;
 
    dummy: BOOL;
    
END_VAR
```


```
dtTest.test_[0].a := TRUE;
dtTest.test_[1].a := FALSE;
```


----------



## schlittk (2 Mai 2017)

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


```
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.


----------



## .:WAGO::0100146:. (3 Mai 2017)

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.


----------



## schlittk (3 Mai 2017)

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?


----------



## .:WAGO::0100146:. (5 Mai 2017)

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.


----------

