Enumerazioni

Panoramica

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 Aggiungi oggetto.

NOTA: La dichiarazione dell'enumerazione locale è possibile solo in TYPE.

Sintassi per dichiarare enumerazioni

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

Sintassi per dichiarare variabili con il tipo enumerazione

<variable identifier> : <enum identifier>| := <initialization value>

Una variabile di tipo <enum identifier> può assumere valori di enumerazione <enum_..>.

Inizializzazione

Se...

In questo caso...

  • Se non è stato definito un <default value> nella dichiarazione dell'enumerazione (vedere l'esempio seguente) e

  • Se non è stato definito un valore di inizializzazione esplicito per la dichiarazione di variabili di tipo <enum identifier>

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.

Esempio di una enumerazione con valore di inizializzazione esplicito per un componente

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;

Esempio di enumerazione con un valore predefinito definito

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.

Prima estensione allo standard IEC 61131-3

È 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;

Seconda estensione allo standard IEC 61131-3

È 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
NOTA: L'attributo 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'}