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
| Opzionale Il pragma ha l'effetto di eseguire un rigoroso test di tipo come descritto di seguito. The pragma is optional, but recommended. |
| Name of the enumeration which can be used in the code as a data type Esempio: |
| 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: |
| Opzionale È possibile assegnare in modo esplicito uno dei seguenti tipi di dati di base:
Impostazione predefinita: |
| 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. |
{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
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'}
.
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.
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.
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.
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.
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.