Automatisme : norme 1131-3 et GRAFCET/Le langage IL de la norme 1131-3
La norme CEI_61131-3 définit deux langages texte. Nous en présentons un dans ce chapitre. Il s’appelle Instructions List (à traduire par liste d'instructions) et ressemble énormément à de l’assembleur. Nous pensons cependant que son apprentissage est beaucoup plus aisé que l'apprentissage d'un assembleur. Pourquoi ? Tout simplement parce que son champ d'application n’est pas tout à fait le même, en tout cas dans ce cours d'automatisme.
Langage IL
[modifier | modifier le wikicode]Le présent paragraphe définit la sémantique du langage IL (Liste d'instructions) dont la syntaxe formelle est donnée dans l'annexe B.2. de la norme. Si vous n'avez pas la norme sous les yeux, c’est pas grave on va essayer de la résumer ici.
Les champs d'écriture des instructions
[modifier | modifier le wikicode]Comme l'indique le Tableau 1, une liste d'instructions est composée d'une suite d'instructions. Chaque instruction doit débuter sur une nouvelle ligne et doit contenir un opérateur accompagné de modificateurs optionnels et, si cela est nécessaire pour l'opération considérée, un ou plusieurs opérandes séparés par des virgules. Les opérandes peuvent être choisis parmi les représentations des variables en tableau 3.
L'instruction peut être précédée d'une étiquette d'identification suivie de deux points ":". s'il y a un commentaire, il doit constituer le dernier élément d'une ligne. Des lignes vides peuvent être insérées entre les instructions.
- Tableau 1 - Exemples de champs d'instructions
Etiquette Instruction Opérande Commentaire START: LD %IX1 (* BOUTON POUSSOIR *) ANDN %MX5 (* NON INHIBEE *) S %QX2 (* MARCHE VENTILATEUR *)
Le champ étiquette n’est pas obligatoirement rempli.
Instructions, modificateurs et opérandes
[modifier | modifier le wikicode]Les instructions (on parle parfois des opérateurs) standards ainsi que leurs modificateurs et opérandes autorisés doivent être tels qu'énumérés dans le tableau 3 (un peu plus loin).
Le modificateur "N" indique une négation booléenne de l'opérande.
Par exemple l'instruction ANDN %IX2 est interprétée de la manière suivante :
resultat := resultat AND NOT %IX2
Le modificateur parenthèse gauche "(" indique que l'évaluation de l'opérateur est différée jusqu'à ce qu'un opérateur parenthèse droit ")" soit rencontré ; par exemple la séquence d'instructions suivante:
AND( %IX1 OR %IX2 )
doit être interprétée de la manière suivante :
resultat := resultat AND (%IX1 OR %IX2)
Le modificateur "C" indique que l'instruction donnée ne doit être exécutée que si le résultat faisant l’objet de l'évaluation en cours a la valeur booléenne 1 (ou la valeur booléenne 0 si l'opérateur est combiné avec le modificateur "N").
- Tableau 2 - Opérateurs du langage Instructions List (p 230 de la norme)
no
|
Opérateur
|
Modificateur
|
Opérande
|
Sémantique
|
1
|
LD
|
N
|
Note 2
|
Rendre le résultat courant égal à l'opérande |
2
|
ST
|
N
|
Note 2
|
Mémoriser le résultat à l'emplacement de l'opérande |
3
|
S
R
|
Note 3
Note 3
|
BOOL
BOOL
|
Positionner l'opérande booléen à 1
Remettre l'opérande booléen à 0 |
4
5
6
7
|
AND
&
OR
XOR
|
N, (
N, (
N, (
N, (
|
BOOL
BOOL
BOOL
BOOL
|
AND booléen
AND booléen OR booléen OR exclusif booléen |
8
9
10
11
|
ADD
SUB
MUL
DIV
|
(
(
(
(
|
Note 2
Note 2
Note 2
Note 2
|
Addition
Soustraction Multiplication Division |
12
13
14
15
16
17
|
GT
GE
EQ
NE
LE
LT
|
(
(
(
(
(
(
|
Note 2
Note 2
Note 2
Note 2
Note 2
Note 2
|
Comparaison : >
Comparaison : >= Comparaison : = Comparaison : <> Comparaison : <= Comparaison : < |
18
19
20
|
JMP
CAL
RET
|
C, N
C, N
C, N
|
LABEL
NAME
|
Saut vers l'étiquette
Appel d'un bloc fonctionnel (Note 4) Retour d'une fonction appelée ou d'un bloc fonctionnel |
21
|
)
|
Evaluation d'une opération différée | ||
NOTES
1 Se reporter au texte précédent pour toute explication relative aux modificateurs et à l'évaluation des expressions. 2 Ces opérateurs doivent être soit surchargés soit saisis comme défini en 2.5.1.4. Le résultat courant et l'opérande doivent être du même type 3 Ces opérations sont effectuées si et seulement si le résultat courant a la valeur booléenne 1 4 Le nom du bloc fonctionnel est suivi par une liste d'arguments entre parenthèses, tels que définis en 3.2.3. 5 Lorsqu'une instruction JMP est contenue dans une construction ACTION...END_ACTION l'opérande doit être une étiquette à l'intérieur de la même construction |
ST prend l'accumulateur et le stocke dans l'opérande tandis que S (qui n'a pas de modificateur C) agit comme s'il avait un modificateur C : l'opérande sera mis à 1 si l'accumulateur est à 1.
Opérandes
[modifier | modifier le wikicode]Les opérandes sont décrits dans le tableau ci-dessous.
- Tableau 3
no | Préfixe | Signification |
1
2 3 |
I
Q M |
Emplacement d'entrée
Emplacement de sortie Emplacement de mémoire |
4
5 6 7 8 9 |
X
Aucun B W D L |
Taille d'un seul bit
Taille d'un seul bit Taille d'un octet (8bits) Taille d'un mot (16 bits) Taille d'un double mot (32 bits) Taille d'un mot long (Quad) (64 bits) |
NOTES
1 Sauf déclaration contraire, le type de donnée d'une variable directement adressable, de la taille d'un "seul bit" doit être BOOL. 2 Les organismes nationaux de normalisation peuvent publier des tables de traduction de ces préfixes. |
Les blocs fonctionnels et les fonctions
[modifier | modifier le wikicode]Pour éviter toute confusion dans la terminologie, nous regroupons dans cette section les problèmes concernant les fonctions et les blocs fonctionnels. Il vous faut essayer de distinguer ces deux usages ainsi que leurs différences. Notons que les langages graphiques ou textuels permettent en général de définir des blocs fonctionnels.
Les fonctions standards
[modifier | modifier le wikicode]Citons pèle mêle les fonctions standards : ADD, SUB, MUL, DIV, SHL, SHR, SEL, MUX, MAX, MIN, LIMIT (limiteur, écrêteur), GT, GE, EQ, LE, LT, NE, des fonctions de chaîne de caractères.
Les fonctions sont appelées directement en langage IL comme l'exemple ci-dessous où les fonctions appelées sont des fonctions de conversions BCD_TO_INT et INT_TO_BCD.
- Tableau 4 – Appel de fonctions
Etiquette Instruction Opérande Commentaire START: LD Poids_brut (* Poids brut *) BCD_TO_INT (* Conversion par exemple*) SUB tare (* Soustraction de la tare *) INT_TO_BCD
Fonctions et blocs fonctionnels avec IL
[modifier | modifier le wikicode]Les blocs fonctionnels, tels que définis dans un autre chapitre, peuvent être lancés sous condition ou inconditionnellement à l'aide de l'opérateur CAL (Appel). Comme l'illustre le tableau 5, ce lancement peut prendre trois formes.
- Tableau 5 - Caractéristiques du lancement de bloc fonctionnel en langage IL (p 232)
no | Description / exemple |
1 | CAL avec liste d'entrées
CAL C10 (CU := %IX10, PV:=15) |
2 | CAL avec entrées de charge/mémoire
LD 15 ST C10.PV LD %IX10 ST C10.CU CAL C10 |
3 | Utilisation d'opérateurs d'entrée:
LD 15 PV C10 LD %IX10 CU C10 |
NOTE - Une déclaration telle que VAR C10 : CTU; END_VAR est supposée dans les exemples ci-dessus |
Les blocs fonctionnels doivent être déclarés comme des variables dont le type est justement le nom du bloc fonctionnel : c’est la différence avec les fonctions.
Programmation de GRAFCETs en langage IL
[modifier | modifier le wikicode]Un problème à se poser est comment programmer un GRAFCET à l'aide du langage IL.
Première méthode : on utilise les équations de récurrence.
(* initialisation *) LD %S1 (* S1 bit interne d'initialisation *) S %M0 (* M0 = étape 1 *) R %M1 (* M1 = étape 2 *) R %M2 (* M3 = étape 3 *) (* sequentiel *) LD %M0 AND %I1.0 (* condition 1*) S %M1 (* si le resultat courant est vrai *) R %M0 (* si le resultat courant est vrai *) LD %M1 AND %I1.1 ( condition 2 *) S %M2 R %M1 ....
Deuxième méthode : des éléments prédefinis existent :
- construction STEP ... END_STEP ou INITIAL_STEP ... END_STEP
- construction TRANSITION ... END_TRANSITION (TRANSITION FROM et TO)
- construction ACTION ...END_ACTION
Exemples :
- en langage IL cela donne :
(************ Langage IL **************) STEP STEP7 : A(N);END_STEP (*action A normale *) TRANSITION FROM STEP7 TO STEP 8 : LD %IX2.4 AND %IX2.3 END_TRANSITION STEP STEP8 : B(S);END_STEP (* action SET B*)
ou encore pour donner un exemple avec action temporisée :
STEP STEP7 : A(N);B(L,t#10s); END_STEP TRANSITION FROM (STEP7,STEP8) TO STEP 9 : LD %IX2.4 AND %IX2.3 END_TRANSITION STEP STEP9 : B(S);A(N);END_STEP (*deux actions*)
- de manière équivalente en langage ST on pourrait écrire :
'********** Langage ST *************) STEP STEP7 : END_STEP TRANSITION FROM STEP7 TO STEP 8 : := %IX2.4 & %IX2.3; END_TRANSITION STEP STEP8 : END_STEP '''Texte en gras'''