ADD_2D_ARRAY-Baustein

Kurz-Information

Name

ADD_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/414781938/ADD_2D_ARRAY-version-1-modificationdate-1535031774355-api-v2.png

Verfügbar ab

  • Version 1.43.0 (für logi.CAD 3) – Anfangsvariante: LREAL für Ein-/Ausgänge A1, A2 und Ergebniswert

  • Version 1.44.0 (für logi.CAD 3) – Erweiterung: ANY_NUM für Ein-/Ausgänge A1, A2 und Ergebniswert

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

Funktionalität

Der Baustein addiert 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 Addition 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 addierenden Zeilen

N

UINT

Anzahl der zu addierenden 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-Addition

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, ob die Größe der Arrays für A1 und A2 mindestens M Zeilen und N Spalten beträgt. Ist dies nicht der Fall, wird der Ausgang ENO des Bausteins auf den Wert FALSE (oder eine Entsprechung) zurückgesetzt.

Beispiel für Verwendung im ST-Editor

FUNCTION_BLOCK ExampleAdd2DArray
VAR
array1 : ARRAY [1..2, -1..1] OF LREAL := [2( [1.0, 2.0, 3.0])];
array2 : ARRAY [-1..30, -50..50] OF LREAL := [ [5.0, 10.0, 20.0, 98(30.0)], 31( [10.0, 20.0, 30.0, 98(40.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 := [[6, 12, 23, 17(0)], [11,22,33, 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 := ADD_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 added. 'enoCheck1' evaluates to 'TRUE'.
// [1][-1] + [-1][-50] = 1.0 + 5.0 = 6.0
// [1][0] + [-1][-49] = 2.0 + 10.0 = 12.0
// [1][1] + [-1][-48] = 3.0 + 20.0 = 23.0
// [2][-1] + [0][-50] = 1.0 + 10.0 = 11.0
// [2][0] + [0][-49] = 2.0 + 20.0 = 22.0
// [2][1] + [0][-48] = 3.0 + 30.0 = 33.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 := ADD_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.