Dynamisches Array als Input für FB

paulmr

Level-1
Beiträge
1
Reaktionspunkte
0
Zuviel Werbung?
-> 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).
 
Wenn es keine dynamischen Array's gibt dann wirst du dir wohl etwas Anderes überlegen müssen.
Wie wäre es wenn du dein Array auf die maximale Größe dimensionierst und deinem FB dann als zusätzlichen Parameter die Anzahl der verwendeten Elemente übergibst ?
 
Es gibt Arrays mit variable Länge.

Dazu einfach:

Code:
VAR_IN_OUT
    myArray     : ARRAY [*] OF BOOL;
END_VAR

Die Grenzen des Arrays kannst du dann mit LOWER_BOUND() und UPPER_BOUND() ermitteln.
 
Zurück
Oben