Una enumeración es un tipo definido por el usuario que consta de una serie de constantes de cadena delimitadas por comas. Estas constantes se denominan valores de enumeración. Los valores de enumeración son identificadores de constantes globales en el proyecto.
Los valores de enumeración se reconocen globalmente en todas las áreas del proyecto, incluso si se declaran dentro de un POU.
Una enumeración se crea en un proyecto como objeto DUT mediante el cuadro de diálogo Agregar objeto.
NOTA: La declaración de enumeración local solo es posible dentro de TYPE.
Sintaxis para la declaración de enumeraciones
TYPE <enum identifier>: (<enum_0>|:=<value>,<enum_1>|:=<value>, ...,<enum _n>|:=<value>)|<base data type>|:=<default value>;
END_TYPE
Pueden utilizarse asimismo los siguientes elementos:
oInicialización de valores de enumeración únicos
oDefinición de un <base data type> (consulte el apartado Segunda extensión a la norma IEC 61131-3)
oDefiniciones de un valor predeterminado para inicializar todos los componentes
Sintaxis para la declaración de variables con el tipo de enumeración
<variable identifier> : <enum identifier>| := <initialization value>
Una variable de tipo <enum identifier> puede admitir los valores de enumeración <enum_..>.
Si... |
Entonces... |
---|---|
oSi no ha definido un <default value> en la declaración de la enumeración (consulte el ejemplo siguiente) y oSi tampoco ha definido un valor de inicialización explícito para la declaración de variables de tipo <enum identifier> |
La variable se inicializa con el valor del primer componente de la enumeración. Esto se aplicará a menos que se haya inicializado un componente con el valor 0 en la declaración de la enumeración. En ese caso, la variable también se inicializa con el valor 0. |
Ejemplo de enumeración con valor de inicialización explícito para un componente
Declaración de la enumeración
TYPE TRAFFIC_SIGNAL: (red, yellow, green:=10);
(* The initial value for each of the colors is red 0, yellow 1, green 10 *)
END_TYPE
En esta declaración, los dos primeros componentes obtienen valores de inicialización predeterminados:
red = 0, yellow = 1
El valor de inicialización del tercer componente se define de manera explícita:
green = 10
Uso en la implementación
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;
Ejemplo de enumeración con valor predeterminado definido
Declaración de la enumeración
TYPE COLOR :
(
red,
yellow,
green
) := green;
END_TYPE
Uso en la implementación
c1 : COLOR;
c2 : COLOR := yellow;
En ese caso, la variable c1 se inicializa con el valor green. El valor de inicialización yellow se define para c2.
Primera extensión a la norma IEC 61131-3
Puede utilizar la denominación de tipo de las enumeraciones (como operador de ámbito) para evitar ambigüedad en el acceso a una constante de enumeración.
De este modo, es posible utilizar la misma constante en enumeraciones diferentes.
Ejemplo
Definición de dos enumeraciones con componentes de nombre idéntico
TYPE COLORS_1: (red, blue);
END_TYPE
TYPE COLORS_2: (green, blue, yellow);
END_TYPE
Uso de componentes de nombre idéntico procedentes de diferentes enumeraciones de un bloque
colorvar1 : COLORS_1;
colorvar2 : COLORS_2;
(* valid: *)
colorvar1 := COLORS_1.blue;
colorvar2 := COLORS_2.blue;
(* invalid: *)
colorvar1 := blue;
colorvar2 := blue;
Segunda extensión a la norma IEC 61131-3
Puede especificar explícitamente el tipo de datos base de la enumeración, que de forma predeterminada es INT.
Ejemplo de otro tipo de datos base explícito para una enumeración
TYPE COLORS_2 : (yellow, blue, green:=16#8000)DINT;
END_TYPE
NOTA: El atributo strict se asigna automáticamente a cada enumeración que añada a un proyecto en la línea situada encima de la declaración de TYPE. Esta situación provocará errores que se detectarán durante el proceso de compilación en los siguientes casos:
oOperación aritmética con variables del tipo de enumeración
oAsignación de un valor constante a una variable del tipo de enumeración en la que la constante no se corresponde con un valor de la enumeración
oAsignación de un valor no constante a una variable del tipo de enumeración en la que la no constante contiene un tipo de datos distinto del tipo de la enumeración
Puede añadir o eliminar el atributo de manera explícita.
Sintaxis: {attribute 'strict'}