Deklaration eines ARRAY-Datentyps in ST
TYPE (* ARRAY mit einer Dimension, mit Initialisierung *) name_1: ARRAY [x..y] OF data-type := [initial-value_1, initial-value_2, ..., initial-value_n]; name_2: ARRAY [x..y] OF data-type := [n(initial-value_1), n(initial-value_2), ...]; name_A: ARRAY [x..y] OF FB-type := [(input_1 := initial-value, input_2 := initial-value, ...), (input_1 := initial-value, input_2 := initial-value, ...), ...]; name_B: ARRAY [x..y] OF FB-type := [n((input_1 := initial-value, input_2 := initial-value, ...), n((input_1 := initial-value, input_2 := initial-value, ...), ...]; (* ARRAY mit zwei Dimensionen, mit Initialisierung *) name_3: ARRAY [x1..y1, x2..y2] OF data-type := [[initial-value_1_1, ..., initial-value_1_n], [initial-value_2_1, ..., initial-value_2_n]]; (* ARRAY mit zwei Dimensionen, Initialisierung ist möglich *) name_C: ARRAY [x..y , x2..y2] OF FB-type; (* ARRAY mit drei Dimensionen, Initialisierung ist möglich *) name_4: ARRAY [x1..y1, x2..y2, x3..y3] OF data-type; name_D: ARRAY [x1..y1, x2..y2, x3..y3] OF FB-type; (* beliebige Wiederholungen sind möglich *) ... name_n: ARRAY [x..y] OF data-type := [initial-value_1, n(initial-value_2), ...]; END_TYPE
Bedeutung |
---|
Deklaration eines oder mehrerer →ARRAY-Datentypen (
Mit dem optionalen →Initialisierungswert weisen Sie den ARRAY-Elementen einen Wert zu. Mit Falls Sie mehr Elemente in der Initialisierung eingeben, als ARRAY-Elemente vorhanden sind, kennzeichnet logi.CAD 3 die Initialisierungsangaben als fehlerhaft. Falls Sie weniger Elemente in der Initialisierung eingeben, als ARRAY-Elemente vorhanden sind, werden die restlichen ARRAY-Elemente mit dem Initialisierungswert des zugehörigen Datentyps initialisiert. Aktuelle Einschränkungen
|
Informationen über den Zugriff auf ARRAY-Elemente finden Sie unter "Zugriff auf ARRAY-Datentyp und ARRAY-Elemente".
logi.CAD 3 bietet außerdem die Möglichkeit, zusätzliche Daten bei der Deklaration anzugeben. Siehe "Beschreibung, Kommentar oder JSON-String für Variablen und Datentypen angeben" für Details.
TYPE myType : ARRAY [1..9] OF INT := [1, 2, 3]; (* 9 Elemente vom Datentyp 'INT' deklarieren - die ersten 3 Array-Elemente werden mit den eingegebenen Werten initialisiert *) Test : ARRAY [-10..-2] OF REAL := [2(1.0), 3(2.0), 3.0]; (* 9 Elemente vom Datentyp 'REAL' deklarieren - die ersten 6 Array-Elemente werden mit den eingegebenen Werten initialisiert *) inputData : ARRAY [0..1] OF BOOL := [2(TRUE)]; (* 2 Elemente vom Datentyp 'BOOL' deklarieren - beide Array-Elemente werden mit 'TRUE' initialisiert *) scalings : ARRAY [1..5] OF INT := [2(5), 2(), 4]; (* 5 Elemente vom Datentyp 'INT' deklarieren - die ersten 2 Array-Elemente werden mit '5' initialisiert, *) (* die nächsten 2 Array-Elemente mit dem Standard-Initialisierungwert '0' für INT, das letzte Array-Element mit '4' *) Test2 : ARRAY [3..5] OF Range := [2((min := 100, max:=400))]; (* 3 Elemente vom Datentyp 'Range' deklarieren; 'Range' ist ein anwenderdefinierter Datentyp *) (* die Strukturelemente der ersten 2 Array-Elemente werden mit den eingegebenen Werten initialisiert *) TONArr1 : ARRAY [0..2] OF TON; (* 3 Elemente vom TON-Baustein deklarieren - keine Initialisierung der Eingänge *) TONArr2 : ARRAY [0..2] OF TON := [(PT:=T#100ms), (PT:=T#50ms)]; (* 3 Elemente vom TON-Baustein deklarieren - bei den ersten 2 Elementen wird der Eingang 'PT' initialisiert *) TONArr3 : ARRAY [1..50] OF TON := [50((PT:=T#100ms))]; (* 50 Elemente vom TON-Baustein deklarieren - bei allen Elementen wird der Eingang 'PT' initialisiert *) END_TYPE
TYPE Dim2 : ARRAY [1..2, 1..3] OF INT := [2([3(25)])]; (* 2 ARRAY-Dimensionen "2 x 3" vom Datentyp 'INT' mit diesen Initialisierungswerten deklarieren: Dim2[1,1] := 25, Dim2[1,2] := 25, Dim2[1,3] := 25, Dim2[2,1] := 25, Dim2[2,2] := 25, Dim2[2,3] := 25 *) Dim3 : ARRAY [1..2, 1..3, 1..4] OF INT := [2([3([4(15)])])]; (* 3 ARRAY-Dimensionen "2 x 3 x 4" vom Datentyp 'INT' mit diesen Initialisierungswerten deklarieren: Dim3[1,1,1] := 15, Dim3[1,1,2] := 15, Dim3[1,1,3] := 15, Dim3[1,1,4] := 15, Dim3[1,2,1] := 15, Dim3[1,2,2] := 15, Dim3[1,2,3] := 15, Dim3[1,2,4] := 15, Dim3[1,3,1] := 15, Dim3[1,3,2] := 15, Dim3[1,3,3] := 15, Dim3[1,3,4] := 15, Dim3[2,1,1] := 15, Dim3[2,1,2] := 15, Dim3[2,1,3] := 15, Dim3[2,1,4] := 15, Dim3[2,2,1] := 15, Dim3[2,2,2] := 15, Dim3[2,2,3] := 15, Dim3[2,2,4] := 15, Dim3[2,3,1] := 15, Dim3[2,3,2] := 15, Dim3[2,3,3] := 15, Dim3[2,3,4] := 15 *) Dim2a : ARRAY [1..2, 1..3] OF INT := [[9, 8, 7], [6, 5, 4]]; (* 2 ARRAY-Dimensionen "2 x 3" vom Datentyp 'INT' mit diesen Initialisierungswerten deklarieren: Dim2a[1,1] := 9, Dim2a[1,2] := 8, Dim2a[1,3] := 7, Dim2a[2,1] := 6, Dim2a[2,2] := 5, Dim2a[2,3] := 4 *) Dim2b : ARRAY [1..5, 1..4] OF DINT := [2([9, 8, 7, 6]), [2(), 4], [5, 3(1)]]; (* 2 ARRAY-Dimensionen "5 x 4" vom Datentyp 'DINT' mit diesen Initialisierungswerten deklarieren: Dim2b[1,1] := 9, Dim2b[1,2] := 8, Dim2b[1,3] := 7, Dim2b[1,4] := 6, Dim2b[2,1] := 9, Dim2b[2,2] := 8, Dim2b[2,3] := 7, Dim2b[2,4] := 6, Dim2b[3,1] := 0, Dim2b[3,2] := 0, Dim2b[3,3] := 4, Dim2b[3,4] := 0, - Hinweis: Die Initialisierungswerte '0' stammen vom Datentyp 'DINT'. Dim2b[4,1] := 5, Dim2b[4,2] := 1, Dim2b[4,3] := 1, Dim2b[4,4] := 1, Dim2b[5,1] := 0, Dim2b[5,2] := 0, Dim2b[5,3] := 0, Dim2b[5,4] := 0 - Hinweis: Die Initialisierungswerte '0' stammen ebenfalls vom Datentyp 'DINT'. *) Dim3a : ARRAY [1..2, 1..3, 1..6] OF SINT := [[[9, 8, 7, 6, 5, 4]], [2([3, 2, 1])]]; (* 3 ARRAY-Dimensionen "2 x 3 x 6" vom Datentyp 'SINT' mit diesen Initialisierungswerten deklarieren: Dim3a[1,1,1] := 9, Dim3a[1,1,2] := 8, Dim3a[1,1,3] := 7, Dim3a[1,1,4] := 6, Dim3a[1,1,5] := 5, Dim3a[1,1,6] := 4, Dim3a[1,2,1] := 0, Dim3a[1,2,2] := 0, Dim3a[1,2,3] := 0, Dim3a[1,2,4] := 0, Dim3a[1,2,5] := 0, Dim3a[1,2,6] := 0, - Hinweis: Alle Initialisierungswerte '0' stammen vom Datentyp 'SINT'. Dim3a[1,3,1] := 0, Dim3a[1,3,2] := 0, Dim3a[1,3,3] := 0, Dim3a[1,3,4] := 0, Dim3a[1,3,5] := 0, Dim3a[1,3,6] := 0, Dim3a[2,1,1] := 3, Dim3a[2,1,2] := 2, Dim3a[2,1,3] := 1, Dim3a[2,1,4] := 0, Dim3a[2,1,5] := 0, Dim3a[2,1,6] := 0, Dim3a[2,2,1] := 3, Dim3a[2,2,2] := 2, Dim3a[2,2,3] := 1, Dim3a[2,2,4] := 0, Dim3a[2,2,5] := 0, Dim3a[2,2,6] := 0, Dim3a[2,3,1] := 0, Dim3a[2,3,2] := 0, Dim3a[2,3,3] := 0, Dim3a[2,3,4] := 0, Dim3a[2,3,5] := 0, Dim3a[2,3,6] := 0 *) END_TYPE
Benannte Werte als Array-Grenzen verwenden
Falls Sie für die Grenze nicht Literale, sondern benannte Werte verwenden wollen, benötigen Sie einen Datentyp mit benannten Werten dafür. Um einen benannten Wert verwenden zu können, geben Sie den Namen statt des Literals an. Um den Namen eindeutig anzusprechen, ist diese Syntax zulässig: data_type_name#named_value
– siehe das folgenden Beispiel
Abweichung von IEC-Norm
Die →IEC-Norm erlaubt keine Verwendung von benannten Werten.
Am besten verwenden Sie einen Datentypen, der mit dem Basis-Datentyp DINT
deklariert wurde. So ist gewährleistet, dass ein gültiger Index-Unterbereich für den ARRAY-Datentyp oder die ARRAY-Variable spezifiziert ist. Bei Bedarf können Sie aber Datentypen mit benannten Werten von einem Basis-Datentyp verwenden, der zum →allgemeinen Datentyp ANY_INT
gehört. logi.CAD 3 informiert Sie, falls die verwendeten Werte für den Index-Unterbereich nicht im Bereich von DINT
liegen.
TYPE myType1 : ARRAY [Colors3#Red..Green] OF INT; (* Der ARRAY-Datentyp verwendet benannte Werte. *) myType2 : ARRAY [Colors4#Red..Orange] OF INT; (* Der ARRAY-Datentyp verwendet benannte Werte. *) Colors3 : DINT(Red := 1, Green := 100); (* Hier die Deklaration eines Datentypes mit den benannten Werten. *) Colors4 : DINT(Red := 1, Orange := 100); (* Hier die Deklaration eines anderen Datentypes mit den benannten Werten. *) END_TYPE