SUB_2D_ARRAY-Baustein
Kurz-Information
Name |
SUB_2D_ARRAY |
→POE-Typ |
|
Kategorie |
IEC-Baustein, NumericEnh, Baustein mit interner Fehlerdiagnose |
Konform zur →IEC-Norm |
nicht in IEC-Norm vorgesehen |
Grafische Schnittstelle |
|
Verfügbar ab |
|
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 |
Beschreibung |
|
Ein-/Ausgänge |
A1 |
ARRAY [*,*] OF REAL, LREAL, USINT, UINT, UDINT, ULINT, SINT, INT, DINT oder LINT |
Array von variabler Länge für die ersten Operanden |
A2 |
ARRAY [*,*] OF REAL, LREAL, USINT, UINT, UDINT, ULINT, SINT, INT, DINT oder LINT |
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 |
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.