Tipo di dati: ARRAY OF
Un array è una raccolta di elementi di dati dello stesso tipo di dati. Sono supportati array singoli e multidimensionali di lunghezza fissa o variabile.
Matrice unidimensionale di lunghezza fissa
È possibile definire gli array nella parte di dichiarazione di una POU o negli elenchi di variabili globali.
Sintassi della dichiarazione di un array unidimensionale:
<variable name> : ARRAY[ <dimension> ] OF <data type> := <initialization> ;
| 
 | Nome dell'array Esempio:  | 
| 
 | Dimensione (limite di indice da inferiore a superiore) Esempio:  Una dimensione può avere un numero qualsiasi di elementi indicizzati, determinato dal limite di indice inferiore e superiore. I limiti dell'indice sono numeri interi; massimo del tipo di dati  | 
| 
 | Tipo di dati di un elemento: 
 SuggerimentoRiferimenti e puntatori a  | 
| 
 | Opzionale Valori iniziali dell'array | 
VAR
    aiCounter : ARRAY[0..9] OF INT;
END_VARLimite indice inferiore: 0
Limite superiore dell'indice: 9
Inizializzazione per i 10 elementi:
aiCounter : ARRAY[0..9] OF INT := [0, 10, 20, 30, 40, 50, 60, 70, 80, 90];
Accesso ai dati
iLocalVariable := aiCounter[2];
Il valore 20 è assegnato alla variabile locale.
Matrice multidimensionale di lunghezza fissa
<variable name> : ARRAY[ <1st dimension> , <next dimensions> ] OF <data type> := <initialization> ;
<variable name> [ <index of 1st dimension> , <index of next dimensions> ]
| 
 | Prima dimensione (limite di indice da inferiore a superiore) | 
| 
 | Le dimensioni successive (separate da virgole) | 
Sintassi per l'accesso ai dati
| 
 | Limite indice della prima dimensione | 
| 
 | Limite indice delle dimensioni successive | 
VAR
    aiCardGame : ARRAY[1..2, 3..4] OF INT;
END_VAR1a dimensione: da 1 a 2 (2 elementi dell'array)
2a dimensione: da 3 a 4 (2 elementi dell'array)
Inizializzazione per gli elementi 2 * 2:
aiCardGame : ARRAY[1..2, 3..4] OF INT := [2(10),2(20)]; // Short notation for [10, 10, 20, 20]
Accesso ai dati
iLocal_1 := aiCardGame[1, 3]; // Assignment of 10 iLocal_2 := aiCardGame[2, 4]; // Assignment of 20
VAR
    aiCardGame : ARRAY[1..2, 3..4, 5..6] OF INT;
END_VAR1a dimensione: da 1 a 2
2a dimensione: da 3 a 4
3a dimensione: da 5 a 6
2 * 2 * 2 = 8 elementi dell'array
Inizializzazione
aiCardGame : ARRAY[1..2, 3..4, 5..6] OF INT := [10, 20, 30, 40, 50, 60, 70, 80];
Accesso ai dati
iLocal_1 := aiCardGame[1, 3, 5]; // Assignment of 10 iLocal_2 := aiCardGame[2, 3, 5]; // Assignment of 20 iLocal_3 := aiCardGame[1, 4, 5]; // Assignment of 30 iLocal_4 := aiCardGame[2, 4, 5]; // Assignment of 40 iLocal_5 := aiCardGame[1, 3, 6]; // Assignment of 50 iLocal_6 := aiCardGame[2, 3, 6]; // Assignment of 60 iLocal_7 := aiCardGame[1, 4, 6]; // Assignment of 70 iLocal_8 := aiCardGame[2, 4, 6]; // Assignment of 80
Inizializzazione
aiCardGame : ARRAY[1..2, 3..4, 5..6] OF INT := [2(10), 2(20), 2(30), 2(40)]; // Short notation for [10, 10, 20, 20, 30, 30, 40, 40]
Accesso ai dati
iLocal_1 := aiCardGame[1, 3, 5]; // Assignment of 10 iLocal_2 := aiCardGame[2, 3, 5]; // Assignment of 10 iLocal_3 := aiCardGame[1, 4, 5]; // Assignment of 20 iLocal_4 := aiCardGame[2, 4, 5]; // Assignment of 20 iLocal_5 := aiCardGame[1, 3, 6]; // Assignment of 30 iLocal_6 := aiCardGame[2, 3, 6]; // Assignment of 30 iLocal_7 := aiCardGame[1, 4, 6]; // Assignment of 40 iLocal_8 := aiCardGame[2, 4, 6]; // Assignment of 40
TYPE DATA_A
STRUCT
    iA_1 : INT;
    iA_2 : INT;
    dwA_3 : DWORD;
END_STRUCT
END_TYPE
PROGRAM PLC_PRG
VAR
    aData_A : ARRAY[1..3, 1..3, 1..10] OF DATA_A;
END_VARLa matrice aData_A è costituito da un totale di 3 * 3 * 10 = 90 elementi di matrice di tipo di dati DATA_A.
Inizializzare parzialmente
aData_A : ARRAY[1..3, 1..3, 1..10] OF DATA_A 
    := [(iA_1 := 1, iA_2 := 10, dwA_3 := 16#00FF),(iA_1 := 2, iA_2 := 20, dwA_3 := 16#FF00),(iA_1 := 3, iA_2 := 30, dwA_3 := 16#FFFF)];Nell'esempio, solo i primi 3 elementi vengono inizializzati in modo esplicito. Gli elementi a cui non è assegnato alcun valore di inizializzazione in modo esplicito vengono inizializzati internamente con il valore predefinito del tipo di dati di base. Questo inizializza i componenti della struttura a 0 a partire dall'elemento aData_A[2, 1, 1].
Accesso ai dati
iLocal_1 := aData_A[1,1,1].iA_1; // Assignment of 1 dwLocal_2 := aData_A[3,1,1].dwA_3; // Assignment of 16#FFFF
FUNCTION BLOCK FBObject_A
VAR
    iCounter : INT;
END_VAR
...
;
PROGRAM PLC_PRG
VAR
    aObject_A : ARRAY[1..4] OF FBObject_A;
END_VARLa matrice aObject_A composto da 4 elementi. Ogni elemento istanzia a FBObject_A blocco funzione.
Chiamata di funzione
aObject_A[2]();
Implementazione di FB_Something con metodo FB_Init
FUNCTION_BLOCK FB_Something
VAR
    _nId : INT;
    _lrIn : LREAL;
END_VAR
...
    METHOD FB_Init : BOOL
    VAR_INPUT
        bInitRetains : BOOL;
        bInCopyCode : BOOL;
        nId : INT;
        lrIn : LREAL;
    END_VAR
    _nId := nId;
    _lrIn := lrIN;Il blocco funzione FB_Something ha un metodo FB_Init che richiede 2 parametri.
Istanziazione dell'array con inizializzazione
PROGRAM PLC_PRG
VAR
    fb_Something_1 : FB_Something(nId := 11, lrIn := 33.44);
    a_Something : ARRAY[0..1, 0..1] OF FB_Something[(nId := 12, lrIn := 11.22), (nId := 13, lrIn := 22.33), (nId := 14, lrIn := 33.55),(nId := 15, lrIn := 11.22)];
END_VARSuggerimento
Notare la possibilità di utilizzare la funzione di monitoraggio implicito CheckBounds() per monitorare il mantenimento dei limiti dell'indice in fase di esecuzione.
Array di array
La dichiarazione di un "array di array" è una sintassi alternativa per gli array multidimensionali. Una raccolta di elementi viene nidificata invece di quotare gli elementi. La profondità di nidificazione è illimitata.
Sintassi per la dichiarazione
<variable name> : ARRAY[ <any dimension> ] OF ARRAY[ <any dimension> ] OF <data type> := <initialization> ;
Sintassi per l'accesso ai dati
<variable name> [<index of first array> ] [<index of next array> ]
| 
 | Nome dell'array Esempio:  | 
| 
 | Array annidato su tre livelli Esempio:  NotaLa profondità di nidificazione è illimitata. | 
| 
 | Tipo di dati di un elemento: 
 | 
| 
 | Opzionale Valori iniziali per l'array nidificato | 
PROGRAM PLC_PRG
VAR
    aiPoints : ARRAY[1..2,1..3] OF INT := [1,2,3,4,5,6];
    ai2Boxes : ARRAY[1..2] OF ARRAY[1..3] OF INT := [ [1, 2, 3], [ 4, 5, 6]];
    ai3Boxes : ARRAY[1..2] OF ARRAY[1..3] OF ARRAY[1..4] OF INT := [ [ [1, 2, 3, 4], [5, 6, 7, 8 ], [9, 10, 11, 12] ], [ [13, 14, 15, 16], [ 17, 18, 19, 20], [21, 22, 23, 24] ] ];
    ai4Boxes : ARRAY[1..2] OF ARRAY[1..3] OF ARRAY[1..4] OF ARRAY[1..5] OF INT;
END_VAR
aiPoints[1, 2] := 1200;
ai2Boxes[1][2] := 1200;Le variabili aiPoints e ai2Boxes raccogliere gli stessi dati, tuttavia la sintassi per la dichiarazione differisce da quella dei dati di accesso.


Matrice di lunghezza variabile
Nei blocchi funzione, nelle funzioni o nei metodi, è possibile dichiarare array di lunghezza variabile nel file VAR_IN_OUT sezione dichiarazione.
Il LOWER_BOUND e UPPER_BOUND gli operatori vengono forniti per determinare i limiti dell'indice dell'array effettivamente utilizzato in fase di esecuzione.
Suggerimento
Solo array dichiarati staticamente (non array generati tramite l'operatore __NEW) può essere passato a un array con lunghezza variabile.
Sintassi della dichiarazione di un array unidimensionale di lunghezza variabile
<variable name> : ARRAY[*] OF <data type> := <initialization> ;
| 
 | Nome dell'array Esempio:  | 
| 
 | Tipo di dati di un elemento: 
 | 
| 
 | Opzionale Valori iniziali per l'array di array | 
Sintassi della dichiarazione di un array multidimensionale di lunghezza variabile
<variable name> : ARRAY[*, *] OF <data type> := <initialization> ;
| 
 | Nome dell'array Esempio:  | 
| 
 | Dichiarazione per un array bidimensionale di lunghezza variabile Formalmente, un asterisco sta per ogni dimensione di lunghezza variabile. Le dimensioni sono separate da virgole. NotaÈ consentito un numero qualsiasi di dimensioni di lunghezza variabile. | 
Sintassi degli operatori per il calcolo dell'indice limite
LOWER_BOUND( <variable name> , <dimension number> ) UPPER_BOUND( <variable name> , <dimension number> )
Il SUM La funzione aggiunge i valori interi degli elementi dell'array e restituisce la somma calcolata come risultato. La somma viene calcolata su tutti gli elementi dell'array disponibili in fase di esecuzione. Poiché il numero effettivo di elementi dell'array sarà noto solo in fase di esecuzione, la variabile locale viene dichiarata come un array unidimensionale di lunghezza variabile.
FUNCTION SUM: INT;
VAR_IN_OUT
    aiData : ARRAY[*] OF INT;
END_VAR
VAR
    diCounter : DINT;
    iResult : INT;
END_VAR
iResult := 0;
FOR diCounter := LOWER_BOUND(aiData, 1) TO UPPER_BOUND(aiData, 1) DO // Calculates the length of the current array
    iResult := iResult + aiData[diCounter];
END_FOR;
SUM := iResult;