-> Hier kostenlos registrieren
Hallo Zusammen,
ich möchte einen FB schreiben, welcher bspw. ein Array aus booleschen Variablen entgegennimmt ohne dabei zu wissen um wie viele es sich handelt.
Meine jetzige Lösung sieht folgendermaßen aus:
VAR_INPUT
Arr: POINTER TO ARRAY[0..0] OF BOOL;
lenArr: INT;
END_VAR
VAR
internArr: ARRAY[0..100] OF BOOL;
END_VAR
Danach kopiere ich alle Werte aus Arr^ auf ein internes Array bis lenArr erreicht ist. Ich möchte aber am besten eine Lösung in der im Aufruf des FBs als Constant einmalig die Länge des Array berechnet wird und etwas in die Richtung realisieren (Ohne Platz für internArr zu reservieren):
VAR_INPUT
Arr: POINTER TO ARRAY[0..0] OF BOOL;
END_VAR
VAR_CONSTANT
lenArr: INT := (SIZEOF(Arr^) / SIZEOF(BOOL));
END_VAR
VAR
internArr: ARRAY[0..lenArr] OF BOOL;
END_VAR
Die Variable lenArr sollte dann, falls ein Array aus 5 booleschen Variablen übergeben wird, den Wert 5 annehmen. Ist so etwas möglich, hat jemand eine Idee?
Ich habe gelesen, dass es keine dynamisches Arrays in Codesys gibt, mit _NEW habe ich schon rumgespielt aber auch keine richtige Lösung gefunden. Für den FB ist es wichtig, dass ich pro Instanz weiß, wie groß das Array ist, ich gebe es dann an weitere Funktionen und will ungerne Platz "reservieren" (Als Übergabe 2000 Bools, aber dann nur bis lenArr alle Funktionen ausführen oder sowas).
ich möchte einen FB schreiben, welcher bspw. ein Array aus booleschen Variablen entgegennimmt ohne dabei zu wissen um wie viele es sich handelt.
Meine jetzige Lösung sieht folgendermaßen aus:
VAR_INPUT
Arr: POINTER TO ARRAY[0..0] OF BOOL;
lenArr: INT;
END_VAR
VAR
internArr: ARRAY[0..100] OF BOOL;
END_VAR
Danach kopiere ich alle Werte aus Arr^ auf ein internes Array bis lenArr erreicht ist. Ich möchte aber am besten eine Lösung in der im Aufruf des FBs als Constant einmalig die Länge des Array berechnet wird und etwas in die Richtung realisieren (Ohne Platz für internArr zu reservieren):
VAR_INPUT
Arr: POINTER TO ARRAY[0..0] OF BOOL;
END_VAR
VAR_CONSTANT
lenArr: INT := (SIZEOF(Arr^) / SIZEOF(BOOL));
END_VAR
VAR
internArr: ARRAY[0..lenArr] OF BOOL;
END_VAR
Die Variable lenArr sollte dann, falls ein Array aus 5 booleschen Variablen übergeben wird, den Wert 5 annehmen. Ist so etwas möglich, hat jemand eine Idee?
Ich habe gelesen, dass es keine dynamisches Arrays in Codesys gibt, mit _NEW habe ich schon rumgespielt aber auch keine richtige Lösung gefunden. Für den FB ist es wichtig, dass ich pro Instanz weiß, wie groß das Array ist, ich gebe es dann an weitere Funktionen und will ungerne Platz "reservieren" (Als Übergabe 2000 Bools, aber dann nur bis lenArr alle Funktionen ausführen oder sowas).