DIV_2D_ARRAY-Baustein

Kurz-Information

NameDIV_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-/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→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 dividierenden Zeilen
NUINTAnzahl der zu dividierenden Spalten
Ergebniswert:
ARRAY [*,*] OF REAL, LREALUSINTUINTUDINTULINTSINTINTDINT 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.