Skip to main content

Enumerazione

Un'enumerazione (nota anche come enumerazione) è un tipo di dati definito dall'utente che consiste in un elenco di valori di enumerazione separati da virgole. Un'enumerazione (in breve enum

Im Applikationscode können Sie einen Enumerationswert wie eine konstante Variable verwenden. Die Konstante <enumeration name>.<member name> ist global im Projekt bekannt.

Dichiari un'enumerazione in un DUT oggetto utilizzato in precedenza con il comando Aggiungi oggetto creato nel progetto.

Suggerimento

Se desideri integrare i valori di enumerazione con un testo significativo, aggiungi un Supporto per elenchi di testo aggiungi.

Dichiarazione

Sintassi

{attribute 'strict'}
TYPE <ennumeration 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: eRed, eYellow, eGreen := 10

<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 229. 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
{attribute 'qualified_only'}
{attribute 'strict'}
TYPE E_TRAFFICSIGNAL  :
(
	eRed,
	eYellow,
	eGreen := 10
);
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 230. 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 231. 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 232. 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 233. 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 234. 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.