SUB_2D_ARRAY-Baustein

Kurz-Information

Name

SUB_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/414782083/SUB_2D_ARRAY-version-1-modificationdate-1535032700290-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 subtrahiert 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 Subtraktion 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 subtrahierenden Zeilen

N

UINT

Anzahl der zu subtrahierenden 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-Subtraktion

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 ExampleSub2DArray
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 := [[-4, -8, -17, 17(0)], [-9,-18,-27, 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 := SUB_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 subtracted. 'enoCheck1' evaluates to 'TRUE'.
// [1][-1] - [-1][-50] = 1.0 - 5.0 = -4.0
// [1][0] - [-1][-49] = 2.0 - 10.0 = -8.0
// [1][1] - [-1][-48] = 3.0 - 20.0 = -17.0
// [2][-1] - [0][-50] = 1.0 - 10.0 = -9.0
// [2][0] - [0][-49] = 2.0 - 20.0 = -18.0
// [2][1] - [0][-48] = 3.0 - 30.0 = -27.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 := SUB_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.