MUL_2D_ARRAY-Baustein

Kurz-Information

NameMUL_2D_ARRAY
→POE-Typ→Funktion
KategorieIEC-Baustein, NumericEnh, Baustein mit interner Fehlerdiagnose
Konform zur →IEC-Norm

(plus) nicht in IEC-Norm vorgesehen

Grafische Schnittstelle

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-/Ausgangsvariable

Funktionalität

Der Baustein multipliziert 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 Multiplikation 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→DatentypBeschreibung
Ein-/Ausgänge
(VAR_IN_OUT):
A1
ARRAY [*,*] OF REAL, LREALUSINTUINTUDINTULINTSINTINTDINT oder LINT
(entspricht dem →allgemeinen Datentyp ANY_NUM
Array von variabler Länge für die ersten Operanden
A2
ARRAY [*,*] OF REAL, LREALUSINTUINTUDINTULINTSINTINTDINT oder LINT
(entspricht dem →allgemeinen Datentyp ANY_NUM
Array von variabler Länge für die zweiten Operanden
Eingänge:MUINTAnzahl der zu multiplizierenden Zeilen
NUINTAnzahl der zu multiplizierenden Spalten
Ergebniswert:
ARRAY [*,*] OF REAL, LREALUSINTUINTUDINTULINTSINTINTDINT oder LINT
(entspricht dem →allgemeinen Datentyp ANY_NUM
Array mit dem Ergebnis der Massen-Multiplikation

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 ExampleMul2DArray
    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 := [[5, 20, 60, 17(0)], [10,40,90, 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 := MUL_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 multiplied. 'enoCheck1' evaluates to 'TRUE'.
    //    [1][-1] * [-1][-50]  = 1.0 * 5.0 =    5.0
    //    [1][0] * [-1][-49]   = 2.0 * 10.0 =  20.0
    //    [1][1] * [-1][-48]   = 3.0 * 20.0 =  60.0
    //    [2][-1] * [0][-50]   = 1.0 * 10.0 =  10.0
    //    [2][0] * [0][-49]    = 2.0 * 20.0 =  40.0
    //    [2][1] * [0][-48]    = 3.0 * 30.0 =  90.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 := MUL_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.