Une énumération est un type défini par l'utilisateur constitué d'un certain nombre de constantes de type chaîne séparées par une virgule, appelées valeurs d'énumération. Les valeurs d'énumération identifient des constantes globales dans le projet.
Les valeurs d'énumération, même celles déclarées dans un POU, sont reconnues globalement dans tout le projet.
La boîte de dialogue Ajouter un objet permet de créer une énumération dans un projet sous forme d'objet DUT.
NOTE : la déclaration d'une énumération locale n'est possible que dans TYPE.
Syntaxe de déclaration des énumérations
TYPE <enum identifier>: (<enum_0>|:=<value>,<enum_1>|:=<value>, ...,<enum _n>|:=<value>)|<base data type>|:=<default value>;
END_TYPE
Les opérations suivantes sont également prises en charge :
oInitialisation de valeurs d'énumération simples
oDéfinition d'un type de données de base <base data type> (consultez le paragraphe Seconde extension de la norme IEC 61131-3)
oDéfinition d'une valeur par défaut pour l'initialisation de tous les composants
Syntaxe de déclaration de variables de type énumération
<variable identifier> : <enum identifier>| := <initialization value>
Une variable de type <enum identifier> peut prendre les valeurs d'énumération <enum_..>.
Si... |
Alors… |
---|---|
ovous n'avez pas défini de valeur par défaut (<default value>) dans la déclaration d'énumération (voir exemple suivant), et ovous n'avez pas défini de valeur d'initialisation explicite dans la déclaration des variables de type <enum identifier> |
la variable est initialisée sur la valeur du premier composant d'énumération, sauf si un composant est remis à 0 dans la déclaration de l'énumération. Dans ce cas, la variable est elle-aussi remise à 0. |
Exemple d'énumération avec valeur d'initialisation explicite pour un composant
Déclaration de l'énumération
TYPE TRAFFIC_SIGNAL: (red, yellow, green:=10);
(* The initial value for each of the colors is red 0, yellow 1, green 10 *)
END_TYPE
Dans cette déclaration, les valeurs d'initialisation par défaut sont affectées aux deux premiers composants :
red = 0, yellow = 1
La valeur d'initialisation du troisième composant est définie explicitement :
green = 10
Utilisation dans l'implémentation
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;
Exemple d'énumération avec valeur par défaut définie
Déclaration de l'énumération
TYPE COLOR :
(
red,
yellow,
green
) := green;
END_TYPE
Utilisation dans l'implémentation
c1 : COLOR;
c2 : COLOR := yellow;
Dans ce cas, la variable c1 est initialisée sur la valeur green. La valeur d'initialisation yellow est définie pour c2.
Première extension de la norme IEC 61131-3
Pour désambiguïser l'accès à une constante de type énumération, vous pouvez utiliser le nom de type des énumérations (comme opérateur de domaine de validité).
La même constante peut donc être reprise dans plusieurs énumérations.
Exemple
Définition de deux énumérations avec composants du même nom
TYPE COLORS_1: (red, blue);
END_TYPE
TYPE COLORS_2: (green, blue, yellow);
END_TYPE
Utilisation, dans un même bloc, de composants du même nom provenant de différentes énumérations
colorvar1 : COLORS_1;
colorvar2 : COLORS_2;
(* valid: *)
colorvar1 := COLORS_1.blue;
colorvar2 := COLORS_2.blue;
(* invalid: *)
colorvar1 := blue;
colorvar2 := blue;
Seconde extension de la norme IEC 61131-3
Le type de données de base de l'énumération peut être défini explicitement (INT par défaut).
Exemple de type de données de base défini explicitement pour une énumération
TYPE COLORS_2 : (yellow, blue, green:=16#8000)DINT;
END_TYPE
NOTE : l'attribut strict est attribué automatiquement à chaque énumération ajoutée à un projet, sur la ligne précédant la déclaration de TYPE. Cela génère des erreurs lors de la compilation dans les conditions suivantes :
oOpération arithmétique avec variables de type énumération
oAttribution d'une valeur constante à une variable de type énumération, dont la constante n'est pas une valeur d'énumération
oAttribution d'une valeur non constante à une variable de type énumération, dont la valeur non constante n'est pas de type énumération
L'attribut peut être ajouté ou supprimé de manière explicite.
Syntaxe : {attribute 'strict'}