Automatisme : norme 1131-3 et GRAFCET/Le langage IL de la norme 1131-3

Leçons de niveau 14
Une page de Wikiversité, la communauté pédagogique libre.
Début de la boite de navigation du chapitre
Le langage IL de la norme 1131-3
Icône de la faculté
Chapitre no 7
Leçon : Automatisme : norme 1131-3 et GRAFCET
Chap. préc. :Techniques de programmations des GRAFCETs
Chap. suiv. :Les modes de marche et d'arrêt
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Automatisme : norme 1131-3 et GRAFCET : Le langage IL de la norme 1131-3
Automatisme : norme 1131-3 et GRAFCET/Le langage IL de la norme 1131-3
 », n'a pu être restituée correctement ci-dessus.

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



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.

Exemple de grafcet à implanter

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'''