Anzahl der Elemente eines Arrays
Diese Funktion liefert die Anzahl der Elemente der 1. und 2. Dimension eines Arrays.
Eingang
Eingangsvariable (Array Dimension 1, 2 oder 3), deren Anzahl an Elementen ermittelt werden soll
Ausgang
Liefert Anzahl der Elemente der ersten Dimension
Liefert Anzahl der Elemente der zweiten Dimension
Wenn Eingang Array2D ein eindimensionales Array ist:
Am Ausgang NrOfElem1 wird die Anzahl der Array-Elemente am Eingang Array2D geliefert.
Am Ausgang NrOfElem2 wird der Wert 1 zurückgegeben.
Wenn Eingang Array2D ein zweidimensionales Array ist:
Am Ausgang NrOfElem1 wird die Anzahl der Elemente der ersten Dimension, am Ausgang NrOfElem2 wird die Anzahl der Elemente der zweiten Dimension des Arrays am Eingang Array2D geliefert.
Wenn Eingang Array2D ein dreidimensionales Array ist:
Am Ausgang NrOfElem1 wird die Anzahl der Elemente der ersten Dimension, am Ausgang NrOfElem2 das Produkt der zweiten und dritten Dimension des Arrays am Eingang Array2D geliefert.
Damit können Funktionen oder Funktionsbausteine geschrieben werden, die Arrays mit variablen Längen verarbeiten (auch im Zusammenspiel mit den Funktionen (GetPointer, AreaOffs_ToVar,Var_ToAreaOffs).
Das Produkt NrOfElem1*NrOfElem2 ist immer gleich der Gesamtzahl der Elemente des Arrays.
Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden. Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.
VAR
ArrayOfInt: ARRAY [2..15,3..20] OF INT:=[252(0)];
NumberOfDim1: INT:=0;
NumberOfDim2: INT:=0;
END_VAR
Hier wird die Funktion Elem_OfArray2D in jedem SPS Zyklus ausgeführt (kein EN-Eingang). Sie ermittelt die Anzahl der Elemente der Variablen ArrayOfInt. Das Funktionsergebnis ist hier: NumberOfDim1 = 14 und NumberOfDim2 = 18.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_VARIN,,ArrayOfInt,6,2,8,4,);
B(B_VAROUT,,NumberOfDim1,19,2,21,4,);
B(B_F,Elem_OfArray2D!,Instance,8,1,19,5,,?DArray2D?CNrOfElem1?CNrOfElem2);
B(B_VAROUT,,NumberOfDim2,19,3,21,5,);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
Weitere Beispiel-Projekte befinden sich im Installationsverzeichnis von Control FPWIN Pro unter "Samples": Berechnung des Produkts von zweidimensionalen Arrays