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

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/add.svg nicht in IEC-Norm vorgesehen

Grafische Schnittstelle

images/download/thumbnails/414781978/DIV_2D_ARRAY-version-1-modificationdate-1535031922658-api-v2.png

Verfügbar ab

  • Version 1.44.0 (für logi.CAD 3) – Anfangsvariante

  • Version 2.0.9 (für Bibliothek Standard) – grafische Schnittstelle mit Ein-/Ausgangsvariablen

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 und A2 mindestens M Zeilen und N 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.