Chapitre 3 P Av API V4
Chapitre 3 P Av API V4
I. Introduction
Pour réaliser-implémenter les programmes de fonctionnement d’un système automatisé il existe
différents langages en fonction de l’automate, de l’utilisateur et du concepteur. Les langages de
programmation utilisées pour les API ont évolué depuis l’introduction des automates à la fin des
années 60. Depuis 1993 ; une première édition est apparue, en 2003 la deuxième édition de la
norme CEI 61131-3 est apparue qui normalise tous les langages de programmation des API.
Chaque API traduit (interprète) le langage de programmation en langage compréhensible
directement par le microprocesseur ; ce langage est propre à chaque constructeur, il est lié au
matériel mis en œuvre.
La norme IEC 61131.x est actuellement répertorié en huit chapitres :
IEC 61131-1 Programmable controllers - General information (En) (1992)
CEI 61131-1 définitions, informations générales (Fr).
IEC 61131-2 Equipment requirements and tests (2003)
CEI 61131-2 spécifications et essais matériels
IEC 61131-3 Programmable controllers - Programming languages (2003)
CEI 61131-3 langages de programmations
IEC 61131-4 Programmable controllers - User guidelines
CEI 61131-4 documentations
IEC 61131-5 Programmable controllers – Communications (2000)
CEI 61131-5 Communications
IEC 61131-6 Reserved
IEC 61131-7 Programmable controllers - Fuzzy control programming
CEI 61131-7 Automates programmables - Programmation en logique floue
IEC 61131-8 Programmable controllers - Guidelines for the application and implementation
of programming languages
CEI 61131-8 Automates programmables – Lignes directives pour l’application et la mise en
œuvre des langages de programmation.
II. Les différents types des variables des données d’un API
Toutes les variables des données utilisées par l’API sont de types zones mémoires distinguées
comme suit :
Zone E : Mémoire image des entrées sur bus local ou bus de terrain tel que PROFIBUS
Zone A : Mémoire image des sorties sur bus local ou bus de terrain tel que PROFIBUS
Zone M : Mémoire utilisateur
Zone L : Mémoire locale, associée à un module de programme
Zone P : Accès à la périphérie
Zone T : Mémoire des temporisations
Zone Z : Mémoire des compteurs
Zone DB : Mémoire utilisateur ou système structuré dans des blocs de données
1
Chapitre 3 : API Les langages programmation des API
L ’adresse d’une variable est structurée pour tenir compte de la structure matérielle de
l ’automate. Les objets (directions) E, A, M, DB, PE et PA sont rangés dans les formats : Bits
ou dans des OCTET (8 bits) ou dans des MOT (Word : deux octets, 16 bits) ou dans des DOUBLE
MOT (Double Word : quatre octets, 32 bits) :
NB. Les mêmes termes précédés d'un P accèdent directement à la périphérie (PEWx, PEDx)
NB. Les mêmes termes précédés d'un P accèdent directement à la périphérie (PAWx, PADx)
→ Mémentos M (lecture dans la mémoire interne)
My.x désigne un bit de mémoire, y est le n° d'octets (0 à 65566), x sa position
(0 à 8).
MBy désigne un octet de mémoire (8 bits).
MWy désigne un mot de mémoire (16 bits).
MDy désigne un double mot de mémoire (32 bits).
L'équation et le tableau suivants illustre l'affectation des bits dans une variable mémento :
2
Chapitre 3 : API Les langages programmation des API
𝑂𝑐𝑡𝑒𝑡 𝑀𝑜𝑖𝑛𝑠 𝑆𝑖𝑔𝑛𝑖𝑓𝑖𝑐𝑎𝑡𝑖𝑓 𝑂𝑐𝑡𝑒𝑡 𝑃𝑙𝑢𝑠 𝑠𝑖𝑔𝑛𝑖𝑓𝑖𝑐𝑎𝑡𝑖𝑓
"𝐿𝑆𝐵" "𝑀𝑆𝐵"
𝑀𝐷0 = ⏞
𝑀𝑊0 , ⏞
𝑀𝑊2
𝑀𝐷0
⏞ 𝑀𝑊0
⏞ 𝑀0
⏞𝐿𝑆𝐵 𝑀𝑆𝐵 𝑀𝑊2
= ⏞
𝑀0.0 , 𝑀0.1 , 𝑀0.2, 𝑀0.3 , 𝑀0.4 , 𝑀0.5 , 𝑀0.6 , ⏞
𝑀0.7 , 𝑀1 , ⏞
𝑀2 , 𝑀3
NB:
N° bit
Double
Octet
Mot
mot
7 6 5 4 3 2 1 0
M0.7
M0.6
M0.5
M0.4
M0.3
M0.2
M0.1
M0.0
M0
MW0
M1.7
M1.6
M1.5
M1.4
M1.3
M1.2
M1.1
M1.0
M1
MD0
M2.7
M2.6
M2.5
M2.4
M2.3
M2.2
M2.1
M2.0
M2
MW2
Mémoire de 1 Ko
M3.7
M3.6
M3.5
M3.4
M3.3
M3.2
M3.1
M3.0
M3
M4.7
M4.6
M4.5
M4.4
M4.3
M4.2
M4.1
M4.0
M4
M1023
MD1021
MW1023
M1024.7
M1024.6
M1024.5
M1024.4
M1024.3
M1024.2
M1024.1
M1024.0
M1024
Plage
Anglais Allemand Désignation Type de données
d'adresses
I E Bit d'entrée BOOL 0.0..65535.7
IB EB Octet d'entrée BYTE, CHAR 0..65535
3
Chapitre 3 : API Les langages programmation des API
Plage
Anglais Allemand Désignation Type de données
d'adresses
IW EW Mot d'entrée WORD, INT, S5TIME, DATE 0...65534
DWORD, DINT, REAL, TOD,
ID ED Double mot d'entrée 0…65532
TIME
Q A Bit de sortie BOOL 0.0...65535.7
QB AB Octet de sortie BYTE, CHAR 0…65535
QW AW Mot de sortie WORD, INT, S5TIME, DATE 0…65534
DWORD, DINT, REAL, TOD,
QD AD Double mot de sortie 0…65532
TIME
M M Bit de mémento BOOL 0.0...65535.7
MB MB Octet de mémento BYTE, CHAR 0…65535
MW MW Mot de mémento WORD, INT, S5TIME, DATE 0…65534
DWORD, DINT, REAL, TOD,
MD MD Double mot de mémento 0…65532
TIME
Octet de périphérie
PIB PEB BYTE, CHAR 0…65535
d'entrée
Octet de périphérie de
PQB PAB BYTE, CHAR 0...65535
sortie
PIW PEW Mot de périphérie d'entrée WORD, INT, S5TIME, DATE 0...65534
Mot de périphérie de
PQW PAW WORD, INT, S5TIME, DATE 0...65534
sortie
Double mot de périphérie DWORD, DINT, REAL, TOD,
PID PED 0…65532
d'entrée TIME
Double mot de périphérie DWORD, DINT, REAL, TOD,
PQD PAD 0...65532
de sortie TIME
T T Temporisation TIMER 0...65535
C Z Compteur COUNTER 0...65535
FB FB Bloc fonctionnel FB 0...65535
OB OB Bloc d'organisation OB 1...65535
DB DB Bloc de données DB, FB, SFB, UDT 1...65535
FC FC Fonction FC 0…65535
SFB SFB Bloc fonctionnel système SFB 0...65535
SFC SFC Fonction système SFC 0...65535
VAT VAT Table des variables 0...65535
Type de données
UDT UDT UDT 0...65535
utilisateur
Tab.2. Tableau des différentes variables de déclaration sous Step7 (Siemens)
4
Chapitre 3 : API Les langages programmation des API
Remarque :
Dans la CEI 61131-3, les blocs fonction, les fonctions et programmes sont appelés unités
d'organisation de programme (POU : Program Organisation Unit). Le langage d'un POU est
défini par l'utilisateur dont la possibilité d’écrire chaque partie par un langage différent en
fonction de ses habitudes de la programmation et de la facilité à exprimer le problème. En
général un POU est composé de trois sections ou groupes principaux :
MPP
Entrées en parallèle
L’association des entrées en série permet de réaliser le « OU » :
dcy Arr MCC
MCC
6
Chapitre 3 : API Les langages programmation des API
E
E S Bobine normale (directe)
S
E
E S Bobine négative(inverse) S
E
E p S S
Bobine pulsée sur
E S S Bobine « Set » ou E
d’enclenchement S
E R S
Bobine « Reset » ou de E
déclenchement S
7
Chapitre 3 : API Les langages programmation des API
Le langage FBD permet d’exprimer le comportement des POU sous la forme graphique d'un
ensemble de blocs interconnectés. Ces blocs fonctionnels sont construits par des équations
complexes à partir des opérateurs standard, de fonctions ou de blocs fonctionnels. Dans FBD, un
bloc de fonction est représenté par un bloc rectangulaire qui décrit une fonction logique ou
arithmétique ou spécifique ou complexe avec des entrées entrant de la gauche et des sorties sortant
à droite. Le nom du type de bloc fonction est toujours affiché dans le bloc, alors que le nom de
l'instance de bloc fonctionnel est toujours affiché au-dessus du bloc.
Un FDB est un ensemble des instructions blocs fonctionnels, chaque instruction FDB est décrite
comme un réseau de fonctions ou sous FDB plus élémentaires, reliées par des fils orientés.
Code_FDB
Temps FDB
Fonctions Variable : TOR, ANA, …
Temps
Alarme, évènement, …
Numéro d’instanciation
Enable Validation Enable Out
Type du bloc
Booléen Booléen
Entrée(s) Analogique(s)
Word Booléen
Variable(s) :
TOR, ANA, B, W, I, T,C,…
W, I, DW, DI, R, T, C, …
Variable(s) de sortie(s) :
TOR, ANA, B, W, I,T, C, … Variable(s)
W, I, DW, DI, R, T, C, …
Variable(s) de Temps(s) Variable(s) de Temps(s)
Time Booléen
8
Chapitre 3 : API Les langages programmation des API
NB.
Les blocs fonctions doivent avoir un paramètre d’entrée et un de sortie spéciales appelé EN et ENO
respectivement, qui contrôlent l’exécution de la fonction. Si EN est évalué à faux (= 0), la fonction n’est
pas exécutée et ENO est aussi mis à 0. Il est possible d’utiliser ENO comme un paramètre d’erreur. Les
autres états pour lesquelles ENO est 0, sont déterminés par le constructeur et doivent être documentés.
Comme exemple :
T n°
x y
Trig
tr
T n°
x y
Trig
tr
9
Chapitre 3 : API Les langages programmation des API
Temporisation monostable
T n°
x y
Trig
tr
Il utilise les pavés logiques bien connus dans l'algèbre booléenne pour la représentation logique
(ET, OU, Bascule RS, JK, … ). Il permet en outre de représenter des fonctions complexes, telles
que les fonctions mathématiques en les mettant directement en liaison avec ces pavés logiques.
Exemple :
NB. Toutes les opérations réalisées par le langage LOG sont des opérations du langage FBD.
11
Chapitre 3 : API Les langages programmation des API
(a) Condition d'assignation (b) Action retardée (c) Action limitée dans le temps
normale non dépendante du temps
S0 Quantificateur (attribut)
T1 Nom_action
N Moteur
S1 N Moteur
Actions
T2
Section de branche
S2
T3 T3 T3
S3 S3 S3
T3 T3 T3 Saut d’étape
Label1
S3 Branches parallèles
T3
S3 S3 S3
T3
S3
T3
S3 Etiquette
Label1 :
D Action1
S3 L Action2
T3
12
Chapitre 3 : API Les langages programmation des API
→ ETAPES
À l’exécution, un jeton indique si l’étape est active.
- Les attributs d’une étape peuvent être testés depuis tous les langages :
→ ETAPES et Actions
La particularité du SFC est la description détaillée des actions exécutées quand l’étape est
active, les différents types d’action sont :
- Action booléenne :Elle est forcée à chaque fois que le signal d’activité de l’étape change
d’état ;
- Action impulsionnelle programmée en ST, LD ou IL : c’est une liste d’instructions ST, IL
ou LD, exécutée à chaque cycle pendant toute la durée d’activité de l’étape;
- Action normale programmée en ST, LD ou IL ;
- Action SFC : Une action SFC est une séquence fille SFC, lancée ou tuée selon les
évolutions du signal d’activité de l’étape. Elle peut être décrite avec les qualificatifs
d’action N (non mémorisée), S (set), ou R (reset).)
Une action booléenne consiste à assigner à une variable booléenne le signal d’activité d’une
étape, les types d’activation des sorties (attribut ou quantificateur) en SFC sont :
13
Chapitre 3 : API Les langages programmation des API
TON
Etape connectée par D
IN Q Action Etape connectée par D
Action T
time (T)
T
14
Chapitre 3 : API Les langages programmation des API
TON RS
Etape connectée par DS Action
IN Q S Q
Etape connectée par DS T
Time (T)
T R Action
Etape connectée par R
Etape connectée par R
Time (T) T
NB. Les quantificateurs L, D, SD, DS et SL nécessite une valeur de temps de format constant.
→ Transitions
La condition de transition (ou de passage entre étapes) est élaborée par le langage LD ou IL.
IV.2. Langages Textuels (Littéraux)
IV.2.1. Langage Liste d’instructions (IL)
IV.2.1.1. Définition
Ce type de langage (List) est textuel proche du langage machine, plus proche du comportement
interne de l'automate. Il est très proche du langage assembleur (ressemble à l'assembleur dans un
ordinateur) on travaille au plus près du processeur en utilisant l'unité arithmétique et logique ALU,
ses registres et ses accumulateurs. Le programme se compose d'une suite de lignes, chacune
spécifiant un code opération suivi d'un opérande (et un seul). L'opérande peut être une adresse
absolue (E0.0) ou un mnémonique entre guillemets. Comme on ne peut pas utiliser deux opérandes
dans une même ligne.
15
Chapitre 3 : API Les langages programmation des API
IV.2.1.2. Opérations IL
IV.2.1.2.1. Opérateurs d’affectation
Opérateur Description
LD Accu= Opérande (Op) : Le résultat est égal à l’opérande (load : lire la valeur).
ST Op = Accu : L’opérande associé prend la valeur de la zone de test.
S Si Accu Alors Set Op : L’opérande associé est mis à 1 lorsque le résultat de la
zone de test est à 1.
R Si Accu Alors Reset Op : L’opérande associé est mis à 1 lorsque le résultat de
la zone de test est à 1.
LDN Accu= Not Op : Le résultat est égal à l’inverse de l’opérande (contact
ouverture).
STN Op = Not Accu : L’opérande associé prend la valeur inverse de la zone de test.
IV.2.1.2.2. Opérateurs logiques
Opérateur Description
AND Accu= Accu AND Op
OR Accu = Accu OR Op
XOR Accu = Accu XOR Op
NOT Accu= NOT Accu
ANDN Accu = Accu AND NOT Op
ORN, XORN… …
IV.2.1.2.3. Opérateurs arithmétiques
Opérateur Description
ADD Accu= Accu + Op
MUL Accu = Accu * Op
MOD Accu = Reste Accu / Op
SUB Accu= Accu - Op
DIV Accu = Accu / Op
Opérateur Description
GT Accu= (Accu > Op)
LT Accu = (Accu < Op)
EQ Accu = (Accu = Op)
GE Accu= (Accu >= Op)
LE Accu = (Accu <= Op)
NE Accu = (Accu<> Op)
16
Chapitre 3 : API Les langages programmation des API
Opérateur Description
JMPC Saut au Label si (Accu=TRUE)
JMP Saut inconditionnel au Label
JMPCN Saut au Label si (Accu=FALSE)
RETC RETURN si (Accu <> 0)
RET RETURN
RETCN RETURN si (Accu = 0)
Opérateur Description
ST Nominstance.Entrée 1 etc…
CAL Nominstance(<Entrée 1> :=<Valeur>,…)
LD Nominstance.Sortie
ST Résultat
IV.2.1.2.7. Appel d’une fonction : ex fonction utilisateur LIMIT (Min, Val, Max)
Opérateur Description
LD Min
LIMIT Val, Max
ST Résultat
Zzz
Zzzz
Zzz
Zzz
17
Chapitre 3 : API Les langages programmation des API
Les opérandes utilisent un code mnémonique qui varie de constructeur à un autre, bien que la
norme indique les instructions à utiliser (et qui sont largement adopté), le tableau suivant donne
quelques instructions selon cette norme et son équivalent pour certains constructeurs :
CEI 61131-3 Mitsubishi Omron Siemens Description
LD LD LD A Charger l’opérande dans le registre résultat
LDN LDI LD NOT AN Charger le complément de l’opérande
AND AND AND A ET logique
ANDN ANI AND NOT AN ET logique avec le complément de
l’opérande
OR OR OR O OU logique
ORN ORI OR NOT ON Ou logique avec le complément de
l’opérande
ST OUT OUT = Sauvegarder le registre de résultat dans
l’opérande
IV.2.1.3. Exemples
Exemple 1 :
Traduire « x=a ET b » en List par :
U "a"
U "b"
= "S"
et « y= c OU d » par :
O "c"
O "d"
= "S"
Exemple 2 :
00 LD %E0.01 //tester l’entrée d’adresse E0,01
01 AND %E0.02 //ET entre l’entrée (E0,01) et l’entrée E0,02
02 ST %A0.01 //Donner le résultat logique du ET à la sortie A0,01
Exemple 3 :
Traduire le réseaux LD suivant en IL :
Solution :
00 LD % I0,00 //tester Le bouton marche S1
01 OR % Q0,01 //Exécuter un OU avec KM1
02 AND % I0,02 //exécuter un ET avec le bouton marche S2
03 ST % Q0,01 //Activer la sortie du contacteur pompe KM1
04 LD % I0,03 //tester le capteur pression C1
05 ST % Q0,02 //Activer la sortie du voyant H1
18
Chapitre 3 : API Les langages programmation des API
Exemple 4 :
Donner le code IL du réseaux LD suivant :
Solution :
LD %X11
AND %M0
AND N %I1.1
OR N %I1.2
ST %M2
ST %Q2.0
LD %M2
AND %M1
R %M2
Exemple 6 :
La figure suivante montre la mise en œuvre d'un temporisateur dans les différents langages
normalisés (LD, FBD, IL, ST)
figure 3-4
Exemple 7 :
A0.0 passe à l’état 1, 2s après l'activation de E0.0, s'éteint en même temps que E0.0
19
Chapitre 3 : API Les langages programmation des API
Solution :
U E0.0
L S5T#2S
SE T1
U T1
= A0.0
Exemple 8 :
Traduise le réseau suivant en code IL
Solution :
LD %I1.0
OR [%MW3>100]
MPS
[%MW5:=%MW1+%MW2]
MPP
IN %TM1
LD %TM1.Q
ST %Q2.3
Exemple 9 :
Coder les deux équations suivantes en IL : D=A*B+C , D=A*(B+C)
Solution :
LD A (*Accu=A*)
MUL B (*Accu=Accu*B*)
ADD C (*Accu=Accu+C*)
ST D (*D=Accu=A*B+C*)
--------
--------
LD A (*Accu=A*)
MUL( B (*Accu1=B*)
ADD C (*Accu1=Accu1+C*)
) (*Accu=Accu+Accu1*)
ST D (*D=Accu*)
IV.2.2. Langage ST
IV.2.2.1. Introduction
ST (« Structured Text » ou texte structuré. Le ST est un langage textuel de haut niveau. Il permet
la programmation de tout type d’algorithme plus ou moins complexe. Il ressemble aux langages
évolués de haut niveau utilisés pour les ordinateurs (C, VBS, … ) proche du Pascal, conforme à
20
Chapitre 3 : API Les langages programmation des API
une norme sur les automates programmables CEI 61131-3. ST dispose d’éléments de langage
spécifiques aux automates programmables caractérisé par POU, comme les entrées, sorties,
temporisations, mémentos, appels de blocs etc. Le langage ST est adapté à la programmation de
fonctions algorithmiques complexes, aux manipulations sur tableaux, difficile à traduire en
langage graphique.
Pour le cas du logiciel de Siemens, son langage SCL (Structured Control Language) semble être
la version Siemens du langage ST (texte structuré), potentiellement, il y a quelques différences,
mais le concept global et les fonctionnalités seront les mêmes. Un programme SCL se compose
d’un ou plusieurs source SCL ; une source peut contenir un block ou un programme complet de
plusieurs blocks. Des sources block SCL permet être de type block fonction FB, fonction FC,
block d’organisation OB ou block de données DB.
IV.2.2.2. Opérations du ST
IV.2.2.2.1. Assignation
variable := expression;
IV.2.2.2.2. Opérateurs booléens
NOT, AND, OR et XOR
IV.2.2.2.3. Sélecteurs de branches
IF-THEN-ELSIF-ELSE-END_IF
REPEAT
<Énoncé_1> ;
<Énoncé_2>;
…
UNTIL <Expression Booléenne>
END_REPEAT;
FOR-TO-BY-DO-END_FOR
22
Chapitre 3 : API Les langages programmation des API
<resultat> :=NomFonction(<argument1,argument2,..) ;
Pour chaque bloc déclaratif des modules logiciels, il est nécessaire de définir :
1. La portée de chacune des variables utilisées dans le bloc.
IV.2.2.3. Exemples
Exemple 1 :
23
Chapitre 3 : API Les langages programmation des API
Recherche du premier élément non nul dans un tableau de 32 mots, détermination de sa valeur
(%MW11). Cette recherche s’effectue si %M0 est à 1, %M1 est mis à 1 si un élément non nul
existe, sinon il est mis à 0.
Solution :
IF %M0 THEN
FOR %MW99 :=0 TO 31 DO
IF TAB[%MW99]<>0 THEN
%MW10=TAB[%MW99] ;
%MW11=%MW99 ;
%M1 :=TRUE ;
EXIT ;
ELSE
%M1 :=FALSE ;
END_IF ;
END_FOR ;
ELSE
%M1 :=FALSE ;
END_IF
Exemple 2 :
Exemples :
Exemple 1
Langage ST
ELSE
%Q2.0:= FALSE ;
END_IF
Exemple 2
:
Langage ST
....
IF %I1.0 OR (%MW3>100) THEN
%MW5 := %MW1 + %MW2 ;
START %TM1;
END_IF
%Q2.3 := %TM1.Q ;
....
25