DIV_2D_ARRAY-Baustein
Kurz-Information
Name | DIV_2D_ARRAY |
---|---|
→POE-Typ | →Funktion |
Kategorie | IEC-Baustein, NumericEnh, Baustein mit interner Fehlerdiagnose |
Konform zur →IEC-Norm |
|
Grafische Schnittstelle |
|
Verfügbar ab |
|
Funktionalität
Der Baustein dividiert 2 Arrays mit 2 Dimensionen elementweise bis zu einer angegebenen Zeile und Spalte.
Sie geben das erste Array über den Ein-/Ausgang A1
ein und das zweite Array über den Ein-/Ausgang A2
. Die Arrays dürfen von unterschiedlicher Größe und Index-Unterbereich sein (z.B. A1 =
[1..2, 1..3]
, A2 = [3..4, 4..8]
). Die Arrays müssen jedoch mindestens jene Zeilen und Spalten enthalten, die über die Eingänge M
und N
eingegeben werden.
Der Baustein liefert ein Array, in dem die ersten M
Zeilen und N
Spalten das Ergebnis der Division enthalten. Die Größe dieses Arrays wird von dem "Ziel-Array" bestimmt, dem das Ergebnis des Bausteins zugewiesen ist. Falls das Ziel-Array mehr Elemente als M * N
enthält, werden die restlichen Elemente nicht verändert.
Eingänge, Ergebniswert
Bezeichner | →Datentyp | Beschreibung | |
---|---|---|---|
Ein-/Ausgänge (VAR_IN_OUT): | A1 | ARRAY [*,*] OF
REAL , LREAL , USINT , UINT , UDINT , ULINT , SINT , INT , DINT oder LINT (entspricht dem →allgemeinen Datentyp ANY_NUM )
| Array von variabler Länge für die ersten Operanden |
A2 | ARRAY [*,*] OF
REAL , LREAL , USINT , UINT , UDINT , ULINT , SINT , INT , DINT oder LINT (entspricht dem →allgemeinen Datentyp ANY_NUM )
| Array von variabler Länge für die zweiten Operanden | |
Eingänge: | M | UINT | Anzahl der zu dividierenden Zeilen |
N | UINT | Anzahl der zu dividierenden Spalten | |
Ergebniswert: | – | ARRAY [*,*] OF
REAL , LREAL , USINT , UINT , UDINT , ULINT , SINT , INT , DINT oder LINT (entspricht dem →allgemeinen Datentyp ANY_NUM )
| Array mit dem Ergebnis der Massen-Division |
Der Eingang EN
und der Ausgang ENO
sind für den →Aufruf des Bausteins verfügbar. Siehe "Ausführungssteuerung: EN, ENO" für Informationen zum Eingang EN
und zum Ausgang ENO
.
Interne Fehlerdiagnose für Baustein
Der Baustein prüft,
- dass die Größe der Arrays für
A1
undA2
mindestensM
Zeilen undN
Spalten beträgt und - dass keine Division durch
0
durchgeführt wird.
Im Fehlerfall wird der Ausgang ENO
des Bausteins auf den Wert FALSE
(oder eine Entsprechung) zurückgesetzt. Bei Division durch 0
wird das entsprechende Element auf 0
gesetzt.
Beispiel für Verwendung im ST-Editor
FUNCTION_BLOCK ExampleDiv2DArray VAR array1 : ARRAY [1..2, -1..1] OF LREAL := [2( [10.0, 20.0, 30.0])]; array2 : ARRAY [-1..30, -50..50] OF LREAL := [ [2.0, 5.0, 15.0, 98(1.0)], 31( [1.0, 4.0, 3.0, 98(1.0)])]; arrayResult1 : ARRAY [1..20, 1..20] OF LREAL; arrayResult2 : ARRAY [1..20, 1..20] OF LREAL; arrayExpected1 : ARRAY [1..20, 1..20] OF LREAL := [ [5, 4, 2, 17(0)], [10, 5, 10, 17(0)], 18( [20(0)])]; arrayExpected2 : ARRAY [1..20, 1..20] OF LREAL; enoCheck1, enoCheck2 : BOOL; arrayEqual : BOOL := TRUE; indexFirstDimension, indexSecondDimension : INT; END_VAR arrayResult1 := DIV_2D_ARRAY(A1 := array1, A2 := array2, M := 2, N := 3, ENO => enoCheck1); // The following elements of 'array1' and 'array2', i.e. the following values, are divided. 'enoCheck1' evaluates to 'TRUE'. // [1][-1] / [-1][-50] = 10.0 / 2.0 = 5.0 // [1][0] / [-1][-49] = 20.0 / 5.0 = 4.0 // [1][1] / [-1][-48] = 30.0 / 15.0 = 2.0 // [2][-1] / [0][-50] = 10.0 / 1.0 = 10.0 // [2][0] / [0][-49] = 20.0 / 4.0 = 5.0 // [2][1] / [0][-48] = 30.0 / 3.0 = 10.0 // check the results FOR indexFirstDimension := 1 TO 20 DO FOR indexSecondDimension := 1 TO 20 DO arrayEqual := AND(arrayEqual, arrayResult1[indexFirstDimension, indexSecondDimension] = arrayExpected1[indexFirstDimension, indexSecondDimension]); END_FOR; END_FOR; ENO := AND(arrayEqual, enoCheck1); arrayResult2 := DIV_2D_ARRAY(A1 := array1, A2 := array2, M := 3, N := 2, ENO => enoCheck2); // 'enoCheck2' evaluates to 'FALSE' because 'array1' has only 2 rows. // All elements of arrayResult2 remain unchanged. // check the results FOR indexFirstDimension := 1 TO 20 DO FOR indexSecondDimension := 1 TO 20 DO arrayEqual := AND(arrayEqual, arrayResult2[indexFirstDimension, indexSecondDimension] = arrayExpected2[indexFirstDimension, indexSecondDimension]); END_FOR; END_FOR; ENO := AND(ENO, arrayEqual, NOT(enoCheck2)); END_FUNCTION_BLOCK
Bei der Erstellung Ihrer Anwendung im ST-Editor erstellen Sie den Aufruf eines Bausteins, indem Sie den laut Syntax erforderlichen Text eintippen oder die Inhaltshilfe verwenden.