Guten Morgen,
ich hab den Fehler jetzt etwas eingegrenzt. Die Wertübergabe mit BOOL scheint jetzt soweit zu funktionieren, aber bei der Übergabe mit DINT oder TIME gibt es noch ein Problem. Meine Function sieht im Moment so aus:
Code:
FUNCTION MYFunctionDINT : BOOL
VAR_INPUT
TemptUDT:GlobalUDT;
Array1 :DINT;
END_VAR
VAR_IN_OUT
Array2 :DINT;
Array3 :DINT
DINT1 :DINT;
END_VAR
BEGIN
IF TemptUDT.Option1 THEN
Array2 :=DINT1;
END_IF;
IF TemptUDT.Option2 THEN
Array3 :=DINT1;
END_IF;
IF TemptUDT.Option3 THEN
DINT1 :=Array2;
END_IF;
IF TemptUDT.Option4 THEN
DINT1 := Array1;
Array2 := Array1;
END_IF;
MYFunctionDINT:=(Array2 <> DINT1);
END_FUNCTION
Wenn ich jetzt an Array2 irgendeinen Wert des Arrays im FB übergebe mit dem Index größer 1, also z.B. MYArray[3] funktioniert das ganze so wie es soll. Bei MYArray[1] funktioniert die Option1, also die Übergabe vom DINT1 nach Array2 nicht, der Rest aber schon. Wenn ich den ganzen Vorgang beobachte, kann man erkennen dass der Wert in der Funktion geändert wird, aber die Übergabe an dem Array im FB funktioniert nicht. Zum Schluss hab ich den Code noch folgendermaßen geändert:
Code:
FUNCTION MYFunctionDINT : BOOL
VAR_INPUT
TemptUDT:GlobalUDT;
Array1 :DINT;
END_VAR
VAR_OUTPUT
Array2 :DINT;
END_VAR
VAR_IN_OUT
Array3 :DINT
DINT1 :DINT;
END_VAR
BEGIN
IF TemptUDT.Option1 THEN
Array2 :=DINT1;
END_IF;
IF TemptUDT.Option2 THEN
Array3 :=DINT1;
END_IF;
IF TemptUDT.Option4 THEN
DINT1 := Array1;
Array2 := Array1;
END_IF;
MYFunctionDINT:=(Array2 <> DINT1);
END_FUNCTION
Dies funktioniert auch, aber da ich dann die Option3 nicht benutzen kann ist das keine endgültige Lösung.
Bookmarks