Skip to main content

Enumerazione

Un'enumerazione è un tipo di dati definito dall'utente composto da un elenco di membri separati da virgole (valori di enumerazione) per dichiarare variabili definite dall'utente.

Dichiari un'enumerazione in un DUT oggetto, che avete già creato nel progetto facendo clic Aggiungi oggetto.

In the application code, you can use the enumeration members like constants whose identifier <enumeration name>.<member name> is recognized globally in the project.

Per ulteriori informazioni, vedere: DUT

Dichiarazione

Sintassi

{attribute 'strict'}

TYPE <enumeration name> :

(

    <member name> := <value>

) <base data type> := <initialization> ;

END_TYPE

{attribute 'strict'}

Opzionale

Il pragma ha l'effetto di eseguire un rigoroso test di tipo come descritto di seguito.

The pragma is optional, but recommended.

<enumeration name>

Name of the enumeration which can be used in the code as a data type

Esempio: COLOR_BASIC

    <member name> := <initial value>

Qualsiasi numero di membri, ma almeno due membri

Un'enumerazione è un elenco separato da virgole di nomi di membri tra parentesi tonde. L'ultimo membro prima della parentesi tonda di chiusura non richiede una virgola. Tutti i membri hanno lo stesso tipo di dati

I valori dei membri vengono inizializzati automaticamente: a partire da 0, i valori vengono continuamente incrementati di 1. È inoltre possibile assegnare esplicitamente un valore iniziale fisso ai singoli membri

Esempio: yellow := 1

<base data type>

Opzionale

È possibile assegnare in modo esplicito uno dei seguenti tipi di dati di base:

INT | UINT | SINT | USINT | DINT | UDINT | LINT | ULINT | BYTE | WORD | DWORD | LWORD

Impostazione predefinita: INT

:= <initialization>

Optional

Uno dei membri può essere dichiarato esplicitamente come membro iniziale.

Predefinito: se un'inizializzazione non è specificata in modo esplicito, l'inizializzazione viene eseguita automaticamente con il membro superiore.

Esempio 227. Esempio
{attribute 'qualified_only'}
{attribute 'strict'}
TYPE COLOR_BASIC :
(
    yellow,
    green,
    blue,
    black
) // Basic data type is INT, default initialization for all COLOR_BASIC variables is yellow
;
END_TYPE


Enumerazione con tipo di dati di base esplicito

Estensioni dello standard IEC 61131-3

Il tipo di dati di base per una dichiarazione di enumerazione è INT per impostazione predefinita. Tuttavia, è anche possibile dichiarare enumerazioni basate esplicitamente su un altro

Esempio 228. Esempio

Enumerazione con tipo di dati di base DWORD

TYPE COLOR :
(
        white := 16#FFFFFF00,
        yellow := 16#FFFFFF00,
        green := 16#FF00FF00,
        blue := 16#FF0000FF,
        black := 16#88000000
) DWORD := black
; // Basic data type is DWORD, default initialization for all COLOR variables is black
END_TYPE


Regole di programmazione rigorose

Importante

Nel CODESYS V3.5 SP7 e versioni successive, il pragma {attribute 'strict'} viene aggiunto automaticamente nella prima riga quando si dichiara un'enumerazione.

Le rigide regole di programmazione vengono attivate quando si aggiunge il pragma {attribute 'strict'}.

. Il codice seguente è considerato un errore del compilatore:
  • Operazioni aritmetiche con membri di enumerazione

    Ad esempio, una variabile di enumerazione non può essere utilizzata come variabile contatore in un FOR cappio.

  • Assegnazione di un valore costante, che non corrisponde a un valore di enumerazione, a un membro di enumerazione

  • Assegnazione di una variabile non costante, che ha un altro tipo di dati come enumerazione, a un membro dell'enumerazione

Le operazioni aritmetiche possono portare all'assegnazione di valori non dichiarati ai membri dell'enumerazione. Uno stile di programmazione migliore consiste nell'usare SWITCH/CASE dichiarazioni per l'elaborazione dei valori dei membri.

Dichiarazione e inizializzazione delle variabili di enumerazione

Sintassi

<variable name> : <enumeration name> := <initialization> ;

Nel caso di una dichiarazione di una variabile di enumerazione con enumerazione definita dall'utente, la variabile può essere inizializzata con un membro di enumerazione.

Esempio 229. Esempio
PROGRAM PLC_PRG
VAR
    colorCar: COLOR;
    colorTaxi : COLOR := COLOR.yellow;
END_VAR

La variabile colorCar è inizializzato con COLOR.black. Questa è l'inizializzazione predefinita per tutte le variabili di enumerazione COLOR e definito in questo modo nella dichiarazione del tipo. La variabile colorTaxi ha una propria inizializzazione.



Se non viene specificata alcuna inizializzazione, il valore di inizializzazione è 0.

Esempio 230. Esempio
PROGRAM PLC_PRG
VAR
    cbFlower : COLOR_BASIC;
    cbTree: COLOR_BASIC := COLOR_BASIC.green;
END_VAR

La variabile cbFlower è inizializzato con COLOR_BASIC.yellow. Questa è l'inizializzazione predefinita per tutte le variabili di enumerazione COLOR_BASIC. Poiché la dichiarazione di enumerazione non specifica un membro per l'inizializzazione, il sistema viene inizializzato automaticamente con il membro con il valore 0. Questo è in genere il primo dei membri dell'enumerazione. Tuttavia, può anche essere un altro membro non in prima posizione ma inizializzato esplicitamente.

La variabile cbTree ha un'inizializzazione esplicita.



Se non viene specificato alcun valore sia per il tipo che per la variabile, si applica la seguente regola: se un'enumerazione contiene un valore per 0, questo valore è l'inizializzazione predefinita e, in caso contrario, il primo membro dell'elenco.

Esempio 231. Esempio

Inizializzazione con il membro 0

TYPE ENUM :
(
    e1 := 2,
    e2 := 0,
    e3
)
;
END_TYPE

PROGRAM PLC_PRG
VAR
    e : ENUM;
END_VAR

La variabile e è inizializzato con ENUM.e2.

Inizializzazione con il primo membro

TYPE ENUM2 :
(
    e1 := 3,
    e2 := 1,
    e3
)
;
END_TYPE

PROGRAM PLC_PRG
VAR
    e2 : ENUM2;
END_VAR

La variabile e2 è inizializzato con ENUM.e1.



Accesso univoco ai membri dell'enumerazione

Estensioni dello standard IEC 61131-3

I membri dell'enumerazione possono anche essere usati come variabili costanti con l'identificatore <enumeration name>.<member name>. I membri dell'enumerazione sono riconosciuti globalmente nel progetto e l'accesso ad essi è unico. Pertanto, un nome membro può essere utilizzato in diverse enumerazioni.

Esempio 232. Esempio

Membro: blue

PROGRAM PLC_PRG
VAR
    cbFlower : COLOR_BASIC;
    colorCar : COLOR;
END_VAR

(* unambiguous identifiers although the component names are identical *)
cbFlower := COLOR_BASIC.blue;
colorCar := COLOR.blue;

(* invalid code *)
cbFlower := blue;
colorCar := blue;


Per ulteriori informazioni, vedere: Spazio dei nomi di enumerazione.