Un'enumerazione è un tipo definito dall'utente costituito da una serie di costanti stringa delimitate da virgola. Queste costanti sono definite valori di enumerazione. I valori dell'enumerazione sono identificativi per le costanti globali nel progetto.
I valori di enumerazione sono riconosciuti globalmente in tutte le aree del progetto anche se sono dichiarati in un POU.
Un'enumerazione viene creata in un progetto come oggetto DUT tramite la finestra di dialogo
.TYPE <enum identifier>: (<enum_0>|:=<value>,<enum_1>|:=<value>, ...,<enum _n>|:=<value>)|<base data type>|:=<default value>;
END_TYPE
È possibile utilizzare eventualmente gli elementi seguenti:
Inizializzazione di singoli valori di enumerazione
Definizione di un <base data type>
(consultare il paragrafoSeconda estensione allo standard IEC 61131-3)
Definizioni di un valore predefinito per inizializzare tutti i componenti
<variable identifier> : <enum identifier>| := <initialization value>
Una variabile di tipo <enum identifier>
può assumere valori di enumerazione <enum_..>
.
Se... |
In questo caso... |
---|---|
|
La variabile viene inizializzata con il valore del primo componente dell'enumerazione, a meno che un componente sia inizializzato con il valore 0 nella dichiarazione di enumerazione. In questo caso, anche la variabile viene inizializzata con il valore 0. |
Dichiarazione dell'enumerazione
TYPE TRAFFIC_SIGNAL: (red, yellow, green:=10);
(* The initial value for each of the colors is red 0, yellow 1, green 10 *)
END_TYPE
In questa dichiarazione, i primi due componenti ottengono valori di inizializzazione predefiniti:
red
= 0
, yellow
= 1
Il valore di inizializzazione del terzo componente è definito esplicitamente:
green
= 10
Utilizzo nell'implementazione
TRAFFIC_SIGNAL1 : TRAFFIC_SIGNAL;
TRAFFIC_SIGNAL1:=10; (* The value of the TRAFFIC_SIGNAL1 is "green" *)
FOR i:= red TO green DO
i := i + 1;
END_FOR;
Dichiarazione dell'enumerazione
TYPE COLOR :
(
red,
yellow,
green
) := green;
END_TYPE
Utilizzo nell'implementazione
c1 : COLOR;
c2 : COLOR := yellow;
In questo caso, la variabile c1
viene inizializzata con il valore green
. Il valore di inizializzazione yellow
è definito per c2
.
È possibile utilizzare il nome del tipo delle enumerazioni (come operatore ambito) per disambiguare l'accesso a una costante di enumerazione.
Pertanto è possibile utilizzare la stessa costante in enumerazioni diverse.
Esempio
Definizione di due numerazioni con componenti con lo stesso nome
TYPE COLORS_1: (red, blue);
END_TYPE
TYPE COLORS_2: (green, blue, yellow);
END_TYPE
Utilizzare componenti con lo stesso nome di enumerazioni diverse in un blocco
colorvar1 : COLORS_1;
colorvar2 : COLORS_2;
(* valid: *)
colorvar1 := COLORS_1.blue;
colorvar2 := COLORS_2.blue;
(* invalid: *)
colorvar1 := blue;
colorvar2 := blue;
È possibile specificare esplicitamente il tipo di dati di base dell'enumerazione, che per impostazione predefinita è INT.
Esempio di un altro tipo di dati base esplicito per un'enumerazione
TYPE COLORS_2 : (yellow, blue, green:=16#8000)DINT;
END_TYPE
strict
viene assegnato automaticamente a ciascuna enumerazione aggiunta al progetto nella riga sopra la dichiarazione TYPE
. Ciò provoca il rilevamento di errori durante il processo di compilazione nei casi seguenti:
Operazione aritmetica con variabili di tipo enumerazione
Assegnazione di un valore costante a una variabile di tipo enumerazione, in cui la costante non corrisponde a un valore di enumerazione
Assegnazione di un valore non costante a una variabile di tipo enumerazione, in cui la non costante ha un altro tipo di dati diverso da quello di enumerazione
È possibile aggiungere o rimuovere esplicitamente l'attributo.
Sintassi: {attribute 'strict'}