Array mit Struct: Erroneous init value

forellengarten

Level-2
Beiträge
217
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
eigentlich vermeintlich banal, dennoch hänge ich irgendwie:

- ich habe ein struct:
TYPE myStruct :
STRUCT
val1 :USINT;
val2 :USINT;
END_STRUCT
END_TYPE

- damit definiere ich globale Konstanten:
myConst1 :myStruct:=(val1:=1, val2:=2);
myConst2 :myStruct:=(val1:=3, val2:=4);
myConst3 :myStruct:=(val1:=5, val2:=6);

Bis hierher funktioniert auch alles..... und hier kommt das problem:

- in einem FB möchte ein Array mit myConst initialisieren:
myArray[1..20] of myStruct:=
(val1:=1, val2:=2), (*--> DAS funktioniert*)
(myConst1), (*--> das möchte ich, geht aber nicht.... WARUM?)
(val1:=myConst1.val1, val2:=myConst1.val2); (*--> das wäre aus meiner sicht eine Notlösung, aber sogar das geht nicht, WARUM??)
 
Zuletzt bearbeitet:
(val1:=myConst1. val1:=myConst1.val2); (*--> das wäre aus meiner sicht eine Notlösung, aber sogar das geht nicht, WARUM??)
Was sollte denn '(val1:=myConst1. val1:=myConst1.val2)' bewirken?
Was soll das Leerzeichen zwischen 'myConst1.' und 'val1' bewirken?
Versuchst Du etwa der Konstanten 'myConst1.val1' den Wert der Konstanten 'myConst1.val2' zuzuweisen?
Oder 'val1' 2 verschiedene Werte zuzuweisen?
:unsure: Nix verstehen.
Meintest Du '(val1:=myConst1.val1, val2:=myConst1.val2)'?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So, habe es gerade mal nachgestellt. Erstmal im Infosys scheint ein Fehler zu sein, denn eckige Klammern bei der Initialisierung eines Arrays of STRUCT mit festen Werten führt zu einer Fehlermeldung.
Ich kann nur vermuten, dass das nicht geht. Vielleicht liest @HausSPSler ja mit und kann sagen, wie das in Codesys 2.3 ist, auf dem TwinCAT 2 ja basiert.
 
Was sollte denn '(val1:=myConst1. val1:=myConst1.val2)' bewirken?
Was soll das Leerzeichen zwischen 'myConst1.' und 'val1' bewirken?
Versuchst Du etwa der Konstanten 'myConst1.val1' den Wert der Konstanten 'myConst1.val2' zuzuweisen?
Oder 'val1' 2 verschiedene Werte zuzuweisen?
:unsure: Nix verstehen.
Meintest Du '(val1:=myConst1.val1, val2:=myConst1.val2)'?
ja klar, heinileini, da hast du recht. ich habe den ursprungspost angepasst. Die Frage bleibt dennoch bestehen.

auch die version von idtell habe ich getestet .... copy/paste aus dem Twincat2-infosys kopiert. dennoch kommt auch hier die gleiche fehlermeldung:

Beispiel für die Initialisierung eines Arrays einer Struktur:
TYPE STRUCT1
STRUCT
p1:int;
p2:int;
p3:dword;
END_STRUCT

arr1 : ARRAY[1..3] OF STRUCT1:= [(p1:=1,p2:=10,p3:=4723), (p1:=2,p2:=0,p3:=299), (p1:=14,p2:=5,p3:=112)];
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hab nochmal mit der richtigen CS Version probiert. Eigentlich habe ich aber nur herausgefunden, dass ein paar Sachen nicht so funktionieren wie ich dachte. Poste es trotzdem, vielleicht erspart sich ja jemand ein bisschen rumprobieren.
Code:
//definitionsteil
VAR CONSTANT
    myConst1: mysens := (val:=1, temp:=2);(* andere Struktur , da ich sowas schon für ne init von nem Kombisensor im Array benutz*)
    myConst2 :mysens:=(val:=3, temp:=4);
    myConst3 :mysens:=(val:=5, temp:=6);
    myConst4_val:INT:=1;
    myConst4_temp:INT:=1;
END_VAR
VAR
(* geht nicht    myarray1: ARRAY [1..3] OF mysens :=     3((myConst1)); *)
(* geht nicht    myarray1: ARRAY [1..3] OF mysens :=     (myConst1),
                                            (myConst2),
                                            (myConst3); *)
(* geht nicht    myarray1: ARRAY [1..3] OF mysens :=     (val:=myConst1.val,temp:=myConst1.temp),
                                            (val:=myConst2.val,temp:=myConst2.temp),
                                            (val:=myConst3.val,temp:=myConst3.temp); *)
(* geht nicht    myarray1: ARRAY [1..3] OF mysens :=     3((val:=myConst1.val,temp:=myConst1.temp)); *)

    myarray1: ARRAY [1..3] OF mysens :=     3((val:=myConst4_val,temp:=myConst4_temp));
    myarray2: ARRAY [1..3] OF mysens :=     (val:=myConst4_val,temp:=myConst4_temp),(*standardtyp geht als konstante*)
                                    (val:=myConst4_val,temp:=myConst4_temp),
                                    (val:=myConst4_val,temp:=myConst4_temp);

// im Codeteil
(***********************************************************************************************************************************)
myarray2[1] := myConst1;(*im code initialiseren ?*)
myarray2[1].temp := myConst1.temp;
END_VAR
 
Zurück
Oben