Schneider Electric SoMachine Basic Mode d'emploi

Ajouter à Mes manuels
344 Des pages
Schneider Electric SoMachine Basic  Mode d'emploi | Fixfr
SoMachine Basic
EIO0000001475 12/2017
SoMachine Basic
Guide de la bibliothèque des fonctions
génériques
EIO0000001475.08
12/2017
www.schneider-electric.com
Le présent document comprend des descriptions générales et/ou des caractéristiques techniques
des produits mentionnés. Il ne peut pas être utilisé pour définir ou déterminer l'adéquation ou la
fiabilité de ces produits pour des applications utilisateur spécifiques. Il incombe à chaque utilisateur
ou intégrateur de réaliser l'analyse de risques complète et appropriée, l'évaluation et le test des
produits pour ce qui est de l'application à utiliser et de l'exécution de cette application. Ni la société
Schneider Electric ni aucune de ses sociétés affiliées ou filiales ne peuvent être tenues pour
responsables de la mauvaise utilisation des informations contenues dans le présent document. Si
vous avez des suggestions, des améliorations ou des corrections à apporter à cette publication,
veuillez nous en informer.
Vous acceptez de ne pas reproduire, excepté pour votre propre usage à titre non commercial, tout
ou partie de ce document et sur quelque support que ce soit sans l'accord écrit de Schneider
Electric. Vous acceptez également de ne pas créer de liens hypertextes vers ce document ou son
contenu. Schneider Electric ne concède aucun droit ni licence pour l'utilisation personnelle et non
commerciale du document ou de son contenu, sinon une licence non exclusive pour une
consultation « en l'état », à vos propres risques. Tous les autres droits sont réservés.
Toutes les réglementations locales, régionales et nationales pertinentes doivent être respectées
lors de l'installation et de l'utilisation de ce produit. Pour des raisons de sécurité et afin de garantir
la conformité aux données système documentées, seul le fabricant est habilité à effectuer des
réparations sur les composants.
Lorsque des équipements sont utilisés pour des applications présentant des exigences techniques
de sécurité, suivez les instructions appropriées.
La non-utilisation du logiciel Schneider Electric ou d'un logiciel approuvé avec nos produits
matériels peut entraîner des blessures, des dommages ou un fonctionnement incorrect.
Le non-respect de cette consigne peut entraîner des lésions corporelles ou des dommages
matériels.
© 2017 Schneider Electric. Tous droits réservés.
2
EIO0000001475 12/2017
Table des matières
Consignes de sécurité . . . . . . . . . . . . . . . . . . . . . . . . . .
A propos de ce manuel. . . . . . . . . . . . . . . . . . . . . . . . . .
Chapitre 1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Utilisation d'exemples de code source . . . . . . . . . . . . . . . . . . . . . . . .
Blocs opération . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Blocs comparaison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Chapitre 2 Objets langage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Objets bit mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Objets d'E/S. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Objets mot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Objets mot double et flottants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Objets structurés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Objets indexés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Objets de bloc fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Chapitre 3 Procédure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1 Traitement booléen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instructions booléennes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Opérateurs de chargement (LD, LDN, LDR, LDF) . . . . . . . . . . . . .
Opérateurs d'affectation (ST, STN, R, S) . . . . . . . . . . . . . . . . . . . .
Opérateurs AND logiques (AND, ANDN, ANDR, ANDF) . . . . . . . . . .
Opérateurs OR logiques (OR, ORN, ORR, ORF) . . . . . . . . . . . . . . .
Opérateurs OR exclusifs (XOR, XORN, XORR, XORF). . . . . . . . . . .
Opérateur NOT (N) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fonctions montantes et descendantes (RISING, FALLING) . . . . . . .
Instructions de comparaison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Traitement numérique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Introduction aux instructions numériques . . . . . . . . . . . . . . . . . . . . . .
Instructions d'affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Affectation de chaînes de bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Affectation de mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Opérateurs arithmétiques sur des entrées . . . . . . . . . . . . . . . . . . . . .
EIO0000001475 12/2017
9
13
19
20
23
27
29
30
31
33
36
41
46
50
53
55
56
57
60
62
64
66
68
71
72
74
76
77
78
79
81
83
3
3.3
3.4
3.5
3.6
3.7
4
Instructions logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instructions de décalage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instruction de conversion BCD/binaire. . . . . . . . . . . . . . . . . . . . . . . . .
Instructions de conversion de mot simple/double . . . . . . . . . . . . . . . .
Programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instructions END . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instructions NOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instructions de saut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Eléments conditionnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Eléments de boucle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instructions de sous-programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Virgule flottante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instructions arithmétiques sur les objets à virgule flottante . . . . . . . . .
Instructions trigonométriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instructions de conversion d'angle . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instructions de conversion d'entiers/nombres à virgule flottante . . . . .
ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instructions ROUND. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instructions de conversion ASCII/entier . . . . . . . . . . . . . . . . . . . . . . . .
Instructions de conversion entier/ASCII . . . . . . . . . . . . . . . . . . . . . . . .
Instruction de conversion ASCII/valeur flottante . . . . . . . . . . . . . . . . .
Instructions de conversion valeur flottante/ASCII . . . . . . . . . . . . . . . .
Instructions de conversion ASCII/mot double . . . . . . . . . . . . . . . . . . .
Instructions de conversion mot double/ASCII . . . . . . . . . . . . . . . . . . .
Opérateurs de pile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instructions de pile (MPS, MRD, MPP) . . . . . . . . . . . . . . . . . . . . . . . .
Instructions sur les tables d'objets . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Affectation de tables de mots, mots doubles et valeurs flottantes . . . .
Fonctions de sommation de table . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fonction de comparaison de tables . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fonctions de recherche dans une table . . . . . . . . . . . . . . . . . . . . . . .
Fonctions de recherche de valeurs maximum et minimum dans des
tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nombre d'occurrences d'une valeur dans une table . . . . . . . . . . . . . .
Fonctions de décalage circulaire dans une table . . . . . . . . . . . . . . . . .
Fonctions de tri de table. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fonctions LKUP (interpolation de table à virgule flottante) . . . . . . . . .
Fonctions MEAN des valeurs d'une table de valeurs flottantes . . . . .
87
89
91
93
94
95
97
98
100
102
104
106
107
110
112
113
115
116
118
120
122
124
126
128
130
130
132
133
135
137
139
141
143
144
146
147
152
EIO0000001475 12/2017
3.8 Instructions sur les objets d'E/S. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Lecture immédiate d'entrée numérique intégrée (READ_IMM_IN) . . .
Ecriture immédiate de sortie intégrée numérique (WRITE_IMM_OUT)
Instruction de lecture immédiate de paramètre de bloc fonction
(READ_IMM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instruction d'écriture immédiate de paramètre de bloc fonction
(WRITE_IMM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Chapitre 4 Objets d'E/S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1 Bloc fonction Fast Counter (%FC) . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fast Counter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Bloc fonction High Speed Counter (%HSC) . . . . . . . . . . . . . . . . . . . .
High Speed Counter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 Bloc fonction Pulse (%PLS). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Pulse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4 Bloc fonction Pulse Width Modulation (%PWM) . . . . . . . . . . . . . . . . .
Pulse Width Modulation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Chapitre 5 Objets de réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Objets de réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Chapitre 6 Objets logiciels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1 Utilisation des blocs fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Principes de programmation des blocs fonction . . . . . . . . . . . . . . . . .
Ajout d'un bloc fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configuration d'un bloc fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Timer (%TM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TON : Timer On-Delay. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TOF : Timer Off-Delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TP : Pulse Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exemple de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3 Counter (%C). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exemple de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EIO0000001475 12/2017
153
154
156
158
159
161
162
162
163
163
164
164
165
165
167
167
169
170
171
174
176
177
178
179
181
183
185
186
187
188
190
193
5
6.4 Message (%MSG) et échange (EXCH) . . . . . . . . . . . . . . . . . . . . . . . .
Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exemple de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exemples ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Requêtes et exemples Modbus standard. . . . . . . . . . . . . . . . . . . . . . .
6.5 LIFO/FIFO Register (%R) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fonction du registre LIFO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fonctionnement du registre FIFO . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exemple de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.6 Drums (%DR). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exemple de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.7 Shift Bit Register (%SBR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exemple de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.8 Step Counter (%SC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exemple de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.9 Blocs horodateurs (%SCH) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programmation et configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.10 Horloge (%RTC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.11 PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fonction PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.12 Journalisation des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Journalisation des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.13 Etapes Grafcet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Etapes Grafcet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
195
196
198
202
207
209
211
221
222
224
226
227
228
230
231
232
235
238
239
240
242
243
244
245
246
248
249
252
254
255
259
260
260
261
261
264
264
EIO0000001475 12/2017
Chapitre 7 Objets PTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1 Motion Task Table (%MT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Motion Task Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 Bloc fonction Pulse Train Output (%PTO) . . . . . . . . . . . . . . . . . . . . . .
Sortie à train d'impulsions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Chapitre 8 Objets de variateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Objets de variateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Chapitre 9 Objets de communication . . . . . . . . . . . . . . . . . . . . . . . .
9.1 Lecture de données depuis un équipement distant (%READ_VAR) . .
Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configuration de fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exemple de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2 Ecrire des données sur un équipement Modbus (%WRITE_VAR) . . .
Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configuration de fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exemple de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.3 Lecture et écriture de données sur un équipement Modbus
(%WRITE_READ_VAR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configuration de fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exemple de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.4 Communication sur une liaison ASCII (%SEND_RECV_MSG). . . . . .
Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configuration de fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exemple de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.5 Send Receive SMS (%SEND_RECV_SMS) . . . . . . . . . . . . . . . . . . . .
Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configuration des fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.6 Chronogrammes des blocs fonction d'objet de communication. . . . . .
Exemples de chronogrammes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Chapitre 10 Fonctions définies par l'utilisateur. . . . . . . . . . . . . . . . . .
Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Chapitre 11 Blocs fonction définis par l'utilisateur . . . . . . . . . . . . . . .
Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EIO0000001475 12/2017
265
266
266
267
267
269
269
271
272
273
277
280
281
282
284
288
289
290
293
296
297
298
301
304
305
306
314
320
320
323
323
325
325
7
Chapitre 12 Fonctions d'horloge . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fonctions d'horloge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Horodatage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Réglage de la date et de l'heure . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Glossaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
327
328
329
331
335
339
EIO0000001475 12/2017
Consignes de sécurité
Informations importantes
AVIS
Lisez attentivement ces instructions et examinez le matériel pour vous familiariser avec l'appareil
avant de tenter de l'installer, de le faire fonctionner, de le réparer ou d'assurer sa maintenance.
Les messages spéciaux suivants que vous trouverez dans cette documentation ou sur l'appareil
ont pour but de vous mettre en garde contre des risques potentiels ou d'attirer votre attention sur
des informations qui clarifient ou simplifient une procédure.
EIO0000001475 12/2017
9
REMARQUE IMPORTANTE
L'installation, l'utilisation, la réparation et la maintenance des équipements électriques doivent être
assurées par du personnel qualifié uniquement. Schneider Electric décline toute responsabilité
quant aux conséquences de l'utilisation de ce matériel.
Une personne qualifiée est une personne disposant de compétences et de connaissances dans le
domaine de la construction, du fonctionnement et de l'installation des équipements électriques, et
ayant suivi une formation en sécurité leur permettant d'identifier et d'éviter les risques encourus.
AVANT DE COMMENCER
N'utilisez pas ce produit sur les machines non pourvues de protection efficace du point de fonctionnement. L'absence de ce type de protection sur une machine présente un risque de blessures
graves pour l'opérateur.
AVERTISSEMENT
EQUIPEMENT NON PROTEGE


N'utilisez pas ce logiciel ni les automatismes associés sur des appareils non équipés de
protection du point de fonctionnement.
N'accédez pas aux machines pendant leur fonctionnement.
Le non-respect de ces instructions peut provoquer la mort, des blessures graves ou des
dommages matériels.
Cet automatisme et le logiciel associé permettent de commander des processus industriels divers.
Le type ou le modèle d'automatisme approprié pour chaque application dépendra de facteurs tels
que la fonction de commande requise, le degré de protection exigé, les méthodes de production,
des conditions inhabituelles, la législation, etc. Dans certaines applications, plusieurs processeurs
seront nécessaires, notamment lorsque la redondance de sauvegarde est requise.
Vous seul, en tant que constructeur de machine ou intégrateur de système, pouvez connaître
toutes les conditions et facteurs présents lors de la configuration, de l'exploitation et de la
maintenance de la machine, et êtes donc en mesure de déterminer les équipements automatisés,
ainsi que les sécurités et verrouillages associés qui peuvent être utilisés correctement. Lors du
choix de l'automatisme et du système de commande, ainsi que du logiciel associé pour une
application particulière, vous devez respecter les normes et réglementations locales et nationales
en vigueur. Le document National Safety Council's Accident Prevention Manual (reconnu aux
Etats-Unis) fournit également de nombreuses informations utiles.
Dans certaines applications, telles que les machines d'emballage, une protection supplémentaire,
comme celle du point de fonctionnement, doit être fournie pour l'opérateur. Elle est nécessaire si
les mains ou d'autres parties du corps de l'opérateur peuvent entrer dans la zone de point de
pincement ou d'autres zones dangereuses, risquant ainsi de provoquer des blessures graves. Les
produits logiciels seuls, ne peuvent en aucun cas protéger les opérateurs contre d'éventuelles
blessures. C'est pourquoi le logiciel ne doit pas remplacer la protection de point de fonctionnement
ou s'y substituer.
10
EIO0000001475 12/2017
Avant de mettre l'équipement en service, assurez-vous que les dispositifs de sécurité et de
verrouillage mécaniques et/ou électriques appropriés liés à la protection du point de fonctionnement ont été installés et sont opérationnels. Tous les dispositifs de sécurité et de verrouillage
liés à la protection du point de fonctionnement doivent être coordonnés avec la programmation des
équipements et logiciels d'automatisation associés.
NOTE : La coordination des dispositifs de sécurité et de verrouillage mécaniques/électriques du
point de fonctionnement n'entre pas dans le cadre de cette bibliothèque de blocs fonction, du
Guide utilisateur système ou de toute autre mise en œuvre référencée dans la documentation.
DEMARRAGE ET TEST
Avant toute utilisation de l'équipement de commande électrique et des automatismes en vue d'un
fonctionnement normal après installation, un technicien qualifié doit procéder à un test de
démarrage afin de vérifier que l'équipement fonctionne correctement. Il est essentiel de planifier
une telle vérification et d'accorder suffisamment de temps pour la réalisation de ce test dans sa
totalité.
AVERTISSEMENT
RISQUES INHERENTS AU FONCTIONNEMENT DE L'EQUIPEMENT



Assurez-vous que toutes les procédures d'installation et de configuration ont été respectées.
Avant de réaliser les tests de fonctionnement, retirez tous les blocs ou autres cales
temporaires utilisés pour le transport de tous les dispositifs composant le système.
Enlevez les outils, les instruments de mesure et les débris éventuels présents sur
l'équipement.
Le non-respect de ces instructions peut provoquer la mort, des blessures graves ou des
dommages matériels.
Effectuez tous les tests de démarrage recommandés dans la documentation de l'équipement.
Conservez toute la documentation de l'équipement pour référence ultérieure.
Les tests logiciels doivent être réalisés à la fois en environnement simulé et réel.
Vérifiez que le système entier est exempt de tout court-circuit et mise à la terre temporaire non
installée conformément aux réglementations locales (conformément au National Electrical Code
des Etats-Unis, par exemple). Si des tests diélectriques sont nécessaires, suivez les recommandations figurant dans la documentation de l'équipement afin d'éviter de l'endommager
accidentellement.
Avant de mettre l'équipement sous tension :
 Enlevez les outils, les instruments de mesure et les débris éventuels présents sur l'équipement.
 Fermez le capot du boîtier de l'équipement.
 Retirez toutes les mises à la terre temporaires des câbles d'alimentation entrants.
 Effectuez tous les tests de démarrage recommandés par le fabricant.
EIO0000001475 12/2017
11
FONCTIONNEMENT ET REGLAGES
Les précautions suivantes sont extraites du document NEMA Standards Publication ICS 7.1-1995
(la version anglaise prévaut) :
 Malgré le soin apporté à la conception et à la fabrication de l'équipement ou au choix et à
l'évaluation des composants, des risques subsistent en cas d'utilisation inappropriée de
l'équipement.
 Il arrive parfois que l'équipement soit déréglé accidentellement, entraînant ainsi un fonctionnement non satisfaisant ou non sécurisé. Respectez toujours les instructions du fabricant pour
effectuer les réglages fonctionnels. Les personnes ayant accès à ces réglages doivent
connaître les instructions du fabricant de l'équipement et les machines utilisées avec
l'équipement électrique.
 Seuls ces réglages fonctionnels, requis par l'opérateur, doivent lui être accessibles. L'accès aux
autres commandes doit être limité afin d'empêcher les changements non autorisés des
caractéristiques de fonctionnement.
12
EIO0000001475 12/2017
A propos de ce manuel
Présentation
Objectif du document
Ce guide explique comment utiliser les blocs fonction et les instructions dans les programmes que
vous créez avec le logiciel SoMachine Basic. Ces descriptions s'appliquent à tous les Logic
Controller pris en charge par SoMachine Basic.
Champ d'application
Les informations présentées dans ce manuel ne concernent que les produits compatibles avec
SoMachine Basic.
Ce document a été actualisé pour le lancement de SoMachine Basic V1.6.
Les caractéristiques techniques des équipements décrits dans ce document sont également
fournies en ligne. Pour accéder à ces informations en ligne :
Etape
Action
1
Accédez à la page d'accueil de Schneider Electric www.schneider-electric.com.
2
Dans la zone Search, saisissez la référence d'un produit ou le nom d'une gamme de produits.
 N'insérez pas d'espaces dans la référence ou la gamme de produits.
 Pour obtenir des informations sur un ensemble de modules similaires, utilisez des
astérisques (*).
3
Si vous avez saisi une référence, accédez aux résultats de recherche Product Datasheets et
cliquez sur la référence qui vous intéresse.
Si vous avez saisi une gamme de produits, accédez aux résultats de recherche Product Ranges
et cliquez sur la gamme de produits qui vous intéresse.
4
Si plusieurs références s'affichent dans les résultats de recherche Products, cliquez sur la
référence qui vous intéresse.
5
Selon la taille de l'écran, vous serez peut-être amené à faire défiler la page pour consulter la fiche
technique.
6
Pour enregistrer ou imprimer une fiche technique au format .pdf, cliquez sur Download XXX
product datasheet.
Les caractéristiques présentées dans ce manuel devraient être identiques à celles fournies en
ligne. Toutefois, en application de notre politique d'amélioration continue, nous pouvons être
amenés à réviser le contenu du document afin de le rendre plus clair et plus précis. Si vous
constatez une différence entre le manuel et les informations fournies en ligne, utilisez ces
dernières en priorité.
EIO0000001475 12/2017
13
Document(s) à consulter
Titre de documentation
Référence
SoMachine Basic - Guide d'utilisation
EIO0000001354 (ENG)
EIO0000001355 (FRA)
EIO0000001356 (GER)
EIO0000001357 (SPA)
EIO0000001358 (ITA)
EIO0000001359 (CHS)
EIO0000001366 (POR)
EIO0000001367 (TUR)
Modicon M221 Logic Controller - Guide de la bibliothèque des
fonctions avancées
EIO0000002007 (ENG)
EIO0000002008 (FRE)
EIO0000002009 (GER)
EIO0000002010 (SPA)
EIO0000002011 (ITA)
EIO0000002012 (CHS)
EIO0000002013 (POR)
EIO0000002014 (TUR)
Modicon M221 Logic Controller - Guide de programmation
EIO0000001360 (ENG)
EIO0000001361 (FRE)
EIO0000001362 (GER)
EIO0000001363 (SPA)
EIO0000001364 (ITA)
EIO0000001365 (CHS)
EIO0000001369 (TUR)
EIO0000001368 (POR)
Modicon M221 Logic Controller - Guide de référence du matériel
EIO0000001384 (ENG)
EIO0000001385 (FRA)
EIO0000001386 (GER)
EIO0000001387 (SPA)
EIO0000001388 (ITA)
EIO0000001389 (CHS)
EIO0000001370 (POR)
EIO0000001371 (TUR)
Vous pouvez télécharger ces publications et autres informations techniques depuis notre site web
à l'adresse : http://www.schneider-electric.com/en/download
14
EIO0000001475 12/2017
Information spécifique au produit
AVERTISSEMENT
PERTE DE CONTROLE





Le concepteur d'un système de commande doit envisager les modes de défaillance possibles
des chemins de commande et, pour certaines fonctions de commande critiques, prévoir un
moyen d'atteindre un état sécurisé en cas de défaillance d'un chemin, et après cette
défaillance. Par exemple, l'arrêt d'urgence, l'arrêt en cas de surcourse, la coupure de courant
et le redémarrage sont des fonctions de commande cruciales.
Des canaux de commande séparés ou redondants doivent être prévus pour les fonctions de
commande critiques.
Les chemins de commande système peuvent inclure les liaisons de communication. Soyez
particulièrement attentif aux implications des retards de transmission imprévus ou des pannes
de liaison.
Respectez toutes les réglementations de prévention des accidents ainsi que les consignes de
sécurité locales.1
Chaque implémentation de cet équipement doit être testée individuellement et entièrement
pour s'assurer du fonctionnement correct avant la mise en service.
Le non-respect de ces instructions peut provoquer la mort, des blessures graves ou des
dommages matériels.
1
Pour plus d'informations, consultez le document NEMA ICS 1.1 (dernière édition), « Safety
Guidelines for the Application, Installation, and Maintenance of Solid State Control » (Directives de
sécurité pour l'application, l'installation et la maintenance de commande statique) et le document
NEMA ICS 7.1 (dernière édition), « Safety Standards for Construction and Guide for Selection,
Installation, and Operation of Adjustable-Speed Drive Systems » (Normes de sécurité relatives à
la construction et manuel de sélection, installation et opération de variateurs de vitesse) ou son
équivalent en vigueur dans votre pays.
AVERTISSEMENT
FONCTIONNEMENT IMPREVU DE L’EQUIPEMENT


N'utilisez que le logiciel approuvé par Schneider Electric pour faire fonctionner cet
équipement.
Mettez à jour votre programme d'application chaque fois que vous modifiez la configuration
matérielle physique.
Le non-respect de ces instructions peut provoquer la mort, des blessures graves ou des
dommages matériels.
EIO0000001475 12/2017
15
Terminologie utilisée dans les normes
Les termes techniques, la terminologie, les symboles et les descriptions correspondantes
employés dans ce manuel ou figurant dans ou sur les produits proviennent généralement des
normes internationales.
Dans les domaines des systèmes de sécurité fonctionnelle, des variateurs et de l'automatisme en
général, les termes employés sont sécurité, fonction de sécurité, état sécurisé, défaut, réinitialisation du défaut, dysfonctionnement, panne, erreur, message d'erreur, dangereux, etc.
Entre autres, les normes concernées sont les suivantes :
16
Norme
Description
EN 61131-2:2007
Automates programmables - Partie 2 : exigences et essais des équipements
ISO 13849-1:2008
Sécurité des machines - Parties des systèmes de commande relatives à la sécurité Principes généraux de conception
EN 61496-1:2013
Sécurité des machines - Équipements de protection électro-sensibles Partie 1 : prescriptions générales et essais
ISO 12100:2010
Sécurité des machines - Principes généraux de conception - Appréciation du risque
et réduction du risque
EN 60204-1:2006
Sécurité des machines - Équipement électrique des machines - Partie 1 : règles
générales
EN 1088:2008
ISO 14119:2013
Sécurité des machines - Dispositifs de verrouillage associés à des protecteurs Principes de conception et de choix
ISO 13850:2006
Sécurité des machines - Fonction d'arrêt d'urgence - Principes de conception
EN/IEC 62061:2005
Sécurité des machines - Sécurité fonctionnelle des systèmes de commande
électrique, électronique et électronique programmable relatifs à la sécurité
IEC 61508-1:2010
Sécurité fonctionnelle des systèmes électriques/électroniques/électroniques
programmables relatifs à la sécurité - Exigences générales
IEC 61508-2:2010
Sécurité fonctionnelle des systèmes électriques/électroniques/électroniques
programmables relatifs à la sécurité - Exigences pour les systèmes
électriques/électroniques/électroniques programmables relatifs à la sécurité
IEC 61508-3:2010
Sécurité fonctionnelle des systèmes électriques/électroniques/électroniques
programmables relatifs à la sécurité - Exigences concernant les logiciels
IEC 61784-3:2008
Communications numériques pour les systèmes de mesure et de commande - Bus
de terrain de sécurité fonctionnelle
2006/42/EC
Directive Machines
2014/30/EU
Directive sur la compatibilité électromagnétique
2014/35/EU
Directive sur les basses tensions
EIO0000001475 12/2017
De plus, des termes peuvent être utilisés dans le présent document car ils proviennent d'autres
normes telles que :
Norme
Description
Série IEC 60034
Machines électriques rotatives
Série IEC 61800
Entraînements électriques de puissance à vitesse variable
Série IEC 61158
Communications numériques pour les systèmes de mesure et de commande Bus de terrain utilisés dans les systèmes de commande industriels
Enfin, le terme zone de fonctionnement utilisé dans le contexte de la description de dangers
spécifiques a la même signification que les termes zone dangereuse ou zone de danger employés
dans la directive Machines (2006/42/EC) et la norme ISO 12100:2010.
NOTE : Les normes susmentionnées peuvent s'appliquer ou pas aux produits cités dans la
présente documentation. Pour plus d'informations sur chacune des normes applicables aux
produits décrits dans le présent document, consultez les tableaux de caractéristiques de ces
références de produit.
EIO0000001475 12/2017
17
18
EIO0000001475 12/2017
SoMachine Basic
Introduction
EIO0000001475 12/2017
Chapitre 1
Introduction
Introduction
Présentation
Ce chapitre explique comment utiliser les exemples de code source et les blocs requis pour
exécuter de multiples exemples d'opérations et instructions d'affectation fournies dans ce
document.
Contenu de ce chapitre
Ce chapitre contient les sujets suivants :
Sujet
Page
Utilisation d'exemples de code source
20
Blocs opération
23
Blocs comparaison
27
EIO0000001475 12/2017
19
Introduction
Utilisation d'exemples de code source
Présentation
Sauf mention contraire, les exemples de code source contenus dans ce manuel sont valides pour
les deux langages de programmation LD (schéma à contacts) et IL (liste d'instructions). Un
exemple complet peut néanmoins nécessiter plus d'un réseau.
Procédure de réversibilité
Pour obtenir le code LD équivalent, procédez comme suit :
Etape
1
Action
Sélectionnez et copiez (Ctrl+C) le code source du premier réseau de l'exemple de programme
indiqué dans ce manuel.
2
Dans SoMachine Basic, créez un nouveau réseau en cliquant sur
d'outils.
dans la barre
3
Dans ce réseau, cliquez sur le bouton LD > IL pour afficher le code source IL.
4
Sélectionnez le numéro de ligne 0000, puis cliquez avec le bouton droit et sélectionnez Coller
instructions pour coller le code source dans le réseau :
NOTE : n'oubliez pas de supprimer l'instruction LD de la dernière ligne du réseau, si vous
avez collé les instructions en insérant la ou les lignes avant l'opérateur LD par défaut.
20
5
Cliquez sur le bouton IL > LD pour afficher le code source LD.
6
Répétez les étapes précédentes pour les autres réseaux de l'exemple de programme.
EIO0000001475 12/2017
Introduction
Exemple
Programme en langage IL :
Réseau
Code source
0
BLK %R0
LD
%M1
I
LD
%I0.3
ANDN %R2.E
O
END_BLK
1
LD
%I0.3
[%MW20:=%R2.O]
2
LD
%I0.2
ANDN %R2.F
[%R2.I:=%MW34]
ST
%M1
EIO0000001475 12/2017
21
Introduction
Schéma à contacts (LD) correspondant :
22
EIO0000001475 12/2017
Introduction
Blocs opération
Insertion d'opérations et d'instructions d'affectation en langage Liste d'instructions dans des schémas à
contacts
Utilisez le symbole graphique Bloc opération pour insérer des opérations et instructions
d'affectation en langage Liste d'instructions dans des réseaux en langage Schéma à contacts.
Bloc opération à la fin d'un réseau.
Bloc opération à un emplacement quelconque
dans un réseau.
Le symbole graphique Bloc opération peut être inséré en toute position d'un réseau Schéma à
contacts, à l'exception de la première colonne, car cette dernière ne peut pas être utilisée comme
premier contact d'un réseau.
Si plusieurs symboles graphiques Bloc opération sont utilisés dans un réseau Schéma à contacts,
ils doivent être placés en série. Les instructions Bloc opération ne peuvent pas être utilisées en
parallèle.
NOTE :
Si l'application est configurée avec un niveau fonctionnel d'au moins Niveau 5.0 :
 Vous pouvez utiliser jusqu'à cinq opérandes et trois niveaux de parenthèses dans un bloc
opération. Les types d'objet des opérandes doivent être identiques : mots avec mots, flottant
avec flottant, etc.
 Au moins 20 mots mémoire (%MW) doivent être disponibles pour pouvoir utiliser plusieurs
opérandes dans la tâche maître. Si vous utilisez également plusieurs opérandes dans une
tâche périodique, 20 mots mémoire supplémentaires doivent être disponibles.
Pour insérer un symbole graphique de bloc opération dans un réseau Schéma à contacts,
effectuez les étapes suivantes :
Etape
Action
1
Cliquez sur le bouton Bloc opération
2
dans la barre d'outils.
Cliquez n'importe où dans le réseau pour insérer le Bloc opération.
3
Cliquez sur le bouton Mode de sélection
4
dans la barre d'outils.
Double-cliquez sur la ligne expression d'opération.
apparaît à la fin de la ligne.
Le bouton Modification de code intelligente (voir page 24)
Cliquez sur ce bouton pour sélectionner une fonction en respectant la syntaxe de l'instruction.
EIO0000001475 12/2017
23
Introduction
Etape
5
Action
Saisissez une opération IL ou une instruction d'affectation valide, puis appuyez sur ENTREE.
Par exemple : %MF10 :=
((SIN( %MF12 + 60.0 ) + COS( %MF13 )) + %MF10 ) + 1.2
Vous pouvez modifier l'expression en mode en ligne. Consultez la section Modifications en ligne.
NOTE : Les expressions à plusieurs opérandes ne peuvent pas être utilisées dans les tâches
d'événement.
Syntaxe de l'instruction OPER
L'instruction OPER correspond à un bloc opération placé à un emplacement quelconque dans un
réseau.
L'instruction OPER équivalente peut être utilisée directement dans des réseaux Liste d'instructions.
OPER [ expression ], expression représentant toute expression valide, contenant jusqu'à cinq
opérandes et trois niveaux de parenthèses. Par exemple :
OPER [ %MF10 := ((SIN( %MF12 + 60.0 ) + COS( %MF13 )) + %MF10 ) + 1.2]
Bulles d'aide Modification de code intelligente dans les schémas à contacts
Pour vous aider à sélectionner des fonctions, SoMachine Basic affiche des bulles d'aide lorsque
vous entrez des noms de fonction dans les blocs opération.
Deux types de bulles d'aide sont proposés :
 Une liste de noms de fonction, mise à jour dynamiquement en fonction des noms commençant
par les caractères saisis. Par exemple, la saisie de « AS » affiche ASCII_TO_FLOAT,
ASCII_TO_INT et ASIN.
 Aide concernant la syntaxe d'une fonction, qui s'affiche lorsque vous tapez une parenthèse
ouvrante. Par exemple, la saisie de « ABS( » affiche :
24
EIO0000001475 12/2017
Introduction
Utilisation de l'Assistant Modification de code intelligente
L'Assistant Modification de code intelligente s'affiche lorsque vous cliquez sur le bouton
Modification de code intelligente
dans la ligne d'expression de l'opérateur :
Procédez comme suit :
Etape
Action
1
Eventuellement, filtrez la liste par catégorie de fonction :
 Tous les types
 ASCII
 Virgule flottante
 Objets d'E/S
 Virgule flottante
 Traitement numérique
 Table
 PID
 Fonction définie par l'utilisateur
2
Sélectionnez la fonction à ajouter à l'expression.
3
Cliquez sur Insérer la fonction.
EIO0000001475 12/2017
25
Introduction
Obtention d'aide sur la syntaxe
Si la syntaxe de l'opération ou de l'instruction d'affectation en langage Liste d'instructions est
incorrecte, la bordure du champ expression d'opération devient rouge. Pour obtenir de l'aide,
procédez au choix comme suit :
 Placez le curseur de la souris sur la ligne expression d'opération. ou
 Sélectionnez Outils → Messages de programme.
26
EIO0000001475 12/2017
Introduction
Blocs comparaison
Insertion d'expressions de comparaison en langage Liste d'instructions dans des schémas à contacts
Utilisez le symbole graphique Bloc comparaison pour insérer des expressions de comparaison en
langage Liste d'instructions dans les réseaux en langage Schéma à contacts.
Les types d'objet des opérandes doivent être identiques : mots avec mots, flottant avec flottant,
etc.
Procédez comme suit :
Etape
Action
1
Cliquez sur le bouton Bloc opération
dans la barre d'outils.
2
Cliquez n'importe où dans le réseau pour insérer le Bloc comparaison.
3
Double-cliquez sur la ligne Expression de comparaison.
4
Saisissez une opération de comparaison IL valide et appuyez sur ENTREE.
Vous pouvez modifier l'expression en mode en ligne. Consultez la section Modifications en ligne
(voir SoMachine Basic, Guide d'utilisation).
NOTE :
Si l'application est configurée avec un niveau fonctionnel (voir SoMachine Basic, Guide
d'utilisation) d'au moins Niveau 6.0 :
 Vous pouvez utiliser jusqu'à cinq opérandes et trois niveaux de parenthèses dans un bloc de
comparaison.
 Au moins 20 mots mémoire (%MW) doivent être disponibles pour pouvoir utiliser plusieurs
opérandes dans la tâche maître. Si vous utilisez également plusieurs opérandes dans une
tâche périodique, 20 mots mémoire supplémentaires doivent être disponibles.
NOTE : Les expressions à plusieurs opérandes ne peuvent pas être utilisées dans les tâches
d'événement.
Obtention d'aide sur la syntaxe
Si la syntaxe de l'opération de comparaison en langage Liste d'instructions est incorrecte, la
bordure du champ Expression de comparaison devient rouge. Pour obtenir de l'aide, procédez au
choix comme suit :
 Placez le curseur de la souris sur la ligne Expression de comparaison. ou
 Sélectionnez Outils → Messages de programme.
EIO0000001475 12/2017
27
Introduction
28
EIO0000001475 12/2017
SoMachine Basic
Objets langage
EIO0000001475 12/2017
Chapitre 2
Objets langage
Objets langage
Contenu de ce chapitre
Ce chapitre contient les sujets suivants :
Sujet
Page
Objets
30
Objets bit mémoire
31
Objets d'E/S
33
Objets mot
36
Objets mot double et flottants
41
Objets structurés
46
Objets indexés
50
Objets de bloc fonction
53
EIO0000001475 12/2017
29
Objets langage
Objets
Présentation
Dans SoMachine Basic, le terme objet représente une zone mémoire d'un Logic Controller
réservée à l'usage d'une application. Exemples d'objets :
 Variables logicielles simples (bits et mots mémoire par exemple)
 Adresses d'entrées et de sorties numériques ou analogiques
 Variables internes du contrôleur (mots et bits système par exemple)
 Fonctions système ou blocs fonction prédéfinis (temporisateurs ou compteurs par exemple)
La mémoire du contrôleur est soit pré-allouée à certains types d'objets, soit allouée automatiquement lorsqu'une application est téléchargée dans le Logic Controller.
Les objets ne peuvent être adressés dans un programme qu'après allocation de mémoire.
L'adressage des objets utilise le préfixe %. Par exemple, %MW12 est l'adresse d'un mot mémoire,
%Q0.3 est l'adresse d'une sortie numérique intégrée et %TM0 est l'adresse d'un bloc fonction
Timer.
30
EIO0000001475 12/2017
Objets langage
Objets bit mémoire
Introduction
Les objets bit mémoire sont des variables logicielles binaires, qui peuvent être utilisées comme des
opérandes et testées par des instructions booléennes.
Exemples d'objets bit :
Bits de mémoire
 Bits système
 Bits étape
 Bits extraits de mots

Les objets valides sont compris entre 0 et la référence maximum utilisée dans votre application
(consultez le guide de programmation de votre Logic Controller).
Syntaxe
Respectez la syntaxe suivante pour adresser des objets bit mémoire, système et d'étape :
Le tableau suivant décrit les éléments de la syntaxe d'adressage :
Groupe
Elément
Description
Symbole
%
Une variable logicielle doit toujours débuter par un symbole de
pourcentage (%).
Type d'objet
M
Les bits mémoire stockent des valeurs intermédiaires pendant l'exécution
d'un programme.
S
Les bits système donnent des informations d'état et de régulation
concernant le contrôleur.
X
Les bits d'étape indiquent l'état des activités des étapes Grafcet.
i
L'identificateur de l'objet représentant leur instance séquentielle en
mémoire. Le nombre maximum d'objets dépend du nombre d'objets
configurés aux limites de la mémoire disponible. Pour connaître la
quantité maximale de mémoire disponible, consultez le guide de
programmation de votre Logic Controller.
Identificateur
d'instance d'objet
Pour plus d'informations sur l'adressage des bits d'E/S, consultez la section Objets d'E/S
(voir page 33).
Pour plus d'informations sur l'adressage d'un bit extrait d'un mot, consultez la section Extraction
d'un bit d'un objet mot (voir page 40).
EIO0000001475 12/2017
31
Objets langage
Description
Ce tableau répertorie et décrit les bits mémoire, système et d'étape utilisés comme opérandes
dans les instructions booléennes :
Type
Description
Adresse ou
valeur
Accès en
0 ou 1
–
écriture(1)
Valeurs
immédiates
0 ou 1 (False ou True)
Mémoire
%Mi
Les bits mémoire sont des zones mémoire interne qui
stockent des valeurs binaires.
Remarque : les objets d'E/S inutilisés ne peuvent pas être
utilisés comme des bits mémoire.
Oui
Système
Les bits système %S0 à %S127 vous permettent de
surveiller le bon fonctionnement du contrôleur ainsi que
l'exécution correcte du programme de l'application, et de
contrôler certaines fonctionnalités du système.
%Si
Dépend de i.
%Xi
Oui
Etapes Grafcet Les bits %X1 à %Xi sont associés aux étapes Grafcet.
Le bit d'étape Xi est à 1 lorsque l'étape correspondante
est active et à l'état 0 lorsqu'elle est désactivée.
(1) Ecrit par le programme ou à l'aide d'une table d'animation.
Exemple
Ce tableau présente quelques exemples d'adressage d'objets bit :
32
Objet bit
Description
%M25
Bit mémoire numéro 25
%S20
Bit système numéro 20
%X4
Etape Grafcet numéro 4
EIO0000001475 12/2017
Objets langage
Objets d'E/S
Introduction
Les objets d'E/S contiennent des bits et des mots. Chaque entrée et sortie physique est mappée
à ces objets dans la mémoire interne. Les objets bit d'E/S peuvent être utilisés comme des
opérandes et testés à l'aide d'instructions booléennes. Les objets mot d'E/S sont utilisables dans
la plupart des instructions non booléennes, comme les fonctions et les instructions contenant des
opérateurs arithmétiques.
Exemples d'objets d'E/S :
Entrées numériques
 Sorties analogiques
 Entrées analogiques
 Sorties analogiques
 Entrées et sorties de communication

La plage d'objets autorisés va de 0 à la valeur maximale configurée et prise en charge par votre
contrôleur (consultez le guide de référence du matériel et le guide de programmation de votre
Logic controller).
Syntaxe
Cette figure illustre le format d'adresse des entrées/sorties :
Le tableau suivant décrit les composants du format d'adressage :
Composant
Elément
Valeur
Description
Symbole
%
–
Une adresse interne doit toujours débuter par le symbole de
pourcentage (%).
Type d'objet
I
–
Entrée numérique (objet bit)
Q
–
Sortie numérique (objet bit)
IW
–
Valeur d'entrée analogique (objet mot)
QW
–
Valeur de sortie analogique (objet mot)
IWS
–
Etat de voie d'entrée analogique (objet mot)
QWS
–
Etat de voie de sortie analogique (objet mot)
(1) m est le nombre de modules locaux configurés (7 au maximum).
(2) n est le nombre de modules distants configurés (n+7 au maximum). La position maximale a le numéro 14.
(3) p correspond au numéro de la cartouche dans le contrôleur. q correspond au numéro de la voie sur la
cartouche.
EIO0000001475 12/2017
33
Objets langage
Composant
Elément
Valeur
Description
Numéro de
module
y
0
Voie d'E/S intégrée sur le contrôleur logique, ou sur une
cartouche insérée dans le contrôleur.
1 à m(1)
Voie d'E/S sur un module d'extension connecté directement
au contrôleur.
m+1...n(2)
Voie d'E/S sur un module d'extension connecté à l'aide de
modules émetteur/récepteur TM3.
0 à 31
Numéro de la voie d'E/S sur le Logic Controller ou le module
d'extension. Nombre de voies disponibles variable selon le
modèle de Logic Controller ou le type du module
d'extension.
p0q(3)
Voie d'E/S sur une cartouche insérée dans le contrôleur
logique. Le nombre de voies disponibles dépend du type de
cartouche.
Numéro de voie
z
(1) m est le nombre de modules locaux configurés (7 au maximum).
(2) n est le nombre de modules distants configurés (n+7 au maximum). La position maximale a le numéro 14.
(3) p correspond au numéro de la cartouche dans le contrôleur. q correspond au numéro de la voie sur la
cartouche.
Description
Ce tableau répertorie et décrit tous les objets d'E/S utilisés comme opérandes dans des
instructions :
Type
Adresse ou
valeur
Accès en
Bits d'entrée
%Iy.z(2)
Non(3)
Bits de sortie
%Qy.z(2)
Oui
Mot d'entrée
%IWy.z(2)
Non
Mot de sortie
%QWy.z(2)
Oui
Etat du mot
d'entrée
%IWSy.z(2)
Non
Etat du mot de
sortie
%QWSy.z(2)
Non
Description
écriture(1)
Ces bits sont des images logiques des états électriques
des E/S numériques physiques. Ils sont stockés dans la
mémoire des données et mis à jour entre chaque
scrutation de la logique du programme.
Ces objets mot contiennent la valeur analogique de la voie
correspondante.
Ces objets mot contiennent l'état de la voie analogique
correspondante.
(1) Ecrit par le programme ou à l'aide d'une table d'animation.
(2) y est le numéro du module et z celui de la voie. Pour une description de y et z, reportez-vous à la syntaxe
d'adressage des E/S (voir page 33).
(3) Vous ne pouvez pas écrire de données dans les bits d'entrée, mais vous pouvez les forcer.
34
EIO0000001475 12/2017
Objets langage
Exemples
Ce tableau présente quelques exemples d'adressage des E/S :
Objet d'E/S
Description
%I0.5
Voie d'entrée numérique 5 sur le contrôleur (E/S intégrées correspondant au module 0).
%Q3.4
Voie de sortie numérique 4 sur le module d'extension à l'adresse 3 (E/S du module
d'extension).
%IW0.1
Entrée analogique 1 sur le contrôleur (E/S intégrée).
%QW2.1
Sortie analogique 1 sur le module d'extension à l'adresse 2 (E/S du module d'extension).
%IWS0.101
Etat de la voie d'entrée analogique 1 sur la première cartouche du contrôleur logique.
%QWS1.1
Etat de la voie de sortie analogique 1 sur le module d'extension à l'adresse 1 (E/S du
module d'extension).
EIO0000001475 12/2017
35
Objets langage
Objets mot
Introduction
Les objets mot adressés sous la forme de mots de 16 bits sont stockés dans la mémoire de
données et peuvent contenir un entier compris entre -32 768 et 32 767 (sauf pour le bloc fonction
Compteur rapide qui est compris entre 0 et 65 535).
Exemples d'objets mot :
Valeurs immédiates
 Mots mémoire (%MWi)
 Mots constants (%KWi)
 Mots d'échange E/S (%IWi, %QWi, %IWSi, %QWSi)
 Mots système (%SWi)
 Blocs fonction (données de configuration et/ou d'exécution)

Les objets valides sont compris entre 0 et la référence maximum utilisée dans votre application
(consultez le Guide de programmation de votre Logic Controller).
Par exemple, si la référence maximale de votre application pour les mots mémoire est %MW9,
l'espace alloué va de %MW0 à %MW9. Dans cet exemple, %MW10 n'est pas valide, et n'est pas
accessible ni en interne ni en externe.
Syntaxe
Respectez la syntaxe suivante pour adresser des mots mémoire, constants et système :
Le tableau suivant décrit les éléments de la syntaxe d'adressage :
Groupe
Elément
Description
Symbole
%
Une adresse interne doit toujours débuter par le symbole de
pourcentage (%).
Type d'objet
M
Les mots mémoire stockent des valeurs pendant l'exécution d'un
programme.
K
Les mots constants permettent de stocker des valeurs constantes ou des
messages alphanumériques. Leur contenu ne peut être écrit ou modifié
qu'en utilisant SoMachine Basic.
S
Les mots système fournissent des informations d'état et de régulation
concernant le contrôleur.
W
Mot de 16 bits.
Format
36
EIO0000001475 12/2017
Objets langage
Groupe
Elément
Description
Identificateur
d'instance
d'objet
i
L'identificateur de l'objet représentant leur instance séquentielle en
mémoire. Le nombre maximum d'objets dépend du nombre d'objets
configurés aux limites de la mémoire disponible. Pour connaître la quantité
maximale de mémoire disponible, consultez le guide de programmation de
votre Logic Controller.
Format
Le contenu des mots ou des valeurs est stocké dans la mémoire utilisateur sous la forme d'un code
binaire à 16 bits (complément de deux) selon la convention suivante :
Pour les notations binaires signées, le bit 15 est attribué, par convention, au signe de la valeur
codée :
 Le bit 15 est mis à 0 : le contenu du mot est une valeur positive.
 Le bit 15 est mis à 1 : le contenu du mot est une valeur négative (les valeurs négatives sont
exprimées en logique de complément de deux).
Les mots et les valeurs immédiates (consultez la section Liste des exceptions (voir page 38) pour
les entiers non signés) peuvent être saisis ou récupérés au format suivant :
 Décimal
Min. : -32 768, Max. : 32 767 (1579, par exemple)
 Hexadécimal
Min. : 16#0000, Max. : 16#FFFF (par exemple, 16#A536)
Autre syntaxe : #A536
 Les règles du format ASCII sont les suivantes :
 La fonction lit toujours l'octet de poids fort en premier.
 Tout caractère ASCII en dehors de l'intervalle [0 - 9] ([16#30 - 16#39]) est considéré comme
un caractère de fin, à l'exception du signe moins '-' (16#2D) lorsqu'il est placé comme premier
caractère.
 En cas de débordement (> 32 767 ou < -32 768), le bit système %S18 (erreur détectée ou
débordement arithmétique) est mis à 1 et la valeur 32 767 ou -32 768 est renvoyée.
 Si le premier caractère de l'opérande est un caractère de « fin », la valeur 0 est renvoyée et
le bit %S18 est mis à 1.
Par exemple, "HELLO" :
 %MW0:="HE"
 %MW1:="LL"
 %MW2:="O"
EIO0000001475 12/2017
37
Objets langage
Liste des exceptions
Ce tableau répertorie les valeurs des objets qui sont des entiers non signés :
Objet
Valeur
%SW
0 à 65 535
%FC.V et %FC.P
0 à 65 535
%FC.VD et %FC.PD
0 à 4 294 967 295
%HSC.V, %HSC.P, %HSC.S0, %HSC.S1 et %HSC.C
0 à 65 535
%HSC.DV, %HSC.PD, %HSC.S0D, %HSC.S1D et %HSC.CD
0 à 4 294 967 295
%HSC.T
100 à 1 000
%PWM.P
0 à 32 767
%PWM.R
0 à 100
%PLS.P
0 à 32 767
%PLS.N
0 à 32 767
%PLS.ND
0 à 2 147 483 647
Les objets ne figurant pas dans cette liste des exceptions ont les plages de valeurs suivantes :
Mots : -32 768 à 32 767
 Mots doubles : -2 147 483 648 à 2 147 483 647

Description
Le tableau suivant décrit les objets mot :
Mots
Description
Valeurs
immédiates
Il s'agit d'entiers dont le format est identique à celui des mots de 16 bits. Cela permet de
leur attribuer des valeurs.
Mémoire
Adresse ou valeur
Base 10 (décimal)
-32 768 à 32 767
Base 16 (hexadécimal)
16#0000 à
16#FFFF
Mots utilisés pour stocker des valeurs dans %MWi
la mémoire de données au cours du
fonctionnement.
Accès en écriture(1)
Non
Oui
(1) Ecrit par le programme ou à l'aide d'une table d'animation.
38
EIO0000001475 12/2017
Objets langage
Mots
Description
Adresse ou valeur
Constantes
Stockent des constantes ou des messages %KWi
alphanumériques. Leur contenu peut être
écrit ou modifié avec SoMachine Basic en
cours de configuration et en mode en ligne
(voir SoMachine Basic, Guide d'utilisation).
Oui, en cours de
configuration et en
mode en ligne, à partir
des propriétés de mot
constant
Système
Ces mots de 16 bits comportent plusieurs %SWi
fonctions :
 Ils permettent l'accès aux données
provenant directement du contrôleur par
lecture des mots %SWi.
 Ils effectuent des opérations sur
l'application (ajustement des blocs
horodateur, par exemple).
Dépend de i.
Blocs fonction
Ces mots correspondent aux paramètres
ou aux valeurs courantes des blocs
fonction.
Oui
%TM2.P, %Ci.P,
etc.
Accès en écriture(1)
(voir SoMachine
Basic, Guide
d'utilisation).
(1) Ecrit par le programme ou à l'aide d'une table d'animation.
Le nombre maximum d'objets disponibles est déterminé par le Logic Controller. Pour plus
d'informations sur le nombre maximum d'objets, consultez le guide de programmation de votre
Logic Controller.
Exemple
Ce tableau présente quelques exemples d'adressage d'objets mot :
Objet mot
Description
%MW15
Mot mémoire numéro 15
%KW26
Mot constant numéro 26
%SW30
Mot système numéro 30
EIO0000001475 12/2017
39
Objets langage
Extraction des bits des objets mot
Ce tableau indique comment extraire l'un des 16 bits des objets mot suivants :
Objet mot
Adresse ou valeur
Accès en écriture(1)
Mémoire
%MWi:Xk
Oui
Système
%SWi:Xk
Dépend de i.
Constant
%KWi:Xk
Non
Valeur d'entrée
%IWy.z:Xk(2)
Non
Valeur de la sortie
%QWy.z:Xk(2)
Oui
Etat de l'entrée
%IWSy.z:Xk(2)
Non
Etat de la sortie
%QWSy.z:Xk(2)
Oui
(1) Ecrit par le programme ou à l'aide d'une table d'animation.
(2) Pour plus d'informations sur les objets mot d'E/S, consultez la section Adressage d'objets d'E/S
(voir page 33).
Xk Indique le numéro du bit à extraire de l'objet mot. Par exemple, %MW0.X3 (le bit extrait est le bit stocké à
la troisième position séquentielle du mot mémoire %MW0).
40
EIO0000001475 12/2017
Objets langage
Objets mot double et flottants
Introduction
Un objet flottant est un nombre réel, c'est-à-dire un nombre avec une partie fractionnelle (par
exemple : 3,4E+38, 2,3 ou 1,0).
Un mot double est constitué de 4 octets stockés dans la mémoire des données et dont la valeur
(complément de deux) est comprise entre -2 147 483 648 et +2 147 483 647.
Tous les contrôleurs logiques ne prennent pas en charge les opérations sur les objets flottants et
les objets mot double.
Pour plus d'informations sur la compatibilité, consultez le guide de programmation de votre
contrôleur logique.
Format et valeur du mot flottant
Le format flottant utilisé est celui de la norme IEEE 734-1985 (équivalente à la norme CEI 559). La
longueur des mots est de 32 bits, ce qui correspond à des nombres à virgule flottante à une
décimale.
Le tableau ci-dessous décrit le format d'une valeur flottante :
Bit 31
Bits {30 à 23}
Bits {22 à 0}
Signe de l'exposant
Exposant
Mantisse
La précision de représentation est comprise entre 2 et 24 pour les nombres à virgule flottante. Il
est inutile d'afficher plus de 6 chiffres après la virgule.
NOTE : La valeur "1285" est interprétée comme une valeur entière. Pour qu'elle soit prise en
compte comme une valeur à virgule flottante, elle doit être écrite comme suit : 1285,0.
EIO0000001475 12/2017
41
Objets langage
Plage limite des fonctions arithmétiques sur des objets flottants
Le tableau suivant décrit la plage limite des fonctions arithmétiques sur des objets flottants :
Fonction arithmétique
Plage limite et opérations invalides
Type
Syntaxe
NaN (Not a Number)
Infinité
Racine carrée d'un
opérande
SQRT(x)
x<0
x>
SQRT(3.402824E+38)
est le nombre maximum
pouvant être obtenu
Puissance d'un entier par EXPT(y, x)
un réel
(où :
EXPT(%MF,%MW)
x^y = %MW^%MF)
x < 0 et y = nombre
fractionnaire
X ^ Y > 3,402824E+38
Logarithme en base 10
LOG(x)
x<0
Calcul possible jusqu'à
l'obtension de la valeur
maximale de x
(3,402824E+38)
Logarithme népérien
LN(x)
x<0
Aucune valeur maximale
de x.
LN(3.402824E+38) est
le nombre maximum
pouvant être obtenu
Exponentiel naturel
EXP(x)
Pas de limite dans la
plage réelle
x > 88,72283
Si x < -103,973 le résultat
est égal à 0
Contrôle de validité
Le bit système %S18% est mis à 1 lorsque le résultat est hors de la plage valide.
Le mot d'état %SW17% indique la cause d'une erreur détectée dans une opération flottante.
Différents bits du mot %SW17 :
%SW17:X0
Opération incorrecte, le résultat n'est pas un nombre (NAN).
%SW17:X1
Réservé
%SW17:X2
Division par 0, le résultat est incorrect (-Infinité ou +Infinité)
%SW17:X3
Résultat supérieur en valeur absolue à +3,402824e+38 : le résultat est incorrect
(-Infinité ou +Infinité)
%SW17:X4 to X15
Réservé
Ce mot est remis à 0 par le système après un démarrage à froid et par le programme à des fins de
réutilisation.
42
EIO0000001475 12/2017
Objets langage
Syntaxe
L'adressage des objets flottants mémoire et constants doit respecter la syntaxe suivante :
L'adressage des objets mot double mémoire et constant doit respecter la syntaxe suivante :
Le tableau suivant décrit les éléments de la syntaxe d'adressage :
Groupe
Elément
Description
Symbole
%
Une adresse interne doit toujours débuter par le symbole de
pourcentage (%).
Type d'objet
M
Les objets mémoire permettent de stocker des valeurs intermédiaires
pendant l'exécution d'un programme.
K
Les mots constants permettent de stocker des valeurs constantes ou
des messages alphanumériques (uniquement pour les mots doubles).
F
Objet flottant 32 bits.
D
Objet mot double mot 32 bits.
i
L'identificateur représentant l'instance (position séquentielle) d'un objet
en mémoire. Pour plus d'informations sur le nombre maximum d'objets,
consultez le guide de programmation de votre contrôleur logique.
Format
Identificateur
d'instance d'objet
EIO0000001475 12/2017
43
Objets langage
Description des objets flottants et mots doubles
Le tableau suivant décrit les objets flottants et mot double :
Type d'objet
Description
Adresse
Accès en écriture
Valeurs immédiates
Entiers (mot double) ou décimaux
(virgule flottante) dont le format est
identique aux objets 32 bits.
-
Aucune
Flottant mémoire
Objets utilisés pour stocker des valeurs %MFi
dans la mémoire des données lorsque le
%MDi
système est en cours d'exécution.
Mot double mémoire
Valeur constante flottante Permet de stocker les constantes.
%KFi
Oui
Oui
Oui, en cours de
configuration et en mode
en ligne, à partir des
propriétés de mot
constant (voir SoMachine
Basic, Guide
d'utilisation).
Constante double
%KDi
Oui, en cours de
configuration et en mode
en ligne, à partir des
propriétés de mot
constant (voir SoMachine
Basic, Guide
d'utilisation).
NOTE : Le contrôleur logique détermine le nombre maximum d'objets. Pour plus d'informations,
consultez le guide de programmation de votre plate-forme matérielle.
Exemple
Le tableau suivant montre des exemples d'adressage d'objets flottants et mot double :
44
Objet
Description
%MF15
Objet flottant mémoire numéro 15
%KF26
Objet flottant constant numéro 26
%MD15
Mot double mémoire numéro 15
%KD26
Mot double constant numéro 26
EIO0000001475 12/2017
Objets langage
Possibilité de recouvrement entre des objets
Les mots de longueur simple, de longueur double et flottants sont stockés dans une zone mémoire
de l'espace des données. Ainsi, le mot flottant %MFi et le mot double %MDi correspondent aux
mots de longueur simple %MWi et %MWi+1 (le mot %MWi contenant les bits de poids faible et le mot
%MWi+1 les bits de poids fort du mot %MFi).
Ce tableau illustre le recouvrement des mots mémoire flottants et doubles :
Objets flottants et doubles
Adresse impaire
Mots mémoire
%MF1 / %MD1
%MW1
%MF3 / %MD3
%MW3
%MF0 / %MD0
%MW0
%MF2 / %MD2
%MW2
%MF4 / %MD4
%MW4
...
%MW5
%MFi / %MDi
%MWi
…
...
%MFi+1 / %MDi+1
%MWi+1
Le tableau suivant illustre le recouvrement des objets constants flottants et doubles :
Objets flottants et doubles
Adresse impaire
%KF0 / %KD0
%KF1 / %KD1
%KF2 / %KD2
%KW1
%KW2
%KF3 / %KD3
%KF4 / %KD4
%KW3
%KW4
...
…
%KW5
...
%KFi / %KDi
%KFi+1 / %KDi+1
Mots mémoire
%KW0
%KWi
%KWi+1
Exemple :
%MF0 correspond à %MW0 et à %MW1. %KF43 correspond à %KW43 et à %KW44.
EIO0000001475 12/2017
45
Objets langage
Objets structurés
Introduction
Les objets structurés sont des ensembles formés par des objets adjacents. SoMachine Basic
prend en charge les types d'objet structuré suivants :
 Chaînes de bits
 Tables de mots
 Tables de mots doubles
 Tables de mots flottants
Chaînes de bits
Les chaînes de bits sont composées d'une série de bits d'objets adjacents, de même type et de
longueur (L) définie. Elles sont référencées par les limites des octets.
Exemple : chaîne de bits %M8:6
NOTE : %M8:6 est valide (car 8 est un multiple de 8), alors que %M10:16 ne l'est pas (10 n'est pas
un multiple de 8).
Les chaînes de bits peuvent être utilisées avec l'instruction d'affectation (voir page 62).
46
EIO0000001475 12/2017
Objets langage
Types de bit disponibles
Types de bit disponibles pour les chaînes de bits :
Type
Adresse
Accès en écriture
Bits d'entrée numérique
%I0.0:L ou %I1.0:L (1)
Non
Bits de sortie numérique
%Q0.0:L ou %Q1.0:L (1)
Oui
Bits système
%Si:L
"i" étant un multiple de 8
En fonction de i
Bits d'étape Grafcet
%Xi:L
"i" étant un multiple de 8
Oui (via le programme)
Bits mémoire
%Mi:L
"i" étant un multiple de 8
Oui
(1) Seuls les bits d'E/S de 0 à 16 peuvent être lus dans une chaîne de bits. Pour les Logic Controller avec
24 ou 32 voies d'E/S, les bits supérieurs à 16 sont illisibles dans une chaîne de bits.
L Représente la longueur des objets structurés (chaînes de bits, table de mots, table de mots doubles et
table de mots flottants).
Le nombre de bits est déterminé par le Logic Controller. Pour plus d'informations, consultez le
Guide de programmation de votre plate-forme matérielle.
Tables de mots
Les tables de mots sont composées d'une série de mots adjacents de même type et de
longueur (L) définie (255 au maximum).
Exemple : table de mots %KW10:7
Les tables de mots peuvent être utilisées avec l'instruction d'affectation (voir page 62).
EIO0000001475 12/2017
47
Objets langage
Types de mot disponibles
Types de mot disponibles pour les tables de mots :
Type
Adresse
Accès en écriture
Mots mémoire
%MWi:L
Oui
Mots constants
%KWi:L
Non
Mots système
%SWi:L
En fonction de i
Le nombre de mots est déterminé par le Logic Controller. Pour plus d'informations, consultez le
Guide de programmation de votre plate-forme matérielle.
Tables de mots doubles
Les tables de mots doubles sont composées d'une série de mots adjacents de même type et de
longueur (L) définie (255 au maximum).
Exemple : table de mots doubles %KD10:7
Les tables de mots doubles peuvent être utilisées avec l'instruction d'affectation (voir page 62).
Types de mot double disponibles
Types de mot disponibles pour les tables de mots doubles :
48
Type
Adresse
Accès en écriture
Mots mémoire
%MDi:L
Oui
Mots constants
%KDi:L
Non
EIO0000001475 12/2017
Objets langage
Tables de mots flottants
Les tables de mots flottants sont composées d'une série de mots adjacents de même type et de
longueur (L) définie (255 au maximum).
Exemple : table de mots flottants %KF10:7
Les tables de mots flottants peuvent être utilisées avec l'instruction d'affectation (voir page 62).
Types de mot flottant disponibles
Types de mot disponibles pour les tables de mots flottants :
Type
Adresse
Accès en écriture
Mots mémoire
%MFi:L
Oui
Mots constants
%KFi:L
Non
EIO0000001475 12/2017
49
Objets langage
Objets indexés
Introduction
Un objet indexé est un mot simple, un mot double ou un objet à virgule flottante, dont l'adresse est
indexée. Il existe deux types d'adressage d'objet :
 Adressage direct
 Adressage indexé
Adressage direct
L'adresse directe d'un objet est définie lors de l'écriture du programme.
Exemple : %M26 est un bit mémoire dont l'adresse directe est 26.
Adressage indexé
L'adresse indexée d'un objet permet de modifier l'adresse de cet objet en lui ajoutant un index. Le
contenu de l'index est ajouté à l'adresse directe de l'objet. Cet index est défini par un mot mémoire
%MWi.
Exemple : %MW108[%MW2] est un mot dont l'adresse est composée de l'adresse directe 108 et du
contenu du mot %MW2.
Si la valeur du mot %MW2 est 12, écrire des données dans %MW108[%MW2] équivaut à écrire dans
%MW120 (108 + 12).
50
EIO0000001475 12/2017
Objets langage
Objets disponibles pour l'adressage indexé
Ce tableau décrit les types d'objets disponibles pour l'adressage indexé :
Type
Adresse
Accès en écriture
Mots mémoire
%MWi[MWj]
Oui
Mots constants
%KWi[%MWj]
Non
Mots mémoire doubles
%MDi[MWj]
Oui
Mots doubles constants
%KDi[%MWj]
Non
Mots mémoire flottants
%MFi[MWj]
Oui
Mots flottants constants
%KFi[%MWj]
Non
i
j
Identificateur représentant l'instance (position séquentielle) d'un objet dans la mémoire. Pour plus
d'informations sur le nombre maximum d'objets, consultez le guide de programmation de votre Logic
Controller.
Identificateur de l'objet d'index dont le contenu doit être ajouté à l'adresse directe d'un autre objet.
Les objets indexés sont utilisables avec l'instruction d'affectation (voir page 78) et dans les
instructions de comparaison (voir page 74).
Ce type d'adressage permet de scruter un ensemble d'objets de même type (tels que des mots
mémoire ou constants) successivement, en modifiant le contenu de l'objet indexé dans le
programme.
EIO0000001475 12/2017
51
Objets langage
Bit système de débordement d'index %S20
Un débordement d'index se produit lorsque l'adresse d'un objet indexé dépasse les limites de la
zone mémoire contenant ce même type d'objet. Pour résumer :
 L'adresse de l'objet plus le contenu de l'index est inférieur à 0.
 L'adresse de l'objet plus le contenu de l'index est supérieur au plus grand mot directement
référencé dans l'application.
En cas de débordement d'index, le bit système %S20 est mis à 1 et l'objet reçoit une valeur d'index
égale à 0.
NOTE : La surveillance des débordements vous incombe. Votre programme doit lire %S20 pour
identifier le traitement possible. Vous devez ensuite confirmer qu'il est remis à 0.
%S20 (état initial = 0) :
 En cas de débordement de l'index : mise à 1 par le contrôleur.
 Acquittement de débordement : mise manuelle à 0 dans le programme après modification de
l'index.
AVERTISSEMENT
FONCTIONNEMENT IMPREVU DE L’EQUIPEMENT



Ecrivez des instructions de programmation pour tester la validité des opérandes destinés à
être utilisés dans des opérations mathématiques.
Evitez d'utiliser des opérandes de différents types de données dans des opérations
mathématiques.
Surveillez systématiquement les bits système affectés, à la recherche de résultats
mathématiques incorrects.
Le non-respect de ces instructions peut provoquer la mort, des blessures graves ou des
dommages matériels.
52
EIO0000001475 12/2017
Objets langage
Objets de bloc fonction
Introduction
Un bloc fonction est un objet réutilisable qui accepte une ou plusieurs valeurs d'entrée et renvoie
une ou plusieurs valeurs de sortie. Il est toujours appelé par une instance (une copie d'un bloc
fonction ayant son propre nom et ses propres variables). Chaque instance conserve son état
(sorties et variables internes) entre deux appels.
NOTE : les blocs fonction (%FC, %HSC, %PLS et %PWM) et l'alarme d'état pilotent leurs entrées et
sorties (%I0.x et %Q0.x affectés dans la configuration) directement et indépendamment du cycle
du contrôleur. Les bits d'image (%I0.x et %Q0.x) ne sont pas mis à jour par le contrôleur. Donc,
ces entrées et sorties ne sont pas exploitables directement dans le programme utilisateur, et une
table d'animation utilisant ces E/S ne peut pas indiquer leur état.
Exemple
Cette figure montre un bloc fonction StepCounter :
Objets bit
Les objets bit correspondent aux sorties des blocs fonction. Les instructions booléennes de test
peuvent accéder à ces bits :
 directement (par exemple, LD E) s'ils sont câblés au bloc en programmation (voir page 171)
réversible ;
 en spécifiant le type de bloc (LD %Ci.E, par exemple).
Les entrées sont accessibles sous la forme d'instructions.
EIO0000001475 12/2017
53
Objets langage
Objets mot
Les objets mot correspondent à des paramètres et des valeurs :
Paramètres de configuration de bloc : le programme peut accéder à certains paramètres
(paramètres de présélection, par exemple), mais pas à d'autres (base de temps, par exemple).
 Valeurs courantes : par exemple, %Ci.V, la valeur de comptage actuelle.

Objets mot double
Les objets mot double augmentent la capacité de calcul de votre Logic Controller lors de
l'exécution de fonctions système, telles que les compteurs %FC et %HSC, ainsi que les générateurs
d'impulsions (%PLS, %PWM).
Pour adresser les objets mot double 32 bits utilisés avec les blocs fonction, il suffit d'ajouter le
caractère D à la syntaxe d'origine des objets mot standard.
L'exemple suivant indique comment adresser la valeur courante d'un compteur rapide au format
standard et au format mot double :
 %FCi.V est la valeur courante du compteur rapide au format standard.
 %FCi.VD est la valeur courante du compteur rapide au format mot double.
54
EIO0000001475 12/2017
SoMachine Basic
Procédure
EIO0000001475 12/2017
Chapitre 3
Procédure
Procédure
Contenu de ce chapitre
Ce chapitre contient les sous-chapitres suivants :
Sous-chapitre
Sujet
Page
3.1
Traitement booléen
56
3.2
Traitement numérique
76
3.3
Programme
3.4
Virgule flottante
106
3.5
ASCII
115
3.6
Opérateurs de pile
130
3.7
Instructions sur les tables d'objets
132
3.8
Instructions sur les objets d'E/S
153
EIO0000001475 12/2017
94
55
Procédure
Sous-chapitre 3.1
Traitement booléen
Traitement booléen
Objet de cette section
Cette section présente les instructions de traitement booléen.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
56
Page
Instructions booléennes
57
Opérateurs de chargement (LD, LDN, LDR, LDF)
60
Opérateurs d'affectation (ST, STN, R, S)
62
Opérateurs AND logiques (AND, ANDN, ANDR, ANDF)
64
Opérateurs OR logiques (OR, ORN, ORR, ORF)
66
Opérateurs OR exclusifs (XOR, XORN, XORR, XORF)
68
Opérateur NOT (N)
71
Fonctions montantes et descendantes (RISING, FALLING)
72
Instructions de comparaison
74
EIO0000001475 12/2017
Procédure
Instructions booléennes
Introduction
Les instructions booléennes s'apparentent aux éléments du langage Schéma à contacts. Elles
sont résumées dans le tableau suivant :
Elément
Opérateur
Exemple
d'instruction
Description
Eléments de test
L'instruction Load (LD) équivaut LD
au premier contact ouvert
connecté à un rail
d'alimentation d'un schéma à
contacts.
Les instructions AND et OR
logiques équivalent à des
contacts ouverts après le
premier contact connecté au rail
d'alimentation d'un schéma à
contacts.
%I0.0
Le contact est fermé lorsque le
bit %I0.0 est à l'état 1.
Eléments d'action
L'instruction Store (ST) équivaut ST
à une bobine.
%Q0.0
L'objet bit associé prend la
valeur logique de l'accumulateur
du bit (résultat de la logique
précédente).
Le résultat booléen des éléments de test est appliqué aux éléments d'action, comme le montrent
les instructions suivantes :
Réseau
Instruction
0
LD
AND
ST
%I0.0
%I0.1
%Q0.0
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Test des entrées du contrôleur
Des instructions de test booléennes peuvent être utilisées pour détecter des fronts montants ou
descendants sur les entrées du contrôleur. Un front est détecté lorsque l'état d'une entrée est
passé de la valeur "scrutation n-1" à la valeur "scrutation n". La détection de ce front reste effective
pendant la scrutation courante.
EIO0000001475 12/2017
57
Procédure
Détection de fronts
Le tableau suivant résume les instructions et les chronogrammes de détection de fronts montants
et descendants :
Front
Instruction IL
Contact de front
montant
LDR %M0
Contact de front
descendant
LDF %M0
Schéma à
contacts
Chronogramme
Les objets sont mis à jour seulement au début du cycle de tâche maître suivant la détection d'un front.
Le changement d'état d'un bit mémoire (%M0, par exemple) est signalé avec une scrutation de retard.
NOTE : Les contacts de front montant et de front descendant ne peuvent être utilisés que sur des
objets de bits d'entrée (%I) et de bits mémoire (%M).
La détection de front peut également être effectuée à l'aide des fonctions (voir page 72) RISING
et FALLING
. Pour les utiliser, l'application doit être configurée avec un niveau
fonctionnel correspondant au moins à Niveau 6.0.
L'une des différences entre les contacts de front montant/descendant et les fonctions
RISING/FALLING est la scrutation appliquée sur le programme :
 Les instructions LDR/LDF indiquent les fronts montants/descendants avec un délai d'une
scrutation.
 Les fonctions RISING/FALLING indiquent les fronts montants/descendants dans le cycle au
cours duquel ils se produisent.
58
EIO0000001475 12/2017
Procédure
Détection de front montant
L'instruction Load Rising Edge (LDR) équivaut à un contact de détection de front montant. Le front
montant détecte le passage de l'entrée de 0 à 1.
Un contact de détection de transition positive permet de détecter un front montant, comme dans
l'exemple suivant :
Réseau
Instruction
0
LDR
%I0.0
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Détection de front descendant
L'instruction Load Falling Edge (LDF) équivaut à un contact de détection de front descendant. Le
front descendant détecte le passage de l'entrée de régulation de 1 à 0.
Un contact de détection de transition négative permet de détecter un front descendant, comme
dans l'exemple suivant :
Réseau
Instruction
0
LDF
%I0.0
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
EIO0000001475 12/2017
59
Procédure
Opérateurs de chargement (LD, LDN, LDR, LDF)
Introduction
Les opérateurs de chargement LD, LDN, LDR et LDF correspondent respectivement à des contacts
d'ouverture, de fermeture, de front montant et de front descendant. Les instructions LDR et LDF ne
sont utilisées qu'avec les entrées et les mots internes du contrôleur logique.
Syntaxe
Ce tableau répertorie les types d'opérateur de chargement avec leurs équivalents en langage
Schéma à contacts et les opérateurs autorisés :
Opérateurs
Equivalent en langage Schéma Opérandes autorisés
à contacts
LDN
0/1
%I, %Q, %M, %S, %X, %BLK.x
%IW:Xk, %QW:Xk, %IWS:Xk, %QWS:Xk,
%MW:Xk, %SW:Xk, %KW:Xk
LDR
%I, %M
LD
LDF
Exemples de codage
Exemples d'instructions de chargement :
Réseau
Instruction
0
LD
ST
%I0.1
%Q0.3
1
LDN
ST
%M0
%Q0.2
2
LDR
ST
%I0.1
%Q0.4
3
LDF
ST
%I0.3
%Q0.5
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
60
EIO0000001475 12/2017
Procédure
Chronogramme
Le schéma suivant montre le chonogramme, ainsi que l'effet sur la sortie, du code d'un ou des
exemples fournis :
NOTE : La détection du front du bit mémoire (%M) s'effectue entre les scrutations de la tâche
maître.
EIO0000001475 12/2017
61
Procédure
Opérateurs d'affectation (ST, STN, R, S)
Introduction
Les opérateurs d'affectation ST, STN, S et R correspondent respectivement aux bobines directe,
inverse, d'enclenchement et de déclenchement.
Syntaxe
Ce tableau répertorie les types d'opérateur d'affectation avec leurs équivalents en langage
Schéma à contacts et les opérateurs autorisés :
Opérateurs
Equivalent en langage
Schéma à contacts
ST
Opérandes autorisés
%Q, %M, %BLK.x
%QW:Xk, %MW:Xk, %S(1), %SW:Xk(1)
STN
S
%Q, %M, %S, %X, %BLK.x
%QW:Xk, %MW:Xk, %SW:Xk(1)
R
(1) %S ou %SW:Xk est activé sur les mots système qui ne sont pas en lecture seule.
Exemples de codage
Exemples d'instructions d'affectation :
Réseau
Instruction
0
LD
ST
STN
S
%I0.1
%Q0.3
%Q0.2
%Q0.4
1
LD
R
%I0.2
%Q0.4
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
62
EIO0000001475 12/2017
Procédure
Chronogramme
Le schéma suivant montre le chonogramme, ainsi que l'effet sur la sortie, du code d'un ou des
exemples fournis :
EIO0000001475 12/2017
63
Procédure
Opérateurs AND logiques (AND, ANDN, ANDR, ANDF)
Introduction
Les opérateurs AND effectuent une opération AND logique entre l'opérande (ou son inverse, son
front montant ou son front descendant) et le résultat booléen de l'instruction précédente.
Syntaxe
Ce tableau répertorie les types d'opérateur AND, leur équivalent en langage Schéma à contacts et
les opérandes autorisés :
Opérateurs
Equivalent en langage
Schéma à contacts
Opérandes autorisés
0/1
%I, %Q, %M, %S, %X, %BLK.x
%IW:Xk, %QW:Xk, %IWS:Xk, %QWS:Xk,
%MW:Xk, %SW:Xk, %KW:Xk
AND
ANDN
ANDR
%I, %M
ANDF
Exemples de codage
Exemples d'instructions AND logiques :
Réseau
Instruction
0
LD
AND
ST
%I0.1
%M1
%Q0.3
1
LD
ANDN
ST
%M0
%I0.0
%Q0.2
2
LD
ANDR
S
%I0.3
%I0.4
%Q0.4
3
LD
ANDF
S
%M3
%I0.5
%Q0.5
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
64
EIO0000001475 12/2017
Procédure
Chronogramme
Le schéma suivant montre le chonogramme, ainsi que l'effet sur la sortie, du code d'un ou des
exemples fournis :
EIO0000001475 12/2017
65
Procédure
Opérateurs OR logiques (OR, ORN, ORR, ORF)
Introduction
Les opérateurs OR effectuent une opération OR logique entre l'opérande (ou son inverse, son front
montant ou son front descendant) et le résultat booléen de l'instruction précédente.
Syntaxe
Ce tableau répertorie les types d'opérateur OR, leur équivalent en langage Schéma à contacts et
les opérandes autorisés :
Opérateurs
OR
Equivalent en langage
Schéma à contacts
Opérandes autorisés
0/1
%I, %Q, %M, %S, %X, %BLK.x
%IW:Xk, %QW:Xk, %IWS:Xk, %QWS:Xk,
%MW:Xk, %SW:Xk, %KW:Xk
ORN
ORR
%I, %M
ORF
66
EIO0000001475 12/2017
Procédure
Exemples de codage
Exemples d'instructions OR logiques :
Réseau
Instruction
0
LD
OR
ST
%I0.1
%M1
%Q0.0
1
LD
ORN
ST
%I0.2
%M2
%Q0.1
2
LD
ORR
S
%M0
%I0.3
%Q0.5
3
LDF
ORF
S
%I0.5
%I0.6
%Q0.0
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Chronogramme
Le schéma suivant montre le chonogramme, ainsi que l'effet sur la sortie, du code d'un ou des
exemples fournis :
EIO0000001475 12/2017
67
Procédure
Opérateurs OR exclusifs (XOR, XORN, XORR, XORF)
Introduction
L'opérateur XOR exécute une opération OR exclusif entre l'opérande et le résultat booléen de
l'instruction précédente.
L'opérateur XORN exécute une opération OR exclusif entre l'inverse de l'opérande et le résultat
booléen de l'instruction précédente.
L'opérateur XORR exécute une opération OR exclusif entre le front montant de l'opérande et le
résultat booléen de l'instruction précédente.
L'opérateur XORF exécute une opération OR exclusif entre le front descendant de l'opérande et le
résultat booléen de l'instruction précédente.
Syntaxe
Ce tableau répertorie les types d'opérateur XOR et les opérandes autorisés :
Opérateurs
XOR
Equivalent en langage Schéma Opérandes autorisés
à contacts
%I, %Q, %M, %S, %X, %BLK.x
%IW:Xk, %QW:Xk, %IWS:Xk, %QWS:Xk, %MW:Xk,
%SW:Xk, %KW:Xk
XORN
XORR
%I, %M
XORF
68
EIO0000001475 12/2017
Procédure
Exemples de codage
Utilisation de l'instruction XOR :
Réseau
Instruction
0
LD
XOR
ST
%I0.1
%M1
%Q0.3
Instructions logiques équivalentes de l'opérateur XOR :
Réseau
Instruction
0
LD
ANDN
OR(
ANDN
)
ST
%I0.1
%M1
%M1
%I0.1
%Q0.3
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Chronogramme
Le schéma suivant montre le chonogramme, ainsi que l'effet sur la sortie, du code d'un ou des
exemples fournis :
EIO0000001475 12/2017
69
Procédure
Cas particuliers
N'insérez pas de :
contacts XOR dans la première position d'un réseau ;
 contacts XOR en parallèle avec d'autres éléments en langage Schéma à contacts (comme dans
l'exemple suivant).

Comme l'illustre l'exemple suivant, l'insertion d'un élément en parallèle avec un contact XOR
génère une erreur détectée de validation :
70
EIO0000001475 12/2017
Procédure
Opérateur NOT (N)
Introduction
L'opérateur NOT (N) a un opérande implicite (le résultat stocké dans l'accumulateur booléen). NOT
rend négative la valeur de l'accumulateur.
Syntaxe
Ce tableau montre l'opérateur N :
Opérateur
Equivalent en langage Schéma Opérandes autorisés
à contacts
Sans objet.
N
Exemples de codage
Exemple d'instruction NOT :
Réseau
Instruction
0
LD
N
ST
%I0.1
%Q0.0
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Chronogramme
Le schéma suivant montre le chonogramme, ainsi que l'effet sur la sortie, du code d'un ou des
exemples fournis :
EIO0000001475 12/2017
71
Procédure
Fonctions montantes et descendantes (RISING, FALLING)
Introduction
Les fonctions RISING et FALLING évaluent respectivement un front montant et un front
descendant de l'expression qui la précède immédiatement.
Ces fonctions possèdent un opérande implicite, à savoir, le résultat de l'expression précédente,
qui est stocké dans l'accumulateur booléen.
Vous ne pouvez pas placer ces fonctions dans la première colonne d'un réseau ou d'un
branchement de langage Schéma à contacts et elles ne peuvent pas constituer la première
instruction d'un réseau IL.
NOTE : Pour utiliser les fonctions RISING et FALLING, l'application doit être configurée avec un
niveau fonctionnel (voir SoMachine Basic, Guide d'utilisation) correspondant au moins à Niveau
6.0.
Syntaxe
Fonction
Equivalent en langage Schéma à
contacts
Opérandes autorisés
RISINGn (1)
Sans objet.
FALLINGn (1)
Sans objet.
(1)n est un entier incrémenté chaque fois qu'un front montant ou descendant est inséré.
Cet entier est calculé automatiquement si vous :
 Ne définissez pas d'index.
 Entrez un index incorrect.
 Supprimez l'index.
 Modifiez l'index.
72
EIO0000001475 12/2017
Procédure
Exemples de codage
Fonction
Réseau
Instruction
RISING
0
LD %M0
RISING0
ST %Q0.0
FALLING
1
LD %I0.1
FALLING0
ST %Q0.7
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Vous pouvez insérer jusqu'à 32 instructions de chaque type.
Vous ne pouvez pas utiliser les fonctions RISING et FALLING immédiatement après l'une des
instructions suivantes :
 AND
 ANDN
 OR
 ORN
Chronogramme
Le diagramme suivant illustre la chronologie de l'exemple ci-dessus pour la période de scrutation
d'une tâche maître :
EIO0000001475 12/2017
73
Procédure
Instructions de comparaison
Introduction
Les opérateurs de comparaison sont utilisés pour comparer jusqu'à cinq opérandes avec trois
niveaux de parenthèses.
Ce tableau répertorie les différents types d'opérateurs de comparaison :
Opérateur
Fonction
>
Teste si Op1 est supérieur à Op2.
>=
Teste si Op1 est supérieur ou égal à Op2.
<
Teste si Op1 est inférieur à Op2.
<=
Teste si Op1 est inférieur ou égal à Op2.
=
Teste si Op1 est égal à Op2.
<>
Teste si Op1 est différent de Op2.
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des
expressions de comparaison en langage Liste d'instructions (voir page 27) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc comparaison.
Syntaxe des instructions de comparaison :
Opérateur
Syntaxe
>, >=, <, <=, =, <>
LD [Op1 opérateur Op2]
AND [Op1 opérateur Op2]
OR [Op1 opérateur Op2]
Le tableau suivant détaille les opérandes :
Type
Op1
Op2
Mots
%MWi, %KWi, %IW, %QWi,
%SWi, %BLK.x
Valeur immédiate, %MWi, %KWi,
%IW, %QW, %IWSi, %QWSi, %SWi,
%BLK.x, %MWi[%MWi], %KWi[%MWi]
Mots doubles
%MDi, %KDi
Valeur immédiate, %MDi, %KDi,
%MDi[%MWi], %KD[%MWi]
Mots à virgule flottante
%MFi, %KFi
Valeur immédiate à virgule flottante, %MFi,
%KFi, %MFi[%MWi], %KFi[%MWi]
NOTE : Les instructions de comparaison peuvent être indiquées entre parenthèses.
74
EIO0000001475 12/2017
Procédure
Exemples de codage
La comparaison est exécutée entre les crochets qui suivent les instructions LD, AND et OR. Le
résultat est 1 lorsque la comparaison demandée est vraie.
Exemples d'instructions de comparaison :
Réseau
Instruction
0
LD
AND
ST
%I0.2
[%MW10>100]
%Q0.3
1
LD
AND
ST
%M0
[%MW20<%KW35]
%Q0.4
2
LD
OR
ST
%I0.2
[%MF30>=%MF40]
%Q0.5
Exemple d'utilisation d'une instruction de comparaison entre parenthèses :
Réseau
Instruction
0
LD
AND(
OR
)
ST
%M0
[%MF20>10.0]
%I0.0
%Q0.1
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
EIO0000001475 12/2017
75
Procédure
Sous-chapitre 3.2
Traitement numérique
Traitement numérique
Objet de cette section
Cette section présente les instructions de traitement numérique.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
76
Page
Introduction aux instructions numériques
77
Instructions d'affectation
78
Affectation de chaînes de bits
79
Affectation de mots
81
Opérateurs arithmétiques sur des entrées
83
Instructions logiques
87
Instructions de décalage
89
Instruction de conversion BCD/binaire
91
Instructions de conversion de mot simple/double
93
EIO0000001475 12/2017
Procédure
Introduction aux instructions numériques
Présentation
En général, les instructions numériques s'appliquent aux mots de 16 bits et aux mots doubles de
32 bits. Elles apparaissent entre crochets. Si le résultat de l'opération logique précédente est vrai
(accumulateur booléen = 1), l'instruction numérique est exécutée. S'il est faux (accumulateur
booléen = 0), l'instruction numérique n'est pas exécutée et l'opérande reste inchangé.
EIO0000001475 12/2017
77
Procédure
Instructions d'affectation
Introduction
Les instructions d'affectation permettent de charger l'opérande 2 (Op2) dans l'opérande 1 (Op1).
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Syntaxe des instructions d'affectation :
Opérateur
Syntaxe
:=
[Op1: = Op2]
Op1 prend la valeur de Op2.
Les opérations d'affectation peuvent être exécutées sur les éléments suivants :
Chaînes de bits
 Mots
 Mots doubles
 Mot flottant
 Tables de mots
 Tables de mots doubles
 Tables de mots flottants
 Objets de sortie à train d'impulsions

78
EIO0000001475 12/2017
Procédure
Affectation de chaînes de bits
Introduction
Les opérations sont autorisées sur les chaînes de bits suivantes :
Chaîne de bits à chaîne de bits (exemple 1)
 Chaîne de bits à mot (exemple 2) ou mot double (indexé)
 Mot ou mot double (indexé) à chaîne de bits (exemple 3)
 Valeur immédiate à chaîne de bits

Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Syntaxe des affectations de chaînes de bits :
Opérateur
Syntaxe
:=
[Op1: = Op2]
Op1 prend la valeur de Op2.
Le tableau suivant détaille les opérandes :
Type
Op1
Mot, mot double %MWi,%QWi, %SWi
%MWi[%MWi], %MDi, %MDi[%MWi]
%Mi:L, %Qi:L, %Si:L, %Xi:L
%TMi.P, %Ci.P, %Ri.I, %Ri.O,
%FCi.P, %PLSi.P, %PWMi.P
%Ci.PD, %FCi.PD
Op2
Valeur immédiate,
%MWi, %KWi, %IW, %QWi, %IWSi,
%QWSi, %SWi,%BLK.x, %MWi[%MWi],
%KWi[%MWi], %MDi[%MWi],
%KDi[%MWi], %Mi:L,%Qi:L, %Si:L,
%Xi:L, %Ii:L
%TMi.P, %Ci.P, %Ri.I, %Ri.O,
%FCi.P, %PLSi.P, %PWMi.P
%Ci.PD, %FCi.PD
NOTE : L'abréviation %BLK.x (%C0.P, par exemple) est utilisée pour désigner n'importe quel mot
de bloc fonction.
EIO0000001475 12/2017
79
Procédure
Structure
Exemples d'affectations de chaînes de bits :
Réseau
Instruction
0
LD 1
[%Q0.0:8:=%M64:8]
1
LD %I0.2
[%MW100:=%M0:16]
2
LDR %I0.3
[%MW104:16:=%KW0]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Règles d'utilisation :
 Affectation d'une chaîne de bits à un mot : les bits de la chaîne sont transférés au mot en
commençant par la droite (premier bit de la chaîne vers le bit 0 du mot). Les bits de mot non
concernés par le transfert (longueur ≤ 16) sont mis à 0.
 Affectation d'un mot à une chaîne de bits : les bits du mot sont transférés en partant de la droite
(du bit 0 du mot vers le premier bit de la chaîne).
80
EIO0000001475 12/2017
Procédure
Affectation de mots
Introduction
Les opérations d'affectation peuvent être exécutées sur les mots et mots doubles suivants :
Mot (indexé) à mot (exemple 2) (indexé ou non)
 Mot double (indexé) à mot double (indexé ou non)
 Valeur entière immédiate à mot (exemple 3) ou mot double (indexé ou non)
 Chaîne de bits à mot ou mot double
 Valeur flottante (indexée ou non) à valeur flottante (indexée ou non)
 Mot ou mot double à chaîne de bits
 Valeur flottante immédiate à valeur flottante (indexée ou non)

Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Syntaxe des affectations de mots :
Opérateur
Syntaxe
:=
[Op1: = Op2]
Op1 prend la valeur de Op2.
Le tableau suivant détaille les opérandes :
Type
Op1
Op2
Mot, mot double,
chaîne de bits
%BLK.x, %MWi, %QWi, %SWi
%MWi[MWi], %MDi,
%MDi[%MWj], %Mi:L, %Qi:L,
%Si:L, %Xi:L
Valeur immédiate,
%MWi, %KWi, %IW, %QWi, %IWSi,
QWSi, %SWi, %MWi[MWi],
%KWi[MWi], %MDi, %MDi[%MWj],
%KDi, %KDi[MWj], %Mi:L, %Qi:L,
%Si:L, %Xi:L, %Ii:L
Valeur flottante
%MFi, %MFi[%MWj]
Valeur flottante immédiate,
%MFi, %MFi[%MWj], %KFi,
%KFi[%MWj]
NOTE : L'abréviation %BLK.x (R3.I, par exemple) permet de désigner n'importe quel mot de bloc
fonction. Pour les chaînes de bits %Mi:L, %Si:L et %Xi:L, l'adresse de base du premier bit de la
chaîne doit être un multiple de 8 (0, 8, 16, ..., 96, etc.).
EIO0000001475 12/2017
81
Procédure
Structure
Exemples d'affectations de mots :
Réseau
Instruction
0
LD 1
[%SW112:=%MW100]
1
LD %I0.2
[%MW0[%MW10]:=%KW0[%MW20]]
2
LD %I0.3
[%MW10:=100]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
82
EIO0000001475 12/2017
Procédure
Opérateurs arithmétiques sur des entrées
Introduction
Les opérateurs arithmétiques permettent d'effectuer des opérations arithmétiques entre
deux opérandes d'entiers ou sur un opérande d'entier.
Ce tableau répertorie les différents types d'opérateurs arithmétiques :
Opérateur
Fonction
+
Addition de 2 opérandes
-
Soustraction de 2 opérandes
*
Multiplication de 2 opérandes
/
Division de 2 opérandes
REM
Reste de la division de 2 opérandes
SQRT
Racine carrée d'un opérande
INC
Incrémentation d'un opérande
DEC
Décrémentation d'un opérande
ABS
Valeur absolue d'un opérande
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Syntaxe des instructions arithmétiques :
Opérateur
Syntaxe
+,-,*,/,REM
[Op1: = Op2 opérateur Op3]
INC, DEC
[opérateur Op1]
SQRT (1)
[Op1: = SQRT(Op2)]
ABS (1)
[Op1: = ABS(Op2)]
EIO0000001475 12/2017
83
Procédure
Le tableau suivant détaille les opérandes :
Type
Op1
Op2 et Op3(1)
Mots
%MWi, %QWi, %SWi, %BLK.x(2)
Valeur immédiate, %MWi, %KWi, %IWi,
%MDi, %BLK.x
Immediate value, %MDi, %KDi,
Mots doubles
%QWi, %IWSi, %QWSi, %SWi, %BLK.x(2)
%BLK.x(2)
(1) Avec cet opérateur, Op2 ne peut pas être une valeur immédiate. La fonction ABS n'est utilisable qu'avec
des mots doubles (%MD et %KD) et flottants (%MF et %KF). Par conséquent, Op1 et Op2 doivent être des
mots doubles ou flottants.
(2) %BLK.x représente tous les objets de bloc.
Structure
Exemples d'instructions arithmétiques :
Réseau
Instruction
0
LD %M0
[%MW0:=%MW10+10]
1
LD %I0.2
[%MW0:=SQRT(%MW10)]
2
LDR %I0.3
[%MW10:=32767]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Cas particuliers
Addition
 Débordement pendant l'opération sur mots
Si le résultat dépasse la capacité du mot de résultat, le bit %S18 (débordement) est mis à 1 et
le résultat n'est pas significatif (voir le réseau 1 de l'exemple d'application (voir page 86)). Le
programme utilisateur gère le bit %S18.
NOTE : Pour les mots doubles, les limites sont -2 147 483 648 et 2 147 483 647.
Multiplication
Débordement pendant l'opération
Si le résultat dépasse la capacité du mot de résultat, le bit %S18 (débordement) est mis à 1 et
le résultat n'est pas significatif.

84
EIO0000001475 12/2017
Procédure
Division / reste
 Division par 0
Si le diviseur est 0, la division est impossible et le bit système %S18 est mis à 1. Le résultat est
alors incorrect.
 Débordement pendant l'opération
Si le quotient de la division dépasse la capacité du mot de résultat, le bit système %S18 est mis
à 1.
Calcul de la racine carrée
 Débordement pendant l'opération
Le calcul de la racine carrée est uniquement effectué sur les valeurs positives. Le résultat est,
par conséquent, toujours positif. Si l'opérande de racine carrée est négatif, le bit système %S18
est mis à 1 et le résultat est incorrect.
Certaines erreurs mathématiques parmi celles qui sont détectées peuvent avoir un impact non
négligeable sur l'exécution de votre application. Il vous incombe de rechercher ces erreurs
potentielles et de programmer des instructions permettant de maîtriser l'exécution de votre
application si une ou plusieurs erreurs de ce type survenaient. L'impact de ces erreurs détectées
dépend de la configuration, de l'équipement utilisé et des instructions de programme exécutées
avant et après la détection d'erreurs potentielles ou réelles.
AVERTISSEMENT
FONCTIONNEMENT IMPREVU DE L’EQUIPEMENT



Ecrivez des instructions de programmation pour tester la validité des opérandes destinés à
être utilisés dans des opérations mathématiques.
Evitez d'utiliser des opérandes de différents types de données dans des opérations
mathématiques.
Surveillez systématiquement les bits système affectés, à la recherche de résultats
mathématiques incorrects.
Le non-respect de ces instructions peut provoquer la mort, des blessures graves ou des
dommages matériels.
NOTE : Le programme utilisateur gère les bits système %S17 et %S18. Le contrôleur les met à 1.
Ils doivent être remis à 0 par le programme pour être réutilisés (voir l'exemple, page précédente).
EIO0000001475 12/2017
85
Procédure
Exemple d'application
Débordement pendant l'addition :
Réseau
Instruction
0
LD %M0
[%MW0:=%MW1+%MW2]
1
LDN %S18
[%MW10:=%MW0]
2
LD %S18
[%MW10 :=32767]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Si %MW1 = 23 241 et %MW2 = 21 853, le résultat (45 094) ne peut pas être exprimé dans un mot de
16 bits signé. Par conséquent, le bit %S18 est mis à 1 et la valeur de %MW0 (-20 442) est incorrecte.
Dans cet exemple, la valeur de ce mot est fixée à 32 767 lorsque le résultat est supérieur à cette
valeur.
86
EIO0000001475 12/2017
Procédure
Instructions logiques
Introduction
Les opérateurs logiques permettent d'effectuer une opération logique entre deux opérandes de
mot ou, dans le cas d'un opérateur NOT logique, sur un opérande de mot.
Le tableau suivant répertorie les différents types d'instructions logiques :
Instruction
Fonction
AND
AND (bit à bit) entre deux opérandes
OR
OR logique (bit à bit) entre deux opérandes
XOR
OR exclusif (bit à bit) entre deux opérandes
NOT
Complément logique (bit à bit) d'un opérande
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Syntaxe des instructions logiques :
Opérateur
Syntaxe
Op1
Op2 et Op3
AND, OR, XOR
[Op1: = Op2 opérateur Op3]
NOT
[Op1:=NOT(Op2)]
%MWi, %QWi, %SWi,
%BLK.x
Valeur immédiate (1),
%MWi, %KWi, %IWi,
%QWi, %IWSi, %QWSi,
%SWi, %BLK.x
(1) Avec NOT, Op2 ne peut pas être une valeur immédiate.
Structure
Exemples d'instructions logiques :
Réseau
Instruction
0
LD %M0
[%MW0:=%MW10 AND 16#00FF]
1
LD 1
[%MW0:=%KW5 OR %MW10]
2
LD %I0.3
[%MW102:=NOT(%MW100)]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
EIO0000001475 12/2017
87
Procédure
Exemple d'application
Instruction AND logique :
[%MW15:=%MW32 AND %MW12]
Lorsque %MW32 = 0001 1011 (binaire) (27 (décimal)) et %MW12 = 0011 0110 (binaire)
(54 (décimal)), le résultat est %MW15 = 0001 0010 (binaire) (18 (décimal)).
88
EIO0000001475 12/2017
Procédure
Instructions de décalage
Introduction
Les instructions de décalage déplacent les bits d'un opérande d'un nombre spécifié de positions
vers la droite ou vers la gauche.
Le tableau suivant répertorie les différents types d'instructions de décalage :
Instruction
Fonction
Décalage logique
SHL(op2,n)
Décalage logique de n positions
vers la gauche.
SHR(op2,n)
Décalage logique de n positions
vers la droite.
Décalage circulaire
ROL(op2,n)
Décalage circulaire de n positions
vers la gauche.
ROR(op2,n)
Décalage circulaire de n positions
vers la droite.
n Valeur immédiate entière de :
 mot : 1 à 16 compris,
 mot double : 1 à 32 compris.
NOTE : le bit système %S17 indique la valeur du dernier bit éjecté.
EIO0000001475 12/2017
89
Procédure
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Syntaxe des instructions de décalage :
Opérateur
Syntaxe
SHL, SHR
[Op1: = opérateur (Op2,n)]
ROL, ROR
n Valeur immédiate entière de :
 mot : 1 à 16 compris,
 mot double : 1 à 32 compris.
Le tableau suivant détaille les opérandes :
Types
Op1
Op2
Mots
%MWi, %QWi, %SWi
%BLK.x
%MWi, %KWi, %IWi, %QWi, %IWSi,
%QWSi, %SWi, %BLK.x
Mots doubles
%MDi
%BLK.x
%MDi, %KDi
%BLK.x
Structure
Exemples d'instructions de décalage :
Réseau
Instruction
0
LDR %I0.1
[%MW0:=SHL(%MW10,5)]
1
LDR %I0.2
[%MW10:=ROR(%KW9,8)]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
90
EIO0000001475 12/2017
Procédure
Instruction de conversion BCD/binaire
Introduction
Les instructions de conversion permettent d'effectuer la conversion entre les différentes représentations numériques.
Ce tableau répertorie les différents types d'instruction de conversion BCD/binaire :
Instruction
Fonction
BTI
Conversion BCD/binaire
ITB
Conversion binaire/BCD
Analyse du code BCD
Le codage BCD (Binary Coded Decimal - décimal codé binaire) représente les décimaux (entre 0
et 9) par un code à quatre bits binaires. Un objet mot de 16 bits peut ainsi contenir un nombre à
quatre chiffres (0000 à 9999) ; et un objet mot double de 32 bits, un nombre à huit chiffres.
Lors d'une conversion, le bit système %S18 est mis à 1 si la valeur n'est pas BCD. Ce bit doit être
testé et remis à 0 par le programme.
Représentation BCD des décimaux :
Décimal 0
1
2
3
4
5
6
7
8
9
BCD
0001
0010
0011
0100
0101
0110
0111
1000
1001
0000
Exemples :
Le mot %MW5 exprime la valeur BCD "2450" qui correspond à la valeur binaire 0010 0100 0101
0000.
 Le mot %MW12 exprime la valeur décimale "2450" qui correspond à la valeur binaire 0000 1001
1001 0010.

Le mot %MW5 est converti en mot %MW12 à l'aide de l'instruction BTI.
Le mot %MW12 est converti en mot %MW5 à l'aide de l'instruction ITB.
EIO0000001475 12/2017
91
Procédure
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Syntaxe des instructions de conversion BCD/binaire :
Opérateur
Syntaxe
BTI, ITB
[Op1: = opérateur (Op2)]
Le tableau suivant détaille les opérandes :
Types
Op1
Op2
Mots
%MWi, %QWi, %SWi
%BLK.x
%MWi, %KWi, %IWi, %QWi, %IWSi,
%QWSi, %SWi, %BLK.x
Mot double
%MDi
%BLK.x
%MDi, %KDi
%BLK.x
Structure
Exemples d'instructions de conversion BCD/binaire :
Réseau
Instruction
0
LD %M0
[%MW0:=BTI(%MW10)]
1
LD %I0.2
[%MW10:=ITB(%KW9)]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Exemple d'application
L'instruction BTI permet de traiter une valeur de consigne dans les entrées du contrôleur via des
roues codeuses en BCD.
L'instruction ITB permet d'afficher des valeurs numériques (résultat d'un calcul, valeur courante
d'un bloc fonction, par exemple) sur des afficheurs codés en BCD.
92
EIO0000001475 12/2017
Procédure
Instructions de conversion de mot simple/double
Introduction
Le tableau suivant décrit les instructions de conversion entre des mots simples et doubles :
Instruction
Fonction
LW
Extrait l'octet de poids faible d'un mot double vers un mot.
HW
Extrait l'octet de poids fort d'un mot double vers un mot.
CONCATW
Concatène deux mots pour créer un mot double.
DWORD
Convertit un mot de 16 bits en un mot double de 32 bits.
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Syntaxe des instructions de conversion de mots simples/doubles :
Opérateur
Syntaxe
Op1
Op2
Op3
LW, HW
Op1 = opérateur (Op2)
%MWi
%MDi, %KDi,
%BLK.x
[-]
CONCATW
Op1 = opérateur (Op2, Op3))
%MDi, %BLK.x
Valeur %MWi,
%KWi, immédiate
Valeur %MWi,
%KWi, immédiate
DWORD
Op1 = opérateur (Op2)
%MDi, %BLK.x
%MWi, %KWi
[-]
Structure
Exemples d'instructions de conversion de mots simples/doubles :
Réseau
Instruction
0
LD %M0
[%MW0:=HW(%MD10)]
1
LD %I0.2
[%MD10:=DWORD(%KW9)]
2
LD %I0.3
[%MD11:=CONCATW(%MW10,%MW5)]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
EIO0000001475 12/2017
93
Procédure
Sous-chapitre 3.3
Programme
Programme
Objet de cette section
Cette section présente les instructions de programme.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
Instructions END
95
Instructions NOP
97
Instructions de saut
94
Page
98
Eléments conditionnels
100
Eléments de boucle
102
Instructions de sous-programme
104
EIO0000001475 12/2017
Procédure
Instructions END
Introduction
Les instructions END définissent la fin de l'exécution de la scrutation d'un programme.
END, ENDC et ENDCN
Quatre instructions END différentes sont disponibles :
END : fin de programme inconditionnelle.
 ENDC : fin de programme si le résultat booléen de l'instruction de test précédente est 1.
 ENDCN : fin de programme si le résultat booléen de l'instruction de test précédente est 0.
 ENDT : fin de réseau de transitions dans un programme Grafcet (SFC) (valable dans un réseau
de transitions exclusivement).

Par défaut (en mode Normal), les sorties sont mises à jour et la scrutation suivante débute dès la
fin du programme.
Si la scrutation est périodique, les sorties sont mises à jour et la scrutation suivante débute dès
que la période écoulée.
L'instruction END termine le niveau actuel :
Si elle est activée dans une sous-routine, une fonction définie par l'utilisateur ou un bloc fonction
défini par l'utilisateur, elle y met fin et retourne au programme appelant.
 Si elle est activée dans une tâche maître, périodique ou d'événement, elle met fin à la tâche
présente.

EIO0000001475 12/2017
95
Procédure
Exemples
Exemple d'instruction END :
Réseau
Instruction
0
LD %M1
ST %Q0.1
1
LD %M2
ST %Q0.2
2
END
Exemple d'instruction END :
Réseau
Instruction
0
LD %I0.0
ST %Q0.0
1
LD %I0.1
ST %Q0.1
2
LD %I0.2
ENDC
3
LD %I0.3
ST %Q0.2
4
END
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
96
EIO0000001475 12/2017
Procédure
Instructions NOP
Introduction
Les instructions NOP n'effectuent aucune opération. Utilisez-les pour "réserver" des lignes d'un
programme afin d'insérer ultérieurement des instructions, sans modifier les numéros de ligne.
EIO0000001475 12/2017
97
Procédure
Instructions de saut
Introduction
Les instructions de saut interrompent immédiatement l'exécution d'un programme et la reprennent
à partir de la ligne de programme contenant l'étiquette %Li (i = numéro de module maximum).
JMP, JMPC et JMPCN
Trois instructions de saut sont disponibles :
JMP : saut de programme inconditionnel ;
 JMPC : saut de programme si le résultat booléen de la logique précédente est 1 ;
 JMPCN : saut de programme si le résultat booléen de la logique précédente est 0.

Exemples
Exemples d'instructions de saut :
Réseau
Instruction
0
LD
JMPC
%M15
%L8
1
LD
ST
JMPC
[%MW24<%MW12]
%Q0.3
%L12
2
%L8:
LD
AND
ST
JMPC
%M12
%M13
%M12
%L12
3
LD
S
%M11
%Q0.0
4
%L12:
LD
%I0.0
ST
%Q0.4
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
98
EIO0000001475 12/2017
Procédure
Instructions




Les instructions de saut sont interdites entre parenthèses et ne doivent pas être placées entre
les instructions AND, OR et une parenthèse fermante ")".
L'étiquette ne peut être placée que devant une instruction LD, LDN, LDR, LDF ou BLK.
Le numéro de l'étiquette %Li doit être défini une seule fois dans un programme.
Le saut de programme est effectué vers une ligne de programmation en amont ou en aval.
Lorsque le saut est en amont, le temps de scrutation doit être contrôlé. Un temps de scrutation
trop long peut provoquer le déclenchement du chien de garde.
EIO0000001475 12/2017
99
Procédure
Eléments conditionnels
Description
Les éléments conditionnels vous permettent de coder des conditions dans votre programme. Les
éléments ne peuvent être programmés qu'en mode hors ligne.
Cette fonction contient les trois éléments suivants :
IF
 ELSE
 ENDIF

Vous pouvez insérer un élément par réseau.
NOTE : L'application doit être configurée avec un niveau fonctionnel d'au moins Niveau 6.0.
Nombre maximum de d'éléments
Le nombre maximum d'éléments est de 128 moins le nombre de %L déclarés dans votre
application.
Description de l'élément
Elément
Instruction IL
IF
IF0...THEN0
Doit se trouver au début d'un réseau.
L'élément THEN est ajouté automatiquement. Vous
ne pouvez pas modifier cet élément.
ELSE
ELSE0
Uniquement si un élément IF est défini dans un
réseau précédent.
Doit se trouver au début d'un réseau.
ENDIF
ENDIF0
Doit se trouver à la fin d'un réseau. Vous ne pouvez
pas insérer d'autres éléments SoMachine Basic
dans le même réseau.
100
Schéma à contacts
Description
EIO0000001475 12/2017
Procédure
Configuration d'une instruction de condition
Etape
Action
1
Dans un réseau vide, insérez l'élément IF en cliquant sur
→
→IF.
2
Vous pouvez éventuellement modifier l'index.
Si vous modifiez l'index d'un élément, vous devez affecter le même index aux autres éléments.
Les éléments de même index doivent se trouver dans le même POU.
3
Configurez votre programme.
4
Insérez éventuellement l'élément ELSE en cliquant sur
→
→ELSE.
5
Dans le dernier réseau, insérez l'élément ENDIF en cliquant sur
EIO0000001475 12/2017
→
→ENDIF.
101
Procédure
Eléments de boucle
Description
Les éléments de boucle vous permettent de coder une séquence d'instructions dans votre
programme. Les éléments ne peuvent être programmés qu'en mode hors ligne.
Cette fonction contient les deux éléments suivants :
FOR
 ENDFOR

Vous pouvez insérer un élément par réseau.
NOTE : L'application doit être configurée avec un niveau fonctionnel (voir SoMachine Basic, Guide
d'utilisation) d'au moins Niveau 6.0.
Nombre maximum de d'éléments
Le nombre maximum d'éléments est de 128 moins le nombre de %L déclarés dans votre
application.
Description de l'élément
Elément
Instruction IL
FOR
FOR0
Schéma à contacts
Description
Doit se trouver au début d'un réseau.
Cliquez sur
ENDFOR
ENDFOR0
pour le configurer.
Doit se trouver à la fin d'un réseau. Vous ne pouvez
pas insérer d'autres éléments SoMachine Basic
dans le même réseau.
Configuration d'une boucle
Etape
Action
1
Dans un réseau vide, insérez l'élément FOR en cliquant sur
2
→
→FOR.
Vous pouvez éventuellement modifier l'index.
Si vous modifiez l'index d'un élément, vous devez affecter le même index à l'autre élément.
Les éléments de même index doivent se trouver dans le même POU.
3
Cliquez sur
pour configurer l'élément FOR.
Résultat : la fenêtre Assistant FOR s'affiche.
4
Dans le dernier réseau, insérez l'élément ENDFOR en cliquant sur
ENDFOR.
102
→
→
EIO0000001475 12/2017
Procédure
Configuration de l'élément FOR
Libellé
Description
Compteur de boucles
Saisissez une variable %MWx.
Valeur initiale
Saisissez une variable %MWx ou une valeur comprise entre -32768 et 32767.
Signe
 <
 <=
 =
 >=
 >
 <>
Valeur de fin
Saisissez une variable %MWx ou une valeur comprise entre -32768 et 32767.
Etape d'incrémentation Saisissez une variable %MWx ou une valeur comprise entre -32768 et 32767.
EIO0000001475 12/2017
103
Procédure
Instructions de sous-programme
Introduction
Les instructions de sous-programme obligent un programme à exécuter un sous-programme puis
à revenir au programme principal, au point d'appel du sous-programme.
Procédure
Un sous-programme est créé dans un POU libre. Pour plus d'informations sur la création d'un POU
libre et la définition du numéro du sous-programme, consultez la section POU libres
(voir SoMachine Basic, Guide d'utilisation). Pour plus d'informations sur la gestion des POU avec
une tâche et des réseaux, consultez la section Gestion des POU (voir SoMachine Basic, Guide
d'utilisation).
Appel d'un sous-programme en trois étapes :
1 L'instruction SRn appelle le sous-programme référencé par un POU libre SRn, si le résultat de
l'instruction booléenne précédente est 1.
2 Le sous-programme est référencé par un POU libre SRn, où n est le nombre de sousprogrammes.
3 L'instruction de sous-programme doit être écrite dans un POU libre indépendant du programme
principal.
Pour plus d'informations sur les sous-programmes, consultez la section Création d'une tâche
périodique (voir SoMachine Basic, Guide d'utilisation).
104
EIO0000001475 12/2017
Procédure
Exemples
Exemple d'instructions contenant un sous-programme :
Réseau
Instruction
0
LD
AND
ST
%M15
%M5
%Q0.0
1
LD
SR1
[%MW24>%MW12]
2
LD
AND
ST
END
%I0.4
%M13
%Q0.1
Exemple d'instruction de sous-programme (SR1) :
Réseau
Instruction
0 (SR1)
LD
ST
%I0.0
%Q0.0
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Consignes



Un sous-programme ne peut pas appeler un autre sous-programme. Toute tentative d'appeler
un sous-programme dans un POU libre génère une erreur détectée de compilation.
Les instructions de sous-programme sont interdites entre parenthèses et ne doivent pas être
placées entre les instructions AND, OR et une parenthèse fermante « ) ».
Soyez prudent lorsqu'une instruction d'affectation est suivie d'un appel de sous-programme en
langage IL. En effet, le sous-programme risque de modifier le contenu de l'accumulateur
booléen. Au retour, sa valeur risque donc d'être différente de celle qu'il avait avant l'appel.
EIO0000001475 12/2017
105
Procédure
Sous-chapitre 3.4
Virgule flottante
Virgule flottante
Objet de cette section
Cette section décrit les instructions avancées à virgule flottante.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
106
Page
Instructions arithmétiques sur les objets à virgule flottante
107
Instructions trigonométriques
110
Instructions de conversion d'angle
112
Instructions de conversion d'entiers/nombres à virgule flottante
113
EIO0000001475 12/2017
Procédure
Instructions arithmétiques sur les objets à virgule flottante
Introduction
Ces instructions permettent d'effectuer une opération arithmétique entre deux opérandes à virgule
flottante ou sur un opérande à virgule flottante :
Instruction
Objectif
+
Addition de 2 opérandes
-
Soustraction de 2 opérandes
*
Multiplication de 2 opérandes
/
Division de 2 opérandes
LOG
Logarithme en base 10
LN
Logarithme népérien
SQRT
Racine carrée d'un opérande
ABS
Valeur absolue d'un opérande
TRUNC
Partie entière d'une valeur à virgule flottante
EXP
Exponentiel naturel
EXPT
Puissance d'un entier par un réel
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Opérateurs et syntaxe des instructions arithmétiques sur une valeur à virgule flottante :
Opérateurs
Syntaxe
+, - *, /
Op1:= Op2 opérateur Op3
SQRT, ABS, TRUNC, LOG, EXP, LN
Op1:= opérateur (Op2)
EXPT
Op1:= opérateur (Op2,Op3)
EIO0000001475 12/2017
107
Procédure
Opérandes des instructions arithmétiques sur des nombres à virgule flottante :
Opérateurs
Op1
Op2
Op3
+, - *, /
%MFi
%MFi, %KFi, valeur
immédiate
%MFi, %KFi, valeur
immédiate
SQRT, ABS, LOG,
EXP, LN
%MFi
%MFi, %KFi
[-]
TRUNC
%MFi, %MDi
%MFi, %KFi
[-]
EXPT
%MFi
%MFi, %KFi
%MWi, %KWi, valeur
immédiate
Remarque : SoMachine Basic empêche l'utilisation de la fonction avec %MWi comme Op1.
Structure
Exemple d'instruction arithmétique :
Réseau
Instruction
0
LD %M0
[%MF0:=%MF10+129.7]
1
LD %I0.2
[%MF1:=SQRT(%MF10)]
2
LDR %I0.3
[%MF2:=ABS(%MF20)]
3
LDR %I0.4
[%MF3:=TRUNC(%MF2)]
4
LD %M1
[%MF4:=LOG(%MF10)]
5
LD %I0.5
[%MF5:=LN(%MF20)]
6
LD %I0.0
[%MF6:=EXP(%MF30)]
7
LD %I0.1
[%MF7:=EXPT(%MF40,%MW52)]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
108
EIO0000001475 12/2017
Procédure
Règles d'utilisation



Les opérations sur les valeurs à virgule flottante et les entiers ne peuvent pas être mélangées
directement. Les opérations de conversion (voir page 112) assurent la conversion dans l'un ou
l'autre de ces formats.
Le bit système %S18 est géré de la même façon que les opérations sur des entiers
(voir page 112). Le mot %SW17 indique la cause de l'erreur détectée.
Lorsque l'opérande de la fonction est un nombre incorrect (par exemple, le logarithme d'un
nombre négatif), il produit un résultat indéterminé ou infini et met le bit %S18 à 1. Le mot %SW17
indique la cause de l'erreur détectée.
NOTE : Pour l'instruction TRUNC, le bit système %S17 n'est pas affecté.
Exemples d'application de l'instruction TRUNC avec %MDi
Le tableau ci-dessous fournit des exemples d'instruction TRUNC lorsque %MDi sert à stocker le
résultat :
Exemple
Résultat
TRUNC(3.5)
3
TRUNC(324.18765)
324
TRUNC(927.8904)
927
TRUNC(-7.7)
-7
TRUNC(45.678E+20)
2 147 483 647 (mot double signé maximum) (1)
%S18 est mis à 1.
TRUNC(-94.56E+13)
- 2 147 483 648 (mot double signé minimum) (1)
%S18 est mis à 1.
(1) Cet exemple s'applique à l'instruction TRUNC lorsqu'elle est utilisée avec %MDi. Lorsqu'elle est utilisée
avec %MFi, l'instruction TRUNC n'a pas de dépassement et n'a donc pas de limite maximum/minimum.
EIO0000001475 12/2017
109
Procédure
Instructions trigonométriques
Introduction
Ces instructions permettent de réaliser des opérations trigonométriques :
SIN
Sinus d'un angle exprimé en radians
ASIN
COS
Cosinus d'un angle exprimé en radians
ACOS
TAN
Tangente d'un angle exprimée en radians
ATAN
Arc sinus (résultat entre
et
Arc cosinus (résultat entre 0 et
Arc tangente (résultat entre
)
)
et
)
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Opérateurs, opérandes et syntaxe des instructions pour des opérations trigonométriques
Opérateurs
Syntaxe
Op1
Op2
SIN, COS, TAN,
ASIN, ACOS, ATAN
Op1:= opérateur (Op2)
%MFi
%MFi, %KFi
Structure
Exemple d'instructions trigonométriques (Trigonometric) :
Réseau
Instruction
0
LD %M0
[%MF0:=SIN(%MF10)]
1
LD %I0.0
[%MF1:=TAN(%MF20)]
2
LD %I0.3
[%MF2:=ATAN(%MF30)]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
110
EIO0000001475 12/2017
Procédure
Règles d'utilisation

Lorsque l'opérande de la fonction est un nombre incorrect (par exemple, l'arc cosinus d'un
nombre supérieur à 1), il produit un résultat indéterminé ou infini et met le bit %S18 à 1. Le mot
%SW17 indique la cause de l'erreur détectée.

Les fonctions SIN/COS/TAN admettent en paramètre un angle entre
et
leur précision décroît progressivement pour les angles en dehors de l'intervalle entre
en raison de l'imprécision apportée par le modulo
toute opération.
EIO0000001475 12/2017
, mais
et
effectué sur le paramètre avant
111
Procédure
Instructions de conversion d'angle
Introduction
Ces instructions permettent de réaliser des opérations de conversion :
DEG_TO_RAD
Conversion de degrés en radians. Le résultat est la valeur de l'angle compris entre 0 et
.
RAD_TO_DEG Conversion d'un angle exprimé en radians. Le résultat est la valeur de l'angle compris entre 0
et 360 degrés.
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Opérateurs, opérandes et syntaxe des instructions de conversion :
Opérateurs
Syntaxe
Op1
Op2
DEG_TO_RAD
RAD_TO_DEG
Op1:= opérateur (Op2)
%MFi
%MFi, %KFi
Structure
Exemple d'instructions de conversion :
Réseau
Instruction
0
LD %M0
[%MF0:=DEG_TO_RAD(%MF10)]
1
LD %M2
[%MF2:=RAD_TO_DEG(%MF20)]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Règles d'utilisation
L'angle à convertir doit être compris entre -737 280,0 et +737 280,0 (pour une conversion
DEG_TO_RAD) ou entre
et
(pour une conversion RAD_TO_DEG).
Pour les valeurs situées hors de ces plages, le résultat affiché sera +1.#QNAN, les bits %S18 et
%SW17:X0 étant mis à 1.
112
EIO0000001475 12/2017
Procédure
Instructions de conversion d'entiers/nombres à virgule flottante
Introduction
Quatre instructions de conversion sont proposées :
INT_TO_REAL
Conversion d'un mot entier en valeur flottante
DINT_TO_REAL
Conversion d'un mot double (entier) en valeur flottante
REAL_TO_INT
Conversion d'une valeur flottante en mot entier (le résultat étant la valeur algébrique la
plus proche)
REAL_TO_DINT
Conversion d'une valeur flottante en mot double entier (le résultat étant la valeur
algébrique la plus proche)
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Opérateurs et syntaxe (conversion d'un mot entier en valeur flottante) :
Opérateurs
Syntaxe
INT_TO_REAL
Op1=INT_TO_REAL(Op2)
Opérandes (conversion d'un mot entier en valeur flottante) :
Op1
Op2
%MFi
%MWi,%KWi
Exemple : conversion d'un mot entier en valeur flottante : 147 en 1,47e+02.
Opérateurs et syntaxe (conversion d'un mot double entier en valeur flottante) :
Opérateurs
Syntaxe
DINT_TO_REAL
Op1=DINT_TO_REAL(Op2)
Opérandes (conversion d'un mot double entier en valeur flottante) :
Op1
Op2
%MFi
%MDi,%KDi
Exemple : conversion d'un mot entier en valeur flottante : 68 905 000 en 6,8905e+07.
EIO0000001475 12/2017
113
Procédure
Opérateurs et syntaxe (conversion d'une valeur flottante en mot entier ou double entier) :
Opérateurs
Syntaxe
REAL_TO_INT
Op1=operator(Op2)
REAL_TO_DINT
Opérateurs (conversion d'une valeur flottante en mot entier ou double entier) :
Type
Op1
Op2
Mots
%MWi
%MFi, %KFi
Mots doubles
%MDi
%MFi, %KFi
Exemple :
Conversion d'une valeur flottante en mot entier : 5978,6 en 5979
 Conversion d'une valeur flottante en mot double entier : 1 235 978,6 en 1 235 979

NOTE : Si, lors d'une conversion réel vers entier (ou réel vers entier mot double), la valeur flottante
est en dehors des limites du mot (ou du mot double), le bit %S18 est défini sur 1.
Structure
Exemple d'instruction de conversion d'entier/valeur flottante :
Réseau
Instruction
0
LD 1
[%MF0:=INT_TO_REAL(%MW10)]
1
LD %I0.8
[%MD2:=REAL_TO_DINT(%MF9)]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Précision d'arrondi
La norme IEEE 754 définit 4 modes d'arrondi pour les opérations sur les valeurs flottantes.
Le mode utilisé par les instructions ci-dessus est le mode "arrondi au plus près" :
"si les valeurs représentables les plus proches sont à égale distance du résultat théorique, la
valeur fournie sera celle dont le bit de poids faible est égal à 0".
En fait, la valeur va être arrondie au nombre supérieur ou inférieur, mais pas au nombre pair.
Par exemple :
Arrondi de la valeur 10,5 à 10.
 Arrondi de la valeur 11,5 à 12.

114
EIO0000001475 12/2017
Procédure
Sous-chapitre 3.5
ASCII
ASCII
Objet de cette section
Cette section décrit les instructions avancées d'ASCII.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
Page
Instructions ROUND
116
Instructions de conversion ASCII/entier
118
Instructions de conversion entier/ASCII
120
Instruction de conversion ASCII/valeur flottante
122
Instructions de conversion valeur flottante/ASCII
124
Instructions de conversion ASCII/mot double
126
Instructions de conversion mot double/ASCII
128
EIO0000001475 12/2017
115
Procédure
Instructions ROUND
Introduction
L'instruction ROUND arrondit une représentation flottante stockée dans une chaîne ASCII.
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Pour l'instruction ROUND, utilisez la syntaxe : Op1 := ROUND( Op2,Op3 ).
Par exemple :
[%MW0:7:=ROUND(%MW8,4)]
Paramètres
Le tableau ci-dessous décrit les paramètres de la fonction ROUND :
Paramètres
Description
Op1
%MW qui stocke le résultat.
Op2
%MW qui contient la valeur flottante à arrondir.
Op3
Nombre de chiffres significatifs requis pour arrondir.
Entier de 1 à 8
Règles d'utilisation
Les règles de l'instruction ROUND sont les suivantes :
L'opérande est toujours arrondi à la valeur inférieure.
 Le caractère de fin de la chaîne de l'opérande est utilisé comme caractère de fin de la chaîne
de résultat.
 Il peut s'agir de tout caractère ASCII non compris dans l'intervalle [0 - 9] ([16#30 - 16#39]), à
l'exception des caractères suivants :
 le point (.) (16#2E) ;
 le signe moins '-' (16#2D) ;
 le signe plus '+' (16#2B) ;
 l'exposant 'e' ou 'E' (16#65 ou 16#45).



116
Le résultat et l'opérande ne doivent pas compter plus de 13 octets : la taille maximum d'une
chaîne ASCII est de 13 octets.
La notation scientifique n'est pas autorisée.
EIO0000001475 12/2017
Procédure
Cas particuliers
Le logiciel vérifie la syntaxe. Les exemples suivants risquent d'entraîner des erreurs de syntaxe :
Syntaxe incorrecte
Syntaxe correcte
%MW10:= ROUND(%MW1,4)
":7" manquant dans le résultat
%MW10:7 := ROUND(%MW1,4)
%MW10:13:= ROUND(%MW1,4)
%MW10 : n où n ≠ 7 est incorrect
%MW10:7 := ROUND(%MW1,4)
Exemple d'application
Ce tableau montre des exemples de l'instruction ROUND :
Exemple
Résultat
ROUND("987654321", 5)
"987650000"
ROUND("-11.1", 8)
"-11.1"
ROUND("NAN")
"NAN"
EIO0000001475 12/2017
117
Procédure
Instructions de conversion ASCII/entier
Introduction
L'instruction de conversion ASCII/entier convertit une chaîne ASCII en une valeur entière.
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Pour les instructions de conversion ASCII/entier, respectez la syntaxe suivante :
Op1 := ASCII_TO_INT( Op2 )
Par exemple :
[%MW0:=ASCII_TO_INT(%MW8)]
L'instruction lit jusqu'à quatre objets de mot d'Op2, les convertit au format d'entier et stocke le
résultat dans Op1.
Paramètres
Le tableau suivant décrit les paramètres de la fonction de conversion ASCII/entier :
Paramètres
Description
Op1
%MW qui stocke le résultat
Op2
%MW ou %KW
Règles d'utilisation
Les règles de conversion ASCII/entier sont les suivantes :
Op2 doit être compris entre -32 768 et 32 767.
 La fonction lit toujours l'octet de poids fort en premier.
 Les espaces de début sont ignorés.
 Un caractère ASCII non compris dans l'intervalle [0 - 9] ([16#30 - 16#39]) est considéré comme
un caractère de fin, à l'exception du signe moins '-' (16#2D) lorsqu'il est placé comme premier
caractère.
 En cas de débordement (> 32 767 ou < -32 768), le bit système %S18 (erreur détectée ou
débordement arithmétique) est mis à 1 et la valeur 32 767 ou -32 768 est renvoyée.
 Si le premier caractère de l'opérande est un caractère de « séparateur », la valeur 0 est
renvoyée et le bit %S18 est mis à 1.
NOTE : Les caractères de séparateur sont les suivants : '+' et '-', la lettre 'e' ou 'E', ou '.'
(séparateur décimal).


118
La notation scientifique n'est pas valide.
EIO0000001475 12/2017
Procédure
Exemple d'application
Considérons que les données ASCII suivantes ont été stockées dans les mots %MW10 à %MW13 :
Paramètre
Valeur hexadécimale
Représentation ASCII
%MW10
16#3932
9, 2
%MW11
16#3133
1, 3
%MW12
16#2038
‘ ’, 8
%MW13
16#387A
8, ‘z’
Le tableau ci-dessous fournit des exemples de conversion ASCII/entier :
Exemple
Résultat
%MW20 := ASCII_TO_INT(%MW10)
%MW20 = 29318
%MW20 := ASCII_TO_INT(%MW12)
%MW20 = 8
%MW20 := ASCII_TO_INT(%MW13)
%MW20 = 0 et %S18 est réglé sur 1.
EIO0000001475 12/2017
119
Procédure
Instructions de conversion entier/ASCII
Introduction
Les instructions de conversion entier/ASCII convertissent un entier en chaîne ASCII.
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Pour les instructions de conversion entier/ASCII, respectez la syntaxe :
Op1 := INT_TO_ASCII( Op2 )
Par exemple :
[%MW0:4:=INT_TO_ASCII(%MW8)]
Paramètres
Le tableau suivant décrit les paramètres de la fonction de conversion entier/ASCII :
Paramètres
Description
Op1
%MW qui stocke le résultat
Op2
%MW, %KW, %SW, %IW, %QW ou tout MOT
(Les valeurs immédiates ne sont pas acceptées.)
Règles d'utilisation
Les règles de conversion entier/ASCII sont les suivantes :
Op2 doit être compris entre -32 768 et 32 767.
 La fonction écrit toujours l'octet de poids fort en premier.
 Le caractère de fin est "Entrée" (ASCII 13).
 La fonction détermine automatiquement le nombre de variables %MW devant contenir des
valeurs ASCII (de 1 à 4).

Erreurs de syntaxe
Le logiciel vérifie la syntaxe. Les exemples suivants risquent d'entraîner des erreurs de syntaxe :
120
Syntaxe incorrecte
Syntaxe correcte
%MW10 := INT_TO_ASCII(%MW1)
":4" manquant dans le résultat
%MW10:4 := INT_TO_ASCII(%MW1)
%MW10:n := INT_TO_ASCII(%MW1)
%MW10:n où n ≠ 4 est incorrect
%MW10:4 := INT_TO_ASCII(%MW1)
EIO0000001475 12/2017
Procédure
Exemple d'application
Pour l'instruction MW10:4 := INT_TO_ASCII(%MW1) :
Si...
Valeur entière
%MW1 = 123
%MW1 = 45
%MW1 = 7
%MW1 = -12369
EIO0000001475 12/2017
Alors…
Valeur hexadécimale
Représentation ASCII
%MW10 = 16#3231
2, 1
%MW11 = 16#0D33
'Entrée', 3
%MW10 = 16#3534
5, 4
%MW11 = 16#000D
'Entrée',
%MW10 = 16#0D37
'Entrée', 7
%MW10 = 16#3145
1, ‘-’
%MW11 = 16#3332
3, 2
%MW10 = 16#3936
9, 6
%MW11 = 16#000D
'Entrée',
121
Procédure
Instruction de conversion ASCII/valeur flottante
Introduction
L'instruction de conversion ASCII/valeur flottante convertit une chaîne ASCII en valeur flottante.
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Pour les instructions de conversion ASCII/valeur flottante, respectez la syntaxe suivante :
Op1 := ASCII_TO_FLOAT( Op2 ).
Par exemple :
[%MF0:=ASCII_TO_FLOAT(%MW8)]
Paramètres
Le tableau suivant décrit les paramètres de la fonction de conversion ASCII/valeur flottante :
Paramètres
Description
Op1
%MF
Op2
%MW or %KW
Règles d'utilisation
Les règles de conversion d'une chaîne ASCII en valeur flottante sont les suivantes :
La fonction lit toujours l'octet de poids fort en premier.
 Tout caractère ASCII non compris dans l'intervalle [0 - 9] ([16#30 - 16#39]) est considéré
comme un caractère de "fin", sauf les caractères suivants :
 le point (.) (16#2E) ;
 le signe moins '-' (16#2D) ;
 le signe plus '+' (16#2B) ;
 l'exposant 'e' ou 'E' (16#65 ou 16#45).



122
Le format de la chaîne ASCII peut être une notation scientifique (par ex., "-2.34567e+13") ou
décimale (par ex., "9826.3457").
En cas de débordement (résultat du calcul > 3.402824E+38 ou < -3.402824E+38) :
 le bit système %S18 (erreur détectée ou débordement arithmétique) est mis à 1 ;
 %SW17<Check Alignment of PHs>%:X3 est mis à 1;
 la valeur +/- 1.#INF (valeur infinie + ou -) est renvoyée.
EIO0000001475 12/2017
Procédure


Si le résultat du calcul est compris entre -1,175494E-38 et 1,175494E-38, il est arrondi à 0,0.
Si l'opérande n'est pas un nombre :
 La valeur 1.#QNAN est renvoyée ;
 le bit %SW17:X0 est mis à 1.
Exemple d'application
Considérons que les données ASCII suivantes ont été stockées dans les mots %MW10 à %MW14 :
Paramètre
Valeur hexadécimale
Représentation ASCII
%MW10
16#382D
8, ‘-’
%MW11
16#322E
2, ‘.’
%MW12
16#3536
5, 6
%MW13
16#2B65
‘+’, ‘e’
%MW14
16#2032
‘ ’, 2
Le tableau ci-dessous fournit des exemples de conversion ASCII/valeur flottante :
Exemple
Résultat
%MF20 := ASCII_TO_FLOAT(%MW10)
%MF20 = -826.5
%MF20 := ASCII_TO_FLOAT(%MW11)
%MF20 = 1.#QNAN
%MF20 := ASCII_TO_FLOAT(%MW12)
%MF20 = 6500.0
%MF20 := ASCII_TO_FLOAT(%MW13)
%MF20 = 1.#QNAN
%MF20 := ASCII_TO_FLOAT(%MW14)
%MF20 = 2.0
EIO0000001475 12/2017
123
Procédure
Instructions de conversion valeur flottante/ASCII
Introduction
L'instruction de conversion valeur flottante/ASCII convertit une valeur flottante en chaîne ASCII.
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Pour les instructions de conversion valeur flottante/ASCII, respectez la syntaxe :
Op1 := FLOAT_TO_ASCII(Op2).
Par exemple :
[%MW0:7:=FLOAT_TO_ASCII(%MF8)]
Paramètres
Le tableau suivant décrit les paramètres de la fonction de conversion valeur flottante/ASCII :
Paramètre
Description
Op1
%MW
Op2
%MF or %KF
Règles d'utilisation
Les règles de conversion d'une valeur flottante en valeur ASCII sont les suivantes :
La fonction écrit toujours l'octet de poids fort en premier.
 La représentation s'effectue à l'aide d'une notation scientifique conventionnelle.
 Le résultat « Infini » ou « Pas un nombre » renvoie la chaîne « NAN ».
 Le caractère de fin est "Entrée" (ASCII 13).
 La fonction détermine automatiquement le nombre de variables %MW devant contenir des
valeurs ASCII.
 La précision de conversion est de 6 chiffres.

Erreurs de syntaxe
Le logiciel vérifie la syntaxe. Les exemples suivants risquent d'entraîner des erreurs de syntaxe :
124
Syntaxe incorrecte
Syntaxe correcte
%MW10 := FLOAT_TO_ASCII(%MF1)
":7" manquant dans le résultat
%MW10:7 := FLOAT_TO_ASCII(%MF1)
%MW10:n := FLOAT_TO_ASCII(%MF1)
%MW10:n où n ≠ 7 est incorrect
%MW10:7 := FLOAT_TO_ASCII(%MF1)
EIO0000001475 12/2017
Procédure
Exemple d'application
Pour l'instruction %MW10:7 := FLOAT_TO_ASCII(%MF1) :
Nombre à convertir
Résultat
1234567800
1.23456e+09
0.000000921
9.21e-07
9.87654321
9.87654
1234
1.234e+03
EIO0000001475 12/2017
125
Procédure
Instructions de conversion ASCII/mot double
Introduction
L'instruction de conversion ASCII/mot double convertit une chaîne ASCII en une valeur de mot
double.
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Pour l'instruction de conversion ASCII/mot double, respectez la syntaxe suivante :
Op1 := ASCII_TO_DINT( Op2 )
Par exemple :
[%MD4 := ASCII_TO_DINT(%MW5)]
Paramètres
Le tableau suivant décrit les paramètres de l'instruction de conversion ASCII/mot double :
Paramètres
Description
Op1
%MDx
Op2
%MWy ou %KWy
NOTE : Il n'est pas nécessaire de définir Op1 et Op2 dans une table d'animation.
Règles d'utilisation
Les règles de conversion ASCII/entier sont les suivantes :
 Op2 doit être compris entre -2147483648 et 2147483647.
 La fonction lit toujours l'octet de poids fort en premier.
 Les espaces de début sont ignorés.
 Un caractère ASCII non compris dans l'intervalle [0 - 9] ([16#30 - 16#39]) est considéré comme
un caractère de fin, à l'exception du signe moins '-' (16#2D) lorsqu'il est placé comme premier
caractère.
 En cas de débordement (> 2147483647 ou < -2147483648), le bit système %S18 (erreur
détectée ou débordement arithmétique) est mis à 1 et la valeur 2147483647 ou -2147483648
est renvoyée.
 Si le premier caractère de l'opérande est un caractère de « séparateur », la valeur 0 est
renvoyée et le bit %S18 est mis à 1.
NOTE : Les caractères de séparateur sont les suivants : '+' et '-', la lettre 'e' ou 'E', ou '.'
(séparateur décimal).

126
La notation scientifique n'est pas valide.
EIO0000001475 12/2017
Procédure
Exemple d'application
Considérons que les données ASCII suivantes ont été stockées dans les mots %MW11 à %MW13 :
Paramètre
Valeur hexadécimale
Représentation ASCII
%MW8
16#3431
4, 1
%MW9
16#3532
5, 2
%MW10
16#3239
2, 9
%MW11
16#3133
1, 3
%MW12
16#2038
‘ ‘, 8
%MW13
16#387A
8, ‘z’
Le tableau ci-dessous fournit des exemples de conversion ASCII/mot double :
Exemple
Résultat
%MD10 := ASCII_TO_DINT(%MW8)
%MD10 = 142592318
%MD10 := ASCII_TO_DINT(%MW12)
%MD10 = 8
%MD10 := ASCII_TO_DINT(%MW13)
%MD10 = 0 et %S18 est réglé sur 1.
EIO0000001475 12/2017
127
Procédure
Instructions de conversion mot double/ASCII
Introduction
L'instruction de conversion mot double/ASCII convertit une valeur de mot double en chaîne ASCII.
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Pour les instructions de conversion mot double/ASCII, respectez la syntaxe :
Op1 := DINT_TO_ASCII( Op2 ).
Par exemple :
[%MW4:6 := DINT_TO_ASCII(%MD5)]
Paramètres
Le tableau suivant décrit les paramètres de la fonction de conversion mot double/ASCII :
Paramètres
Description
Op1
%MWx:6
Op2
%MD ou %KD
NOTE : Il n'est pas nécessaire de définir Op1 et Op2 dans une table d'animation.
Règles d'utilisation
Les règles de conversion entier/ASCII sont les suivantes :
Op2 doit être compris entre -2147483648 et 2147483647.
 La fonction écrit toujours l'octet de poids fort en premier.
 Le caractère de fin est "Entrée" (ASCII 13).
 La fonction détermine automatiquement le nombre de variables %MW devant contenir des
valeurs ASCII (de 1 à 6).

Erreurs de syntaxe
Le logiciel vérifie la syntaxe. Les exemples suivants risquent d'entraîner des erreurs de syntaxe :
128
Syntaxe incorrecte
Syntaxe correcte
%MW2 := DINT_TO_ASCII (%MD1)
“:6” manquant dans le résultat
%MW2:6 := DINT_TO_ASCII (%MW1)
%MW2:n := DINT_TO_ASCII (%KD7)
%MW2:n où n ≠ 6 est incorrect
%MW2:6 := DINT_TO_ASCII (%KD7)
EIO0000001475 12/2017
Procédure
Exemple d'application
Pour l'instruction %MW0:6 := DINT_TO_ASCII(%MD10)
Si...
Alors…
Valeur entière
Valeur hexadécimale
Représentation ASCII
%MD10 = 1236589
%MW0 = 16#3231
2, 1
%MW1 = 16#3633
6, 3
%MW2 = 16#3835
8, 5
%MW3 = 16#0D37
‘Entrée’, 9
%MW0 = 16#3534
5, 4
%MD10 = 45
%MD10 = -1236945
EIO0000001475 12/2017
%MW1 = 16#000D
'Entrée',
%MW0 = 16#3145
1, ‘-‘
%MW1 = 16#3332
3, 2
%MW2 = 16#3936
9, 6
%MW3 = 16#3534
5, 4
%MW4 = 16#000D
'Entrée',
129
Procédure
Sous-chapitre 3.6
Opérateurs de pile
Opérateurs de pile
Instructions de pile (MPS, MRD, MPP)
Introduction
Les instructions de pile gèrent le routage vers les bobines. Les instructions MPS, MRD et MPP
utilisent une zone de stockage temporaire (appelée pile), qui peut mémoriser jusqu'à
32 expressions booléennes.
NOTE : Elles ne peuvent pas être utilisées dans une expression comprise entre parenthèses.
Syntaxe
Le tableau suivant décrit les trois instructions de pile :
Instruction
Description
Fonction
MPS
Mise en mémoire dans la pile
(Memory Push onto Stack)
Stocke le résultat de la dernière instruction logique (contenu
de l'accumulateur) en haut de la pile. Cela décale les autres
valeurs de la pile vers le bas.
MRD
Lecture mémoire depuis la pile
(Memory Read from stack)
Lit la valeur stockée en haut de la pile et la transmet à
l'accumulateur.
MPP
Extraction mémoire depuis la
pile (Memory Pop from Stack)
Lit la valeur située dans le haut de la pile, la transmet à
l’accumulateur et décale les autres valeurs de la pile vers le
haut.
NOTE : Pour chaque instruction MPS (mise en mémoire), il est recommandé d'afficher une
instruction MPP (extraction) correspondante dans le même réseau.
130
EIO0000001475 12/2017
Procédure
Fonctionnement
Ce schéma explique comment les instructions de pile fonctionnent :
Exemple d'application
Exemple d'utilisation des instructions de pile :
Réseau
Instruction
0
LD
AND
MPS
AND
ST
MRD
AND
ST
MRD
AND
ST
MPP
AND
ST
%I0.0
%M1
%I0.1
%Q0.0
%I0.2
%Q0.1
%I0.3
%Q0.2
%I0.4
%Q0.3
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
EIO0000001475 12/2017
131
Procédure
Sous-chapitre 3.7
Instructions sur les tables d'objets
Instructions sur les tables d'objets
Objectif de cette section
Cette section décrit les instructions permettant de gérer les tables d'objets de :
Mots doubles
 Objets à virgule flottante

Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
132
Page
Affectation de tables de mots, mots doubles et valeurs flottantes
133
Fonctions de sommation de table
135
Fonction de comparaison de tables
137
Fonctions de recherche dans une table
139
Fonctions de recherche de valeurs maximum et minimum dans des tables
141
Nombre d'occurrences d'une valeur dans une table
143
Fonctions de décalage circulaire dans une table
144
Fonctions de tri de table
146
Fonctions LKUP (interpolation de table à virgule flottante)
147
Fonctions MEAN des valeurs d'une table de valeurs flottantes
152
EIO0000001475 12/2017
Procédure
Affectation de tables de mots, mots doubles et valeurs flottantes
Introduction
Les instructions d'affectation peuvent s'exécuter sur les tables d'objets suivants :
Valeur immédiate à table de mots (voir le réseau 0 de l'exemple de structure (voir page 134))
ou table de mots doubles
 Mot à table de mots (voir le réseau 1 de l'exemple de structure (voir page 134))
 Table de mots à table de mots (voir le réseau 2 de l'exemple de structure (voir page 134))
La longueur (L) doit être la même pour les deux tables.
 Mot double à table de mots doubles
 Table de mots doubles à table de mots doubles
La longueur (L) doit être la même pour les deux tables.
 Valeur flottante immédiate à table de valeurs flottantes
 Valeur flottante à table de valeurs flottantes
 Table de valeurs flottantes à table de valeurs flottantes
La longueur (L) doit être la même pour les deux tables.

Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Syntaxe des affectations de tables de mots, mots doubles et valeurs flottantes :
Opérateur
Syntaxe
:=
[Op1: = Op2]
Op1 prend la valeur de Op2.
Le tableau suivant détaille les opérandes :
Type
Op1
Op2
Table de mots
%MWi:L, %SWi:L
%MWi:L, %SWi:L, valeur entière immédiate,
%MWi, %KWi, %IW, %QW, %SWi, %BLK.x
Tables de mots
doubles
%MDi:L
Valeur entière immédiate,
%MDi, %KDi,%MDi:L, %KDi:L
Tables de mots
flottants
%MFi:L
Valeur immédiate à virgule flottante, %MFi, %KFi,
%MFi:L, %KFi:L
L
Longueur de la table (255 au maximum).
NOTE : L'abréviation %BLK.x (par exemple R3.I) permet de décrire tout mot de bloc fonction.
EIO0000001475 12/2017
133
Procédure
Structure
Exemples d'affectations de tables de mots
Réseau
Instruction
0
LD 1
[%MW0:10:=100]
1
LD %I0.0
[%MW0:10:=%MW11]
2
LDR %I0.3
[%MW10:20:=%KW20:20]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
134
EIO0000001475 12/2017
Procédure
Fonctions de sommation de table
Introduction
La fonction SUM_ARR effectue la somme de tous les éléments d'un tableau d'objet :
Si la table est constituée de mots doubles, le résultat est donné sous la forme d'un mot double.
 Si la table est constituée de mots flottants, le résultat est donné sous la forme d'un mot flottant.

Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Format de l'instruction de sommation de table :
Res:=SUM_ARR(Tab)
Paramètres de l'instruction de sommation de table :
Type
Résultat (Res)
Table (Tab)
des tables de mots doubles ;
%MDi
%MDi:L,%KDi:L
des tables de mots flottants.
%MFi
%MFi:L,%KFi:L
L
Longueur de la table (255 au maximum).
NOTE : Le bit %S18 est mis à 1 lorsque le résultat n'est pas dans les limites du format double mot
correspondant à l'opérande de la table.
Structure
Exemple de fonction de sommation :
Réseau
Instruction
0
LD %I0.2
[%MD5:=SUM_ARR(%MD3:1)]
1
LD 1
[%MD5:=SUM_ARR(%KD5:2)]
2
LD 1
[%MF2:=SUM_ARR(%MF8:5)]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
EIO0000001475 12/2017
135
Procédure
Exemple d'application
%MD4:=SUM_ARR(%MD30:4)
Où %MD30 = 10, %MD32 = 20, %MD34 = 30, %MD36 = 40
Donc %MD4 = 10+20+30+40
136
EIO0000001475 12/2017
Procédure
Fonction de comparaison de tables
Introduction
La fonction EQUAL_ARR compare deux tables, élément par élément.
Si une différence apparaît, le rang des premiers éléments dissemblables est retourné sous la
forme d'un mot, sinon la valeur renvoyée est égale à -1.
La comparaison porte sur la totalité de la table.
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Format de l'instruction de comparaison de tables :
Res:=EQUAL_ARR(Tab1,Tab2)
Paramètres des instructions de comparaison de tables :
Type
Résultat (Res)
Tables (Tab1 et Tab2)
Tables de mots doubles
%MWi
%MDi:L,%KDi:L
Tables de mots flottants
%MWi
%MFi:L,%KFi:L
L
Longueur de la table (255 au maximum).
NOTE : Les tables doivent être obligatoirement de même longueur et de même type.
Structure
Exemple de fonction de comparaison de tables :
Réseau
Instruction
0
LD %I0.2
[%MW5:=EQUAL_ARR(%MD20:7,%KD0:7)]
1
LD 1
[%MW0:=EQUAL_ARR(%MD20:7,%KD0:7)]
2
LD 1
[%MF2:=SUM_ARR(%MF8:5)]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
EIO0000001475 12/2017
137
Procédure
Exemple d'application
%MW5:=EQUAL_ARR(%MD30:4,%KD0:4)
Comparaison des deux tables :
Rang
Table de Mots
Tables de mots constants
Différence
0
%MD30=10
%KD0=10
=
1
%MD32=20
%KD2=20
=
2
%MD34=30
%KD4=60
Différent
3
%MD36=40
%KD6=40
=
La valeur du mot %MW5 est 2 (premier rang différent).
138
EIO0000001475 12/2017
Procédure
Fonctions de recherche dans une table
Introduction
Trois fonctions de recherche sont proposées :
FIND_EQR : recherche, dans une table de mots doubles ou flottants, de la position du premier
élément égal à une valeur donnée.
 FIND_GTR : recherche, dans une table de mots doubles ou flottants, de la position du premier
élément supérieur à une valeur donnée.
 FIND_LTR : recherche, dans une table de mots doubles ou flottants, de la position du premier
élément inférieur à une valeur donnée.

Le résultat de ces instructions est égal au rang du premier élément trouvé ou à -1 si la recherche
est infructueuse.
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Format des instructions de recherche dans une table :
Fonction
Syntaxe
FIND_EQR
Res:=Fonction(Tab,Val)
FIND_GTR
FIND_LTR
Paramètres des instructions de recherche dans des tables de mots doubles et flottants :
Type
Résultat (Res)
Table (Tab)
Valeur (Val)
Tables de mots flottants
%MWi
%MFi:L,%KFi:L
%MFi,%KFi
Tables de mots doubles
%MWi
%MDi:L,%KDi:L
%MDi,%KDi
L
Longueur de la table (255 au maximum).
EIO0000001475 12/2017
139
Procédure
Structure
Exemple de fonction de recherche dans une table :
Réseau
Instruction
0
LD %I0.2
[%MW5:=FIND_EQR(%MD20:7,%KD0)]
1
LD %I0.3
[%MW6:=FIND_GTR(%MD20:7,%KD0)]
2
LD 1
[%MW7:=FIND_LTR(%MF40:5,%KF4)]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Exemple d'application
%MW5:=FIND_EQR(%MD30:4,%KD0)
Recherche de la position du premier mot double = %KD0=30 dans la table :
Rang
140
Table de Mots
Résultat
0
%MD30=10
-
1
%MD32=20
-
2
%MD34=30
Valeur (Val), rang
3
%MD36=40
-
EIO0000001475 12/2017
Procédure
Fonctions de recherche de valeurs maximum et minimum dans des tables
Introduction
Deux fonctions de recherche sont proposées :
MAX_ARR : recherche de la valeur maximum dans une table de mots doubles et flottants.
 MIN_ARR : recherche de la valeur minimum dans une table de mots doubles et flottants.

Le résultat de ces instructions est égal à la valeur maximum (ou minimum) trouvée dans la table.
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Syntaxe des instructions de recherche des valeurs maximum et minimum dans des tables :
Fonction
Syntaxe
MAX_ARR
Résultat:=Fonction(Onglet)
MIN_ARR
Paramètres des instructions de recherche des valeurs maximum et minimum dans des tables :
Type
Résultat (Res)
Table (Tab)
Tables de mots doubles
%MDi
%MDn:L,%KDn:L
Tables de mots flottants
%MFi
%MFn:L,%KFn:L
i Identificateur d'instance d'objet pour la variable mémoire.
n Index mémoire de la table, indiquant l'adresse de base de la recherche.
L Nombre de positions à prendre en compte lors d'une recherche, notamment l'index de l'adresse de base
(valeur maximum de L : 255).
NOTE : L ne compte que les adresses qui ne se recouvrent pas pendant la recherche. Pour plus
d'informations, consultez la section Possibilité de recouvrement entre des objets (voir page 45).
EIO0000001475 12/2017
141
Procédure
Structure
Exemple de fonction de recherche dans une table :
Réseau
Instruction
0
LD %I0.2
[%MD0:=MIN_ARR(%MD20:7)]
1
LD 1
[%MF8:=MIN_ARR(%MF40:5)]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
142
EIO0000001475 12/2017
Procédure
Nombre d'occurrences d'une valeur dans une table
Introduction
La fonction OCCUR_ARR recherche dans une table de mots doubles ou flottants le nombre
d'éléments égaux à une valeur donnée.
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Syntaxe des instructions de recherche de valeurs maximum et minimum dans une table :
Fonction
Syntaxe
OCCUR_ARR
Res:=Fonction(Tab,Val)
Paramètres des instructions de recherche de valeurs maximum et minimum dans une table :
Type
Résultat (Res)
Table (Tab)
Valeur (Val)
Tables de mots doubles
%MWi
%MDi:L,%KDi:L
%MDi,%KDi
Tables de mots flottants
%MFi
%MFi:L,%KFi:L
%MFi,%KFi
L
Longueur de la table (255 au maximum).
Structure
Exemple de nombre d'occurrences :
Réseau
Instruction
0
LD %I0.3
[%MW5:=OCCUR_ARR(%MF20:7,%KF0)]
1
LD %I0.2
[%MW5:=OCCUR_ARR(%MD20:7,%MD1)]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
EIO0000001475 12/2017
143
Procédure
Fonctions de décalage circulaire dans une table
Introduction
Deux fonctions de décalage sont proposées :
ROL_ARR : réalise le décalage circulaire de n positions des éléments du haut vers le bas dans
une table de mots flottants.

Illustration des fonctions ROL_ARR

ROR_ARR : réalise le décalage circulaire de n positions des éléments du bas vers le haut dans
une table de mots flottants.
Illustration des fonctions ROR_ARR
144
EIO0000001475 12/2017
Procédure
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Syntaxe des instructions de décalage circulaire dans des tables de doubles mots ou flottants
ROL_ARR et ROR_ARR
Fonction
Syntaxe
ROL_ARR
Fonction(n,Tab)
ROR_ARR
Paramètres des instructions de décalage circulaire pour les tables de mots flottants : ROL_ARR et
ROR_ARR :
Type
Nombre de positions (n)
Table (Tab)
Tables de mots flottants
%MWi, immediate value
%MFi:L
Tables de mots doubles
%MWi, immediate value
%MDi:L
L
Longueur de la table (255 au maximum).
NOTE : Si la valeur de n est négative ou nulle, aucun décalage n'est effectué.
Structure
Exemple de fonction de décalage circulaire :
Réseau
Instruction
0
LD %I0.2
[ROL_ARR(%KW0,%MD20:7)]
1
LD %I0.3
[ROR_ARR(2,%MD20:7)]
2
LD %I0.4
[ROR_ARR(2,%MF40:5)]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
EIO0000001475 12/2017
145
Procédure
Fonctions de tri de table
Introduction
La fonction SORT_ARR trie par ordre croissant ou décroissant les éléments d'une table de mots
doubles ou flottants, et stocke le résultat dans cette même table.
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Format des fonctions de tri de table :
Fonction
Syntaxe
SORT_ARR
Fonction(sens,Tab)
Le paramètre "sens" indique l'ordre de tri :
Sens > 0 : le tri est croissant.
 Sens < 0 : le tri est décroissant.
 Sens = 0 : aucun tri n'est effectué.

Le résultat (tableau trié) est renvoyé dans le paramètre Tab (table à trier).
Paramètres des fonctions de tri de table :
Type
Sens du tri
Table (Tab)
Tables de mots doubles
%MWi, immediate value
%MDi:L
Tables de mots flottants
%MWi, immediate value
%MFi:L
L
Longueur de la table (255 au maximum).
Structure
Exemple de fonction de tri de table :
Réseau
Instruction
0
LD %I0.1
[SORT_ARR(%MW20,%MF0:6)]
1
LD %I0.2
[SORT_ARR(%MW20,%MF0:6)]
2
LD %I0.3
[SORT_ARR(0,%MF40:8)]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
146
EIO0000001475 12/2017
Procédure
Fonctions LKUP (interpolation de table à virgule flottante)
Introduction
La fonction LKUP sert à interpoler un ensemble de données flottantes X par rapport à Y pour une
valeur X donnée.
Description de l'interpolation linéaire
La fonction LKUP suit la règle d'interpolation linéaire, définie dans l'équation suivante :
(Equation 1)
pour
, où
;
en supposant que les valeurs
sont classées par ordre croissant :
.
NOTE : Si les deux valeurs Xi consécutives sont égales (Xi=Xi+1=X), l'équation (1) fournit une
exception non valide. Dans ce cas, l'algorithme suivant est utilisé à la place de l'équation (1) :
(Equation 2)
pour
EIO0000001475 12/2017
, où
.
147
Procédure
Représentation graphique
Le graphique suivant illustre la règle d'interpolation linéaire décrite ci-dessus :
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
La fonction LKUP utilise trois opérandes, dont deux sont des attributs de fonction, comme indiqué
dans le tableau suivant :
148
Syntaxe
Op1
Op2
Variable de sortie Valeur (X) définie par
l'utilisateur
défini par l'utilisateur
[Op1: = LKUP(Op2,Op3)]
%MWi
Valeur entière, %MWi,or %KWi
%MF0
Op3
Tableau de variables (Xi,Yi)
EIO0000001475 12/2017
Procédure
Définition de Op1
Op1 est le mot mémoire qui contient la variable de sortie de la fonction d'interpolation.
Selon la valeur de Op1, l'utilisateur peut savoir si l'interpolation a été correctement effectuée, et
connaître les causes d'un échec, comme indiqué dans le tableau suivant :
Op1 (%MWi)
Description
0
Interpolation réussie
1
Erreur d'interpolation détectée : tableau incorrect, Xm < Xm-1
2
Erreur d'interpolation détectée : Op2 hors limites, X < X1
4
Erreur d'interpolation détectée : Op2 hors limites, X > Xm
8
Taille incorrecte du tableau de données :
 Op3 est défini comme un nombre impair ou
 Op3 < 6.
NOTE : Op1 ne contient pas la valeur d'interpolation calculée (Y). Pour une valeur (X) donnée, le
résultat de l'interpolation (Y) est contenu dans %MF2 du tableau Op3 (voir page 149).
Définition de Op2
Op2 est la variable flottante (%MF0 du tableau flottant Op3) qui contient la valeur (X) définie par
l'utilisateur pour laquelle la valeur (Y) interpolée est calculée :
Plage valide de Op2 :
.
Définition de Op3
Op3 définit la taille (Op3 / 2) du tableau de valeurs flottantes, où les paires de données (Xi, Yi) sont
stockées.
Les données Xi et Yi sont stockées dans des objets flottants avec des index pairs, à partir de %MF4
(notez que les objets flottants %MF0 et %MF2 sont réservés respectivement à la consigne utilisateur
X et à la valeur Y interpolée).
Avec un tableau de (m) paires de données (Xi,Yi), l'index supérieur (u) du tableau flottant (%MFu)
est défini à l'aide des relations suivantes :


EIO0000001475 12/2017
(Equation 3)
(Equation 4)
149
Procédure
La structure du tableau flottant Op3 (%MFi) est similaire à celle de l'exemple suivant (où Op3=8) :
(X)
(X1)
%MF0
(X2)
%MF4
(X3)
%MF8
%MF12
%MF2
%MF6
%MF10
%MF14
(O)
(Y1)
(Y2)
(Y3)
(Op3 = 8)
NOTE : En raison de la structure du tableau de valeurs flottantes ci-dessus, Op3 doit respecter les
exigences suivantes, sinon une erreur sera générée dans la fonction LKUP :
 Op3 est un chiffre pair et
 Op3 ≥ 6 (au moins deux points de données doivent être disponibles pour permettre
l'interpolation linéaire).
Structure
Les opérations d'interpolation sont effectuées de la façon suivante :
Réseau
Instruction
0
LD %I0.2
[%MW20:=LKUP(%MF0,%KW1)]
1
LD %I0.3
[%MW22:=LKUP(%MF0,10)]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
150
EIO0000001475 12/2017
Procédure
Exemple d'application
Utilisation d'une fonction d'interpolation LKUP :
[%MW20:=LKUP(%MF0,10)]
Dans cet exemple :
 %MW20 est Op1 (la variable de sortie).
 %MF0 est la valeur (X) définie par l'utilisateur, dont la valeur (Y) correspondante doit être
calculée par interpolation linéaire.
 %MF2 enregistre la valeur calculée (Y) générée par l'interpolation linéaire.
 10 est Op3 (comme indiqué par l'équation 3 ci-dessus). Il définit la taille du tableau flottant.
Elément de classement le plus élevé %MFu, où u=18 est fourni par l'équation 4 ci-dessus.
Quatre paires de points de données sont stockées dans le tableau Op3 [%MF4,...%MF18] :
%MF4 contient X1, %MF6 contient Y1.
 %MF8 contient X2, %MF10 contient Y2.
 %MF12 contient X3, %MF14 contient Y3.
 %MF16 contient X4, %MF18 contient Y4.

EIO0000001475 12/2017
151
Procédure
Fonctions MEAN des valeurs d'une table de valeurs flottantes
Introduction
La fonction MEAN permet de calculer la moyenne d'un nombre donné de valeurs dans une table de
valeurs flottantes.
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Syntaxe de la fonction de calcul de la moyenne d'une table de valeurs flottantes :
Fonction
Syntaxe
MEAN
Résultat=Fonction(Op1)
Paramètres de la fonction de calcul d'un nombre donné L (255 au maximum) de valeurs dans un
tableau de nombres à virgule flottante :
Op1
Résultat (Res)
%MFi:L, %KFi:L
%MFi
Structure
Exemple de fonction de calcul de moyenne :
Réseau
Instruction
0
LD
%I3.2
[%MF0:=MEAN(%MF10:5)]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
152
EIO0000001475 12/2017
Procédure
Sous-chapitre 3.8
Instructions sur les objets d'E/S
Instructions sur les objets d'E/S
Objectif de cette section
Cette section décrit les instructions exécutées sur les objets d'E/S.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
Page
Lecture immédiate d'entrée numérique intégrée (READ_IMM_IN)
154
Ecriture immédiate de sortie intégrée numérique (WRITE_IMM_OUT)
156
Instruction de lecture immédiate de paramètre de bloc fonction (READ_IMM)
158
Instruction d'écriture immédiate de paramètre de bloc fonction (WRITE_IMM)
159
EIO0000001475 12/2017
153
Procédure
Lecture immédiate d'entrée numérique intégrée (READ_IMM_IN)
Introduction
L'instruction READ_IMM_IN lit une entrée numérique intégrée (entrée intégrée dans le contrôleur
logique) lors de l'exécution d'une tâche et met immédiatement à jour l'image de l'entrée. Ainsi la
mise à jour de l'image de l'entrée est effectuée sans attendre le cycle de tâches suivant.
NOTE : Cette instruction n'est valide que pour les entrées numériques intégrées.
NOTE : Si vous utilisez cette instruction, évaluez les performances relatives (activez et désactivez
les délais) des entrées standard et des entrées rapides. Consultez la rubrique Entrées
numériques.
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Pour l'instruction READ_IMM_IN, utilisez la syntaxe suivante :
Op1 := READ_IMM_IN(Op2)
Où :
Opérande
Type
Description
Op1
%MWi
Stocke le code de retour de la fonction (voir le tableau cidessous).
Op2
Valeur immédiate (entier)
%MWi
%KWi
Définit l'index de l'entrée (%I0.x).
i
Identificateur d'instance d'objet pour la variable mémoire.
Code de retour de la fonction
Ce tableau décrit les codes de retour de la fonction :
154
Code
Description
0
Aucune erreur détectée.
1
L'entrée déclarée est supérieure à l'entrée maximale autorisée.
2
L'entrée déclarée est forcée.
EIO0000001475 12/2017
Procédure
Exemple
%MW0 := READ_IMM_IN(2)
Après l'exécution de ce bloc opération, la valeur actuelle de l'entrée %I0.2 est lue et l'image de
l'entrée est immédiatement mise à jour. Le code de retour de la fonction est stocké dans le mot
mémoire %MW0.
Structure
Exemple d'instruction READ_IMM_IN :
Réseau
Instruction
0
LD %M0
[%MW0:=READ_IMM_IN(%MW5)]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
EIO0000001475 12/2017
155
Procédure
Ecriture immédiate de sortie intégrée numérique (WRITE_IMM_OUT)
Introduction
L'instruction WRITE_IMM_OUT écrit physiquement sur une sortie numérique intégrée (sortie
intégrée dans le contrôleur logique) immédiatement ; la valeur est lue à partir de l'image de la
sortie. Ainsi l'écriture dans la sortie intégrée est effectuée sans attendre le cycle de tâches suivant.
NOTE : Cette fonction n'est valide que pour les sorties numériques intégrées.
NOTE : Si vous utilisez cette instruction, évaluez les performances relatives (activez et désactivez
les délais) des entrées standard et des entrées rapides. Consultez la rubrique Entrées
numériques.
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Pour l'instruction WRITE_IMM_OUT, utilisez la syntaxe suivante :
Op1 := WRITE_IMM_OUT(Op2)
Où :
Opérande
Type
Description
Op1
%MWi
Stocke le code de retour de la fonction (voir le tableau
ci-dessous).
Op2
Valeur immédiate (entier)
%MWi
%KWi
Définit l'index de la sortie (%Q0.x).
i
Identificateur d'instance d'objet pour la variable mémoire.
Code de retour de la fonction
Ce tableau décrit les codes de retour de la fonction :
156
Code
Description
0
Aucune erreur détectée.
3
La sortie déclarée est supérieure à la sortie maximale autorisée.
4
La sortie déclarée est forcée.
5
La sortie déclarée est utilisée comme sortie matérielle dédiée.
6
La sortie déclarée est utilisée comme sortie d'alarme.
EIO0000001475 12/2017
Procédure
Exemple
%MW0 := WRITE_IMM_OUT(%MW5) (avec %MW5 = 2)
Après l'exécution de ce bloc opération, l'image de la sortie %Q0.2 est physiquement écrite dans la
sortie numérique intégrée. Le code de retour de la fonction est stocké dans le mot mémoire %MW0.
Structure
Exemple d'instruction WRITE_IMM_OUT :
Réseau
Instruction
0
LD %M0
[%MW0:= WRITE_IMM_OUT(%MW4)]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
EIO0000001475 12/2017
157
Procédure
Instruction de lecture immédiate de paramètre de bloc fonction (READ_IMM)
Introduction
L'instruction READ_IMM lit un paramètre de bloc fonction durant l'exécution d'une tâche et met à
jour l'image d'entrée pendant le même cycle.
Cette fonction est disponible uniquement pour certains paramètres de bloc fonction. L'instruction
READ_IMM lit directement les données des registres HSC.V et HSC.P dans les blocs fonction de
Compteur rapide (%HSC). Pour plus de détails, consultez Compteurs rapides (%HSC).
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Pour l'instruction READ_IMM, utilisez la syntaxe suivante :
READ_IMM(Op1)
Où :
Opérande
Type
Description
Op1
%HSCx.P, %HSCx.PD,
%HSCx.V, %HSCx.VD
Cette instruction lit un paramètre de bloc fonction fourni dans
Op1, puis met à jour la valeur dans l'image d'E/S et le registre
correspondant.
x Identificateur d'instance d'objet pour le bloc fonction.
Exemple
Voici un exemple d'utilisation de l'instruction READ_IMM :
Réseau
Instruction
0
LD %M0
[READ_IMM(%HSC0.P)]
NOTE : Pour obtenir le schéma à contacts équivalent, consultez la procédure de réversibilité
(voir page 20).
NOTE : Pour utiliser l'instruction READ_IMM, vous devez configurer l'application avec un niveau
fonctionnel (voir SoMachine Basic, Guide d'utilisation) d'au moins Niveau 3.3.
158
EIO0000001475 12/2017
Procédure
Instruction d'écriture immédiate de paramètre de bloc fonction (WRITE_IMM)
Introduction
L'instruction WRITE_IMM écrit un paramètre de bloc fonction durant l'exécution d'une tâche et met
à jour l'image de sortie pendant le même cycle.
Cette fonction est disponible uniquement pour certains paramètres de bloc fonction. L'instruction
WRITE_IMM écrit directement les données dans les registres HSC.V et HSC.P dans les blocs
fonction de Compteur rapide (%HSC). Pour plus de détails, consultez Compteurs rapides (%HSC).
Syntaxe
La syntaxe en langage Liste d'instructions est décrite ci-après. Vous pouvez insérer des opérations
et des instructions d'affectation en langage Liste d'instructions (voir page 23) dans des réseaux en
langage Schéma à contacts, à l'aide d'un élément graphique Bloc opération.
Pour l'instruction WRITE_IMM, utilisez la syntaxe suivante :
WRITE_IMM(Op1)
Où :
Opérande
Type
Description
Op1
%HSCx.P, %HSCx.PD,
%HSCx.V, %HSCx.VD
Cette instruction écrit un paramètre de bloc fonction fourni dans
Op1, puis met à jour la valeur dans l'image d'E/S.
x Identificateur d'instance d'objet pour le bloc fonction.
Exemple
Voici un exemple d'utilisation de l'instruction WRITE_IMM :
Réseau
Instruction
0
LD %M1
[WRITE_IMM(%HSC0.V)]
NOTE : Pour obtenir le schéma à contacts équivalent, consultez la procédure de réversibilité
(voir page 20).
NOTE : Pour utiliser l'instruction WRITE_IMM, vous devez configurer l'application avec un niveau
fonctionnel d'au moins Niveau 3.3.
EIO0000001475 12/2017
159
Procédure
160
EIO0000001475 12/2017
SoMachine Basic
Objets d'E/S
EIO0000001475 12/2017
Chapitre 4
Objets d'E/S
Objets d'E/S
Contenu de ce chapitre
Ce chapitre contient les sous-chapitres suivants :
Sous-chapitre
Sujet
Page
4.1
Bloc fonction Fast Counter (%FC)
162
4.2
Bloc fonction High Speed Counter (%HSC)
163
4.3
Bloc fonction Pulse (%PLS)
164
4.4
Bloc fonction Pulse Width Modulation (%PWM)
165
EIO0000001475 12/2017
161
Objets d'E/S
Sous-chapitre 4.1
Bloc fonction Fast Counter (%FC)
Bloc fonction Fast Counter (%FC)
Fast Counter
Présentation
Consultez le Guide de la bibliothèque des fonctions avancées de votre contrôleur.
162
EIO0000001475 12/2017
Objets d'E/S
Sous-chapitre 4.2
Bloc fonction High Speed Counter (%HSC)
Bloc fonction High Speed Counter (%HSC)
High Speed Counter
Présentation
Consultez le Guide de la bibliothèque des fonctions avancées de votre contrôleur.
EIO0000001475 12/2017
163
Objets d'E/S
Sous-chapitre 4.3
Bloc fonction Pulse (%PLS)
Bloc fonction Pulse (%PLS)
Pulse
Présentation
Consultez le Guide de la bibliothèque des fonctions avancées de votre contrôleur.
164
EIO0000001475 12/2017
Objets d'E/S
Sous-chapitre 4.4
Bloc fonction Pulse Width Modulation (%PWM)
Bloc fonction Pulse Width Modulation (%PWM)
Pulse Width Modulation
Présentation
Consultez le Guide de la bibliothèque des fonctions avancées de votre contrôleur.
EIO0000001475 12/2017
165
Objets d'E/S
166
EIO0000001475 12/2017
SoMachine Basic
Objets de réseau
EIO0000001475 12/2017
Chapitre 5
Objets de réseau
Objets de réseau
Objets de réseau
Présentation
Les objets de réseau permettent de communiquer via EtherNet/IP, Modbus TCP ou Scrutateur
d'E/S Modbus série.
Il existe deux types d'objet réseau pour les communications EtherNet/IP :
%QWE : Input Assembly
 %IWE : Output Assembly

Il existe deux types d'objet réseau pour les communications Modbus TCP :
%QWM : registres d'entrée
 %IWM : registres de sortie

Les types suivants d'objets de réseau sont utilisés pour le Scrutateur d'E/S Modbus série :
%IN : entrées numériques (IOScanner)
 %QN : sorties numériques (IOScanner)
 %IWN : registres d'entrée (IOScanner)
 %QWN : registres de sortie (IOScanner)
 %IWNS : codes de diagnostic réseau du scrutateur d'E/S

NOTE : les références à l'entrée et à la sortie s'entendent du point de vue du maître EtherNet/IP
ou du client Modbus TCP.
Pour plus d'informations sur la configuration des objets réseau, reportez-vous au Guide de
programmation de votre contrôleur logique.
EIO0000001475 12/2017
167
Objets de réseau
168
EIO0000001475 12/2017
SoMachine Basic
Objets logiciels
EIO0000001475 12/2017
Chapitre 6
Objets logiciels
Objets logiciels
Contenu de ce chapitre
Ce chapitre contient les sous-chapitres suivants :
Sous-chapitre
Sujet
Page
6.1
Utilisation des blocs fonction
170
6.2
Timer (%TM)
177
6.3
Counter (%C)
187
6.4
Message (%MSG) et échange (EXCH)
195
6.5
LIFO/FIFO Register (%R)
221
6.6
Drums (%DR)
230
6.7
Shift Bit Register (%SBR)
238
6.8
Step Counter (%SC)
243
Blocs horodateurs (%SCH)
248
6.10
6.9
Horloge (%RTC)
254
6.11
PID
260
6.12
Journalisation des données
261
6.13
Etapes Grafcet
264
EIO0000001475 12/2017
169
Objets logiciels
Sous-chapitre 6.1
Utilisation des blocs fonction
Utilisation des blocs fonction
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
170
Page
Principes de programmation des blocs fonction
171
Ajout d'un bloc fonction
174
Configuration d'un bloc fonction
176
EIO0000001475 12/2017
Objets logiciels
Principes de programmation des blocs fonction
Présentation
Un bloc fonction est un objet réutilisable qui accepte une ou plusieurs valeurs d'entrée et renvoie
une ou plusieurs valeurs de sortie.
Vous pouvez insérer jusqu'à cinq blocs fonction en série dans chaque réseau Schéma à contacts.
Vous ne pouvez pas insérer de blocs fonction en parallèle.
Les paramètres du bloc fonction ne sont pas disponibles si :
 votre contrôleur ne prend pas en charge le bloc fonction ;
 le bloc fonction n'est pas configuré.
Programmes en langage Schéma à contacts
Pour utiliser un bloc fonction dans un réseau Schéma à contacts, procédez comme suit :
Etape
Action
1
Insérez (voir page 174) le bloc fonction dans un réseau.
2
Câblez les entrées et les sorties, si nécessaire.
3
Configurez (voir page 176) le bloc fonction en définissant les valeurs de ses paramètres.
Programmes en langage Liste d'instructions
Pour ajouter un bloc fonction dans un programme en langage Liste d'instructions, procédez au
choix comme suit :


Instructions de bloc fonction (par exemple, BLK %TM2) : cette méthode de programmation
réversible permet d'effectuer des opérations sur le bloc en un emplacement du programme.
Instructions spécifiques (par exemple, CU %Ci) : cette méthode non réversible permet
d'effectuer des opérations sur les entrées du bloc fonction dans plusieurs endroits du
programme. Par exemple :
Ligne
Instruction
1000
CU %C1
1074
CD %C1
1209
R %C1
EIO0000001475 12/2017
171
Objets logiciels
Utilisez les instructions BLK, OUT_BLK, et END_BLK pour une programmation réversible des blocs
fonction :



BLK: Indique le début du bloc.
OUT_BLK: Permet de câbler directement les sorties du bloc.
END_BLK: Indique la fin du bloc.
NOTE : Seules les instructions de test et d'entrée sur le bloc correspondant peuvent être placées
entre les instructions BLK et OUT_BLK (ou entre BLK et END_BLK lorsque OUT_BLK n'est pas
programmé).
Exemple avec des sorties câblées
Cet exemple montre un bloc fonction Counter dans un programme avec des sorties câblées :
Réseau
Instruction
0
BLK
%C8
LDF
%I0.1
R
LD
%I0.1
AND
%M0
CU
OUT_BLK
LD
D
AND
%M1
ST
%Q0.0
END_BLK
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
172
EIO0000001475 12/2017
Objets logiciels
Exemple sans aucune sortie câblée
Cet exemple montre la programmation réversible d'un bloc fonction Counter sans aucune sortie
câblée :
Réseau
Instruction
0
BLK
%C8
LDF
%I0.1
R
LD
%I0.2
AND
%M0
CU
END_BLK
1
LD
AND
ST
%C8.D
%M1
%Q0.4
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
EIO0000001475 12/2017
173
Objets logiciels
Ajout d'un bloc fonction
Insertion d'un bloc fonction dans un programme en langage Schéma à contacts
Procédez comme suit :
Etape
Action
1
Créez un réseau en langage Schéma à contacts dans l'espace de travail de programmation
de SoMachine Basic. Pour plus d'informations, consultez le document SoMachine Basic Guide d'utilisation.
2
Cliquez sur le bouton Fonction dans la barre d'outils graphique située en haut de l'espace de
travail de programmation.
Résultat : la liste des objets de bloc fonction disponibles s'affiche (reportez-vous au tableau
ci-dessous).
3
Sélectionnez le bloc fonction.
4
Déplacez-le vers la position souhaitée dans le réseau, puis cliquez sur le bouton gauche de la
souris pour l'insérer.
Vous pouvez insérer jusqu'à cinq blocs fonction en série dans chaque réseau.
Objets de bloc fonction disponibles
Ce tableau répertorie les objets de bloc fonction disponibles :
Objet de bloc fonction
Description
Temporisateur
Registre LIFO/FIFO
Registre de bits à décalage
Fonction pas à pas
Compteur
Compteur rapide (FC)
Compteur rapide (HSC)
174
EIO0000001475 12/2017
Objets logiciels
Objet de bloc fonction
Description
Drum
RTC (Real-Time Clock)
Impulsion
Modulation de la largeur d'impulsion
Message
Journalisation des données
Sortie à train d'impulsions
NOTE : Pour obtenir la liste complète des objets PTO, consultez la section
Blocs fonction PTO dans le document - Guide de la bibliothèque des
fonctions avancée.
Objets Drive
NOTE : Pour obtenir la liste complète des objets Drive, consultez la section
Blocs fonction Drive du document - Guide de la bibliothèque des fonctions
avancée.
Blocs fonction de communication
NOTE : pour obtenir la liste complète des blocs fonction de communication,
consultez Objets de communication (voir page 271).
Bloc fonction défini par l'utilisateur
EIO0000001475 12/2017
175
Objets logiciels
Configuration d'un bloc fonction
Configuration d'un bloc fonction dans un programme en langage Schéma à contacts
Procédez comme suit :
Etape
Action
1
Cliquez éventuellement sur Adresse dans le bloc fonction.
Une adresse par défaut s'affiche dans la zone de texte, par exemple "%TM0" pour un bloc
fonction Timer.
Pour modifier l'adresse par défaut, supprimez son dernier chiffre (identificateur de l'instance).
La liste des adresses disponibles s'affiche.
Sélectionnez l'adresse à utiliser pour identifier cette instance du bloc fonction.
Les propriétés du bloc fonction s'affichent au centre de l'objet bloc fonction et dans le tableau
Propriétés dans la moitié inférieure de l'espace de travail de programmation.
A tout moment, double-cliquez dans le bloc fonction pour afficher ses propriétés.
2
Cliquez éventuellement sur Commentaire dans le bloc fonction, puis saisissez une brève
description du bloc fonction. Par exemple, Temporisateur d'impulsion.
3
Cliquez éventuellement sur Symbole dans le bloc fonction et saisissez le nom du symbole à
associer à ce bloc fonction.
La liste des symboles existants, avec des noms commençant par le ou les caractères saisis,
s'affiche. Cliquez sur celui que vous souhaitez utiliser.
Pour créer un symbole de ce bloc fonction, saisissez le nom du symbole à créer, puis
sélectionnez l'objet à associer au symbole.
Pour plus d'informations sur l'utilisation des symboles, consultez le document SoMachine
Basic - Guide d'utilisation (voir SoMachine Basic, Guide d'utilisation).
4
Cliquez sur le bloc fonction.
Résultat : l'info-bulle Configuration apparaît.
5
Configurez les paramètres disponibles de chaque bloc fonction, comme indiqué dans la
section "Paramètres" de la description d'un bloc fonction.
Vous pouvez modifier les valeurs des objets en mode en ligne. Consultez la section
Modifications en ligne (voir SoMachine Basic, Guide d'utilisation).
NOTE : Vous pouvez également afficher le tableau Propriétés en double-cliquant sur le bloc
fonction dans un réseau.
176
EIO0000001475 12/2017
Objets logiciels
Sous-chapitre 6.2
Timer (%TM)
Timer (%TM)
Utilisation des blocs fonction Timer
Cette section fournit des descriptions et des conseils de programmation pour utiliser les blocs
fonction Timer.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
Page
Description
178
Configuration
179
TON : Timer On-Delay
181
TOF : Timer Off-Delay
183
TP : Pulse Timer
185
Exemple de programmation
186
EIO0000001475 12/2017
177
Objets logiciels
Description
Introduction
Le bloc fonction Timer
permet de définir le délai d'exécution d'une opération (par exemple,
le déclenchement d'un événement).
Illustration
Cette illustration représente le bloc fonction Timer.
Entrées
Le bloc fonction Timer comporte l'entrée suivante :
Libellé
Description
Valeur
IN
Adresse de l'entrée
(ou instruction)
Démarre le bloc fonction Timer lors de la détection d'un front montant
(type TON ou TP) ou descendant (type TOF).
Sorties
Le bloc fonction Timer comporte la sortie suivante :
178
Libellé
Description
Valeur
Q
Adresse de sortie
(%TMi.Q)
Le bit associé %TMi.Q est défini sur 1 (en fonction du type Timer) à
l'expiration du Timer.
EIO0000001475 12/2017
Objets logiciels
Configuration
Paramètres
Pour configurer les paramètres, suivez la procédure Configuration d'un bloc fonction
(voir page 176) et lisez la description des Modes d'allocation de mémoire dans le document
SoMachine Basic - Guide d'utilisation.
Le bloc fonction Timer a les paramètres suivants :
Paramètre
Description
Valeur
Modifiable
en mode
en ligne
Utilisée
Adresse utilisée
Si ce paramètre est sélectionné, l'adresse en question
est actuellement utilisée dans le programme.
Non
Adresse
Adresse de l'objet Timer (%TMi) Un programme ne peut contenir qu'un nombre limité
Non
d'objets Timer. Consultez le Guide de programmation
de la plate-forme concernée pour connaître le nombre
maximum d'objets Timer.
Symbole
Symbole
Type
Type Timer
Persistant
True/False
Symbole associé à cet objet. Pour plus d'informations,
consultez la section Définition et utilisation des
symboles (voir SoMachine Basic, Guide d'utilisation)
dans le document SoMachine Basic - Guide
d'utilisation.
Non
Une des valeurs suivantes :
(voir page 181) : Timer on-Delay (par défaut)
 TOF (voir page 183) : Timer off-Delay
 TP (voir page 185) : Pulse timer (monostable)
Oui1
 TON
Si l'option Persistant n'est pas cochée (option par
Oui1
défaut), la valeur est réinitialisée lors de la détection
d'un front descendant du paramètre IN. Le comptage
redémarre à partir de 0.
Si l'option Persistant est cochée, le temporisateur
conserve la valeur si un front descendant du paramètre
IN est détecté avant que la valeur Préréglage soit
atteinte. Le comptage redémarre à partir de cette
valeur.
NOTE : pour utiliser le paramètre Persistant,
l'application doit être configurée sur le niveau
fonctionnel (voir SoMachine Basic, Guide
d'utilisation) 3.3 au moins.
1
Le temporisateur est immédiatement remis à 0 après une modification de la valeur d'un paramètre en mode en
ligne.
EIO0000001475 12/2017
179
Objets logiciels
Paramètre
Description
Valeur
Base
Base de temps
Base de temps du temporisateur. Plus la base de
Oui1
temps du bloc fonction Timer est petite, plus ce dernier
est précis :
 1 ms (pris en charge dans %TM0...%TM5)
 10 ms
 100 ms
 1s
 1 min (par défaut)
Présélection
Valeur de présélection
0...9999. La valeur par défaut est 9999.
Oui1
Période du temporisateur = Présélection x Base de
temps
Délai du temporisateur = Présélection x Base de temps
Cette valeur de présélection configurée peut être lue,
testée et modifiée en utilisant l'objet associé %TMi.P.
Commentaire
Commentaire
Un commentaire peut être associé à cet objet.
1
Modifiable
en mode
en ligne
Non
Le temporisateur est immédiatement remis à 0 après une modification de la valeur d'un paramètre en mode en
ligne.
Objets
Le bloc fonction Timer comporte les objets suivants :
180
Objet
Description
Valeur
%TMi.P
Valeur de
présélection
Consultez la description dans le tableau Paramètres ci-dessus.
%TMi.V
Valeur en cours
Mot qui s'incrémente de 0 à la valeur de présélection (%TMi.P) lorsque
le temporisateur est en cours d'exécution. Le programme peut lire et
tester cette valeur, mais pas l'écrire.
Cette valeur peut être modifiée dans une table d'animation.
%TMi.Q
Sortie Timer
Consultez la description dans le tableau Sorties ci-dessus.
EIO0000001475 12/2017
Objets logiciels
TON : Timer On-Delay
Introduction
Le temporisateur de type TON (On-Delay Timer) permet de contrôler les actions avec délai
d'activation. Le logiciel permet de programmer ce délai.
Cas particuliers
Le tableau suivant présente une liste des cas spécifiques de programmation du bloc fonction
temporisateur.
Cas spécifique
Description
Effet d'un redémarrage à froid (%S0=1) Force la valeur à 0. Règle la sortie %TMi.Q sur 0. La valeur de
présélection est réinitialisée sur la valeur définie lors de la
configuration.
Effet d'un redémarrage à chaud
(%S1=1)
Aucun effet sur la valeur de temporisation et la valeur de
présélection du temporisateur. La valeur de temporisation n'est
pas modifiée lors d'une coupure d'alimentation secteur.
Effet d'un arrêt du contrôleur
L'arrêt du contrôleur ne provoque pas le gel de la valeur.
Effet d'un saut de programme
Le saut d'un bloc temporisateur ne provoque pas le gel du
temporisateur. L'incrémentation du temporisateur se poursuit
jusqu'à ce que la valeur de présélection (%TMi.P) soit atteinte.
A ce stade, l'état du bit Done (%TMi.Q) affecté à la sortie Q du bloc
temporisateur est modifié. Cependant, la sortie associée, liée
directement à la sortie du bloc, n'est ni activée, ni scrutée par le
contrôleur.
Test par bit %TMi.Q (bit Done)
Ne testez le bit %TMi.Q qu'une fois dans le programme.
Effet de la modification de la valeur de
présélection %TMi.P
La modification de la valeur de présélection à l'aide d'une
instruction ou d'un réglage dans SoMachine Basic ne prend effet
qu'à la prochaine activation du temporisateur.
EIO0000001475 12/2017
181
Objets logiciels
Chronogramme
Ce schéma illustre le fonctionnement du bloc fonction Timer.
(1) Le temporisateur (Timer) démarre sur le front montant de l'entrée IN.
(2) La valeur %TMi.V augmente de 0 à %TMi.P par incréments d'une unité à chaque impulsion de la base de
temps TB
(3) Le bit de sortie %TMi.Q est réglé sur 1 lorsque la valeur atteint la valeur de présélection %TMi.P
(4) Le bit de sortie %TMi.Q reste à 1 tant que la valeur de l'entrée IN est égale à 1.
(5) Lorsqu'un front descendant est détecté sur l'entrée IN, le Timer est arrêté, même si la valeur de Timer
n'a pas atteint %TMi.P. %TMi.V est défini à 0.
Chronogramme avec option « Persistant » cochée
Ce diagramme représente le fonctionnement du Timer de type TON lorsque l'option Persistant
est sélectionnée.
(1) Le temporisateur (Timer) démarre sur le front montant de l'entrée IN.
(2) La valeur %TMi.V augmente de 0 à %TMi.P par incréments d'une unité à chaque impulsion de la base de
temps TB
(3) Sur le front descendant de l'entrée IN, le Timer est arrêté et reste en attente du front montant suivant de
l'entrée IN
(4) Sur le front montant de l'entrée IN, le Timer redémarre à partir de la valeur à laquelle il s'est arrêté
(5) Le bit de sortie %TMi.Q est défini sur 1 lorsque la valeur atteint la valeur de présélection %TMi.P
(6) Lorsqu'un front descendant est détecté à l'entrée IN, si le Timer a atteint la valeur de présélection
%TMi.P, la valeur %TMi.V est définie sur 0
182
EIO0000001475 12/2017
Objets logiciels
TOF : Timer Off-Delay
Introduction
Utilisez le type TOF (Off-Delay Timer) du temporisateur (Timer) pour contrôler les actions
avec délai de désactivation. Le logiciel permet de programmer ce délai.
Chronogramme
Ce schéma illustre le fonctionnement du bloc fonction Timer.
(1) Lors d'un front montant de l'entrée entrée IN, %TMi.Q est défini sur 1
(2) Le temporisateur (Timer) démarre sur le front descendant de l'entrée IN
(3) La valeur %TMi.V augmente jusqu'à la valeur de présélection %TMi.P par incréments d'une unité, à
chaque impulsion du paramètre de base de temps (TB).
(4) Le bit de sortie %TMi.Q est réinitialisé sur 0 lorsque la valeur atteint la valeur de présélection %TMi.P.
(5) Lors d'un front montant de l'entrée IN, %TMi.V est mis à 0.
(6) Lors d'un front montant de l'entrée IN, %TMi.V est mis à 0 même si la valeur de présélection n'est pas
atteinte.
EIO0000001475 12/2017
183
Objets logiciels
Chronogramme avec option « Persistant » cochée
Ce diagramme représente le fonctionnement du Timer de type TOF lorsque l'option Persistant est
sélectionnée.
(1) Lors d'un front montant de l'entrée entrée IN, %TMi.Q est défini sur 1
(2) Le temporisateur (Timer) démarre sur le front descendant de l'entrée IN
(3) La valeur %TMi.V augmente jusqu'à la valeur de présélection %TMi.P par incréments d'une unité à
chaque impulsion du paramètre de base de temps TB
(4) Sur le front montant de l'entrée IN, le temporisateur (Timer) est arrêté et reste en attente du front montant
suivant de l'entrée IN.
(5) Le bit de sortie %TMi.Q est réinitialisé sur 0 lorsque la valeur atteint la valeur de présélection %TMi.P.
(6) Lors d'un front montant de l'entrée IN, %TMi.V est défini sur 0 et %TMi.Q est défini sur 1.
184
EIO0000001475 12/2017
Objets logiciels
TP : Pulse Timer
Introduction
Le bloc fonction Timer de type TP (Pulse Timer) permet de créer des impulsions d'une durée
précise. Le logiciel permet de programmer ce délai.
Chronogramme
Ce schéma illustre le fonctionnement du Timer de type TP.
(1) Le Timer débute sur le front montant de l'entrée IN. La valeur actuelle %TMi.V est mise à 0 si le Timer
n'a pas encore démarré, et %TMi.Q est mis à 1 lorsque le Timer démarre.
(2) La valeur actuelle %TMi.V du bloc fonction Timer passe de 0 à la valeur de présélection %TMi.P, par
incrément d'une unité à chaque impulsion du paramètre de base de temps (TB).
(3) Le bit de sortie %TMi.Q est réglé sur 0 lorsque la valeur actuelle atteint la valeur de présélection %TMi.P.
(4) La valeur actuelle %TMi.V est mise à 0 lorsque %TMi.V égale %TMi.P et que l’entrée IN revient à 0.
(5) Ce type de bloc fonction Timer ne peut pas être remis à 0.
(6) Lorsque %TMi.V est égal à %TMi.P et que l'entrée IN a pour valeur 0, %TMi.Q est mis à 0.
EIO0000001475 12/2017
185
Objets logiciels
Exemple de programmation
Introduction
Les blocs fonction Timer ont les modes de fonctionnement suivants :
TON (Timer On-Delay) (voir page 181) : permet de spécifier un délai entre l'activation d'une
entrée et la commutation d'un capteur de sortie.
 TOF (Timer Off-Delay) (voir page 183) : permet de spécifier un délai entre une sortie associée
à un capteur qui n'est plus détecté et la commutation de la sortie correspondante.
 TP (Timer - Pulse) (voir page 185) : permet de créer une impulsion d'une durée précise.

Les retards ou périodes d'impulsion des blocs fonction Timers sont programmables et
configurables dans le logiciel
Programmation
Voici un exemple de bloc fonction Timer avec des instructions réversibles :
Réseau
Instruction réversible
0
BLK %TM0
LD
%M0
IN
OUT_BLK
LD
Q
ST
%Q0.0
END_BLK
1
LD
ST
[%TM0.V<400]
%Q0.1
2
LD
ST
[%TM0.V>=400]
%Q0.2
Voici un exemple du même bloc fonction Timer avec des instructions non réversibles :
Réseau
Instruction non réversible
0
LD
IN
%M0
%TM0
1
LD
ST
%TM0.Q
%Q0.0
2
LD
ST
[%TM0.V<400]
%Q0.1
3
LD
ST
[%TM0.V>=400]
%Q0.2
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
186
EIO0000001475 12/2017
Objets logiciels
Sous-chapitre 6.3
Counter (%C)
Counter (%C)
Utilisation des blocs fonction Counter
Cette section fournit des descriptions et des conseils de programmation pour utiliser les blocs
fonction Counter.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
Page
Description
188
Configuration
190
Exemple de programmation
193
EIO0000001475 12/2017
187
Objets logiciels
Description
Introduction
Le bloc fonction Counter
permet de compter ou de décompter des événements. Ces
deux opérations peuvent être réalisées simultanément.
Illustration
Cette illustration représente le bloc fonction Counter.
Entrées
Le bloc fonction Counter a les entrées suivantes :
188
Libellé
Description
Valeur
R
Entrée (ou instruction)
de réinitialisation
(Reset)
Le compteur (%Ci.V) est remis à 0 lorsque l'entrée de
réinitialisation (R) est définie sur 1.
S
Entrée (ou instruction)
de configuration (Set)
Le compteur (%Ci.V) est défini sur la valeur de présélection
(%Ci.P) lorsque l'entrée de configuration (S) est définie sur 1.
CU
Comptage croissant
Incrémente la valeur du compteur (%Ci.V) de 1 lors d'un front
montant sur l'entrée de comptage croissant (CU).
CD
Comptage décroissant
Décrémente la valeur du compteur (%Ci.V) de 1 lors d'un front
montant sur l'entrée de comptage décroissant (CD).
EIO0000001475 12/2017
Objets logiciels
Sorties
Le bloc fonction Counter a les sorties suivantes :
Libellé
Description
E
Dépassement du
Le bit associé %Ci.E (compteur vide) est mis à 1 lorsque le compteur
comptage décroissant atteint la valeur 0. En cas de décrémentation, la valeur du compteur
passe à 9999.
D
Sortie prédéfinie
atteinte
Le bit associé %Ci.D (comptage terminé) est mis à 1 lorsque
%Ci.V = %Ci.P.
F
Dépassement du
comptage croissant
Le bit associé %Ci.F=1 (compteur saturé), lorsque la valeur de
%Ci.V passe de 9999 à 0 (défini sur 1 lorsque %Ci.V atteint 0 et
remis à 0 si le comptage croissant de Counter continue).
EIO0000001475 12/2017
Valeur
189
Objets logiciels
Configuration
Paramètres
Pour configurer les paramètres, suivez la procédure Configuration d'un bloc fonction
(voir page 176) et lisez la description des Modes d'allocation de mémoire dans le document
SoMachine Basic - Guide d'utilisation.
Le bloc fonction Counter a les paramètres suivants :
Paramètre
Description
Valeur
Modifiable
en mode
en ligne ?
Utilisée
Adresse utilisée
Si ce paramètre est sélectionné, cette adresse est utilisée
dans un programme.
Non
Adresse
Adresse de l'objet Un programme ne peut contenir qu'un nombre limité
Counter
d'objets Counter. Pour connaître le nombre maximum de
compteurs, consultez le Guide de programmation de votre
contrôleur.
Non
Symbole
Symbole
Symbole associé à cet objet. Pour plus d'informations,
consultez la section Définition et utilisation des symboles
(voir SoMachine Basic, Guide d'utilisation) dans le
document SoMachine Basic - Guide d'utilisation.
Non
Présélection
Valeur de
présélection
Valeurs acceptées par la valeur de présélection [0 à 9999]. Oui
La valeur par défaut est 9999. Cette valeur configurée peut
être lue, testée et modifiée à l'aide de l'objet associé %Ci.P.
Commentaire
Commentaire
Un commentaire peut être associé à cet objet.
Non
Objets
Le bloc fonction Counter comporte les objets suivants :
190
Objet
Description
Valeur
%Ci.V
Valeur courante du
bloc Counter
Ce mot est incrémenté ou décrémenté en fonction des
entrées (ou des instructions) CU et CD (voir le tableau
Entrées (voir page 188)). Ne peut être que lu.
Peut être modifié dans une table d'animation.
%Ci.P
Valeur de
présélection
Consultez le tableau Paramètres (voir page 190).
Peut être modifié dans une table d'animation.
%Ci.E
Vide
Consultez le tableau Sorties (voir page 189).
Peut être modifié dans une table d'animation.
%Ci.D
Terminé
Consultez le tableau Sorties (voir page 189).
Peut être modifié dans une table d'animation.
%Ci.F
Complet
Consultez le tableau Sorties (voir page 189).
Peut être modifié dans une table d'animation.
EIO0000001475 12/2017
Objets logiciels
Opérations
Ce tableau décrit les principales étapes des opérations du bloc fonction Counter :
Opération
Action
Réinitialisation
L'entrée R est mise à 1 (ou l'instruction La valeur courante de %Ci.V est forcée à 0.
R est activée).
Les sorties %Ci.E, %Ci.D et %Ci.F sont
à 0. L'entrée de réinitialisation est prioritaire.
Définition
Si l'entrée S est mise à 1 (ou si
l'instruction S est activée) et que
l'entrée de réinitialisation est à l'état 0
(ou que l'instruction R est inactive).
La valeur courante de %Ci.V prend la valeur
de %Ci.P et la sortie %Ci.D est mise à 1.
Comptage croissant Un front montant apparaît sur l'entrée
de comptage croissant CU
(ou instruction CU activée).
La valeur courante de %Ci.V est augmentée
d'une unité.
La valeur courante de %Ci.V est
égale à la valeur de présélection de
%Ci.P.
Résultat
Le bit de sortie "valeur prédéfinie atteinte"
%Ci.D passe à 1.
La valeur courante de %Ci.V passe de Le bit de sortie %Ci.F (débordement de
9999 à 0.
comptage croissant) passe à 1.
Comptage
décroissant
EIO0000001475 12/2017
Si le bloc fonction Counter continue
son comptage croissant.
Le bit de sortie %Ci.F (débordement de
comptage croissant) est remis à zéro.
Un front montant apparaît sur l'entrée
de comptage décroissant CD
(ou instruction CD activée).
La valeur courante de %Ci.V est
décrémentée de 1 unité.
La valeur courante de %Ci.V passe
de 0 à 9999.
Le bit de sortie %Ci.E (débordement de
comptage décroissant) passe à 1.
Si le bloc fonction Counter continue
son comptage décroissant.
Le bit de sortie %Ci.F (débordement de
comptage décroissant) est remis à 0.
191
Objets logiciels
Cas particuliers
Le tableau suivant présente une liste de cas particuliers d'utilisation et de configuration du
Counter :
Cas particulier
Description
Effet d'un redémarrage à froid (%S0=1) ou INIT  La valeur courante de %Ci.V est mise à 0.
 Les bits de sortie %Ci.E, %Ci.D, et %Ci.F sont mis
à 0.
 La valeur de présélection est initialisée sur la valeur
définie lors de la configuration.
Effet d'un redémarrage à chaud (%S1=1) ou
d'un arrêt du contrôleur
Aucun effet sur la valeur courante du bloc Counter
(%Ci.V).
Effet de la modification de la valeur de
présélection %Ci.P
La modification de la valeur de présélection à l'aide d'une
instruction ou d'un réglage ne prend effet qu'au moment du
traitement du bloc par l'application (activation de l'une des
entrées).
NOTE : l'effet de INIT est identique à celui de %S0=1.
192
EIO0000001475 12/2017
Objets logiciels
Exemple de programmation
Introduction
L'exemple suivant illustre un bloc fonction Counter permettant de compter jusqu'à 5000 articles.
Chaque impulsion sur l'entrée %I0.2 (lorsque le bit interne %M0 est mis à 1) incrémente la valeur
du bloc fonction Counter %C8 d'une unité, jusqu'à sa valeur de présélection finale (bit %C8.D=1).
Le compteur est remis à zéro par l'entrée %I0.1.
Programmation
Voici un exemple de Counter avec des instructions réversibles :
Réseau
Instruction réversible
0
BLK %C8
LD
%I0.1
R
LD
%I0.2
AND %M0
CU
END_BLK
1
LD
ST
%C8.D
%Q0.0
Voici un exemple du même bloc fonction Counter avec des instructions non réversibles :
Réseau
Instruction non réversible
0
LD
R
1
LD %I0.2
AND %M0
CU %C8
2
LD
ST
%I0.1
%C8
%C8.D
%Q0.0
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Configuration
Les paramètres suivants doivent être saisis lors de la configuration :
Valeur Présélection (%Ci.P) : 5000 dans cet exemple.
EIO0000001475 12/2017
193
Objets logiciels
Exemple de compteur croissant/décroissant
Cette illustration montre un bloc fonction Counter.
Dans cet exemple, %M0 donne l'ordre d'incrémentation (%M0 = False) et de décrémentation (%M0 =
True). Le compteur compte le front montant de %I0.0. Si %M0 a pour valeur False, lors de chaque
front sur %I0.0, %C1.V est incrémenté jusqu'à atteindre la valeur de présélection %C1.P, et
l'indicateur Done %C1.D passe à TRUE. La sortie %C1.D configure %M0 et bascule l'instruction vers
l'ordre de décrémentation. Ensuite, à chaque front sur %I0.0, %C1.V est décrémenté jusqu'à
atteindre 0. L'indicateur Empty (%C1.E) est activé et réinitialise %M0 (ordre d'incrémentation).
194
EIO0000001475 12/2017
Objets logiciels
Sous-chapitre 6.4
Message (%MSG) et échange (EXCH)
Message (%MSG) et échange (EXCH)
Utilisation des blocs fonction Message
Cette section fournit des descriptions et des conseils de programmation pour utiliser les blocs
fonction Message.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
Page
Présentation
196
Description
198
Configuration
202
Exemple de programmation
207
Exemples ASCII
209
Requêtes et exemples Modbus standard
211
EIO0000001475 12/2017
195
Objets logiciels
Présentation
Introduction
Il est possible de configurer un Logic Controller pour qu'il communique avec le protocole Modbus
ou qu'il puisse envoyer et/ou recevoir des messages en mode caractères (ASCII).
SoMachine Basic propose les fonctions suivantes pour ces communications :
Instruction Exchange (EXCH pour émettre/recevoir des messages.
 Bloc fonction Message (%MSG) pour contrôler les échanges de données.

Le Logic Controller utilise le protocole configuré pour le port spécifié, lors du traitement d'une
instruction Exchange. Il est possible d'affecter un protocole différent à chaque port de
communication. Pour accéder aux ports de communication, il suffit d'ajouter leur numéro à la fin
de l'instruction Exchange (EXCH1, EXCH2) ou du bloc fonction Message (%MSG1, %MSG2).
Les Logic Controller mettent en œuvre la messagerie Modbus TCP sur le réseau Ethernet grâce
à l'instruction EXCH3 et au bloc fonction %MSG3.
Ce tableau montre l'instruction Exchange et le bloc fonction Message utilisés pour accéder aux
ports de communication du contrôleur :
Port de communication
Instruction d'échange
Bloc fonction Message
2 lignes série
EXCH1
%MSG1
EXCH2
%MSG2
EXCH1
%MSG1
EXCH3
%MSG3
1 ligne série et 1 Ethernet
Instruction d'échange
L'instruction Exchange permet à un Logic Controller d'envoyer des informations à des
équipements ASCII ou Modbus, et/ou d'en recevoir. Vous définissez une table de mots (%MWi:L)
contenant les informations de contrôle ainsi que les données à envoyer et/ou recevoir. Consultez
la section Configuration de la table d'émission (voir page 204). Un échange de message s'effectue
à l'aide de l'instruction Exchange.
Syntaxe
La syntaxe à utiliser pour l'instruction Exchange est la suivante :
[EXCHx %MWi:L]
Où x = numéro de port et L = nombre total de mots dans la table de mots.
Le Logic Controller doit terminer l'échange ordonné par la première instruction Exchange pour
qu'une nouvelle instruction Exchange puisse démarrer. Le bloc fonction Message doit être utilisé
pour envoyer plusieurs messages.
196
EIO0000001475 12/2017
Objets logiciels
Protocole ASCII
Le protocole ASCII offre aux Logic Controller un protocole en mode caractères simple, permettant
d'émettre et/ou de recevoir des données à l'aide d'un seul équipement. Ce protocole est pris en
charge par l'instruction Exchange et contrôlé par le bloc fonction Message.
Le protocole ASCII autorise trois types de communication :
 Emission seule
 Emission/réception
 Réception seule
Protocole Modbus
Dans le cas d'une liaison série, le protocole Modbus est un protocole maître-esclave qui permet à
un seul maître de demander des réponses à des esclaves ou d'agir en fonction de la requête. Sur
Ethernet, plusieurs maîtres (clients) peuvent échanger avec un esclave (serveur). Une adresse
unique est affectée à chaque esclave. Le maître peut s'adresser à plusieurs esclaves individuellement ou envoyer un message général à tous les esclaves. Les esclaves renvoient un message
(réponse) aux requêtes qui leur sont adressées individuellement. Les réponses aux requêtes de
diffusion générale du maître ne sont pas renvoyées.
Le mode Modbus maître permet au contrôleur d'envoyer une requête Modbus à un esclave et
d'attendre la réponse. Le mode maître Modbus n'est pris en charge que par l'instruction Exchange.
Les modes Modbus ASCII et RTU sont tous les deux pris en charge en mode maître Modbus.
Le mode esclave Modbus permet au contrôleur de répondre à des requêtes Modbus standard
provenant d'un maître Modbus.
Pour plus d'informations sur le protocole Modbus, consultez le document Protocole d'application
Modbus disponible à l'adresse http://www.modbus.org.
Esclave Modbus
Le protocole Modbus prend en charge deux formats de couche de liaison de données du Modèle
OSI : ASCII et RTU. Chaque format est défini par l'implémentation de la couche physique. Le
format ASCII utilise sept bits de données, tandis que le format RTU en utilise huit.
En mode Modbus ASCII, chaque octet d'un message est envoyé sous la forme de
deux caractères ASCII. La trame Modbus ASCII commence par un caractère de début (':') et se
termine par deux caractères de fin (CR et LF). Par défaut, le caractère de fin de trame
est 0x0A (LF). La valeur de contrôle de la trame Modbus ASCII correspond à un simple
complément de deux de la trame (caractères de début et de fin non compris).
Le mode Modbus RTU ne reformate pas le message avant de l'émettre. Mais, il utilise un mode de
calcul de somme de contrôle différent, baptisé CRC.
Les limitations de la couche de liaison de données Modbus sont les suivantes :
 Adresse 1 à 247
 Bits : 128 bits sur demande
 Mots : 125 mots de 16 bits sur demande
EIO0000001475 12/2017
197
Objets logiciels
Description
Introduction
Le bloc fonction Message
assure la gestion des échanges de données. Il a trois fonctions :
Vérification des erreurs de communication
Cette fonction vérifie la taille de chaque table d'échange, ainsi que la validité de l'échange par
rapport à la configuration.
 Coordination de plusieurs messages :
Pour garantir la coordination en cas d'envoi de plusieurs messages, le bloc fonction Message
fournit les informations permettant de déterminer quand le message précédent est terminé.
 Emission de messages prioritaires :
Le bloc fonction Message permet d'interrompre l'émission du message en cours afin de
permettre l'envoi d'un message plus urgent.

La programmation du bloc fonction Message est facultative.
Lorsque des erreurs sont détectées, les codes sont écrits dans les mots système %SW63, %SW64
et %SW65 des blocs d'échange EXCH1, EXCH2 et EXCH3 respectivement. Pour plus d'informations,
consultez le Guide de programmation de votre contrôleur.
Illustration
L'illustration suivante représente le bloc fonction Message :
198
EIO0000001475 12/2017
Objets logiciels
Entrées
Le bloc fonction Message comporte l'entrée suivante :
Libellé
Description
Valeur
R
Entrée de
réinitialisation
(%MSGx.R)
Réglé sur 1 pour réinitialiser la communication :
 La sortie de communication terminée (%MSGx.D) est mise à 1.
 La sortie d'erreur de communication détectée (%MSG.E) est mise
à 0.
 Une erreur est définie sur un bloc fonction de communication actif
(%READ_VAR, %WRITE_VAR, etc.)..
 Les connexions TCP actives à d'autres contrôleurs Modicon M221
Logic Controller sont fermées.
NOTE : seul un bloc fonction Message, une instruction EXCH ou un bloc
fonction de communication peut être actif à la fois sur un port de
communication pendant un cycle de tâche maître. Si vous tentez d'utiliser
plusieurs blocs fonction de communication, ou bien plusieurs instructions
MSG ou EXCH simultanément sur le même port de communication, les
blocs fonction renvoient un code d'erreur. Par conséquent, vérifiez
qu'aucun échange actif (%MSGx.D réglé sur TRUE) n'est en cours sur un
port de communication avant de démarrer un bloc fonction de
communication, un bloc fonction Message ou une instruction EXCH.
Vérifiez également que le scrutateur d'E/S n'est pas actif sur le port de
communication.
NOTE : le scrutateur d'E/S ne met pas à jour les sorties du bloc fonction
%MSG. Par conséquent, le bit %MSG.D ne permet pas de déterminer la
fonction du scrutateur d'E/S.
EIO0000001475 12/2017
199
Objets logiciels
Sorties
Le bloc fonction Message a les sorties suivantes :
Libellé
Description
D
Communication
Etat 1 :
terminée (%MSGx.D)  Fin d'émission (si émission)
 Fin de réception (caractère de fin reçu)
 Erreur
 Réinitialisation du bloc
Valeur
Etat 0 : requête en cours.
E
Etat 1 :
Erreur de
communication
 Commande non définie
détectée (%MSGx.E)  Configuration incorrecte de la table
 Réception d'un caractère incorrect (vitesse, parité, etc.)
 Table de réception pleine (non mise à jour)
Etat 0 : message de longueur correcte, liaison établie.
Pour connaître les codes écrits dans les mots système en cas d'erreur de
communication détectée, consultez le tableau ci-dessous.
Codes des erreurs de communication
Ce tableau décrit les codes d'erreur écrits dans les mots système lorsqu'une erreur de
communication est détectée :
200
Mot système
Fonction
Description
%SW63
Code d'erreur Code d'erreur EXCH1 :
0 - opération réussie
du bloc
1 - dépassement du nombre maximal d'octets à émettre (> 255)
EXCH1
2 - table d'émission trop petite
3 - table de mots trop petite
4 - débordement de la table de réception
5 - timeout écoulé
6 - émission
7 - commande incorrecte dans la table
8 - port sélectionné non configuré/disponible
9 - erreur de réception: ce code d'erreur indique une trame de réception
incorrecte ou endommagée. Cela peut être dû à une configuration
incorrecte des paramètres physiques (parité, bits de données, débit en
bauds, etc.) ou à une connexion physique non fiable entraînant une
dégradation du signal.
10 - impossible d'utiliser %KW en cas de réception
11 - décalage d'émission plus important que la table d'émission
12 - décalage de réception plus important que la table de réception
13 - interruption du traitement EXCH par le contrôleur
EIO0000001475 12/2017
Objets logiciels
Mot système
Fonction
%SW64
Code d'erreur Code d'erreur EXCH2 : voir %SW63.
de bloc
EXCH2
%SW65
Code d'erreur 1-4, 6-13 : voir %SW63. (Remarque : le code d'erreur 5 est incorrect. Il est
de bloc
remplacé par les codes d'erreur 109 et 122 spécifiques à Ethernet qui sont
EXCH3
décrits ci-dessous.)
Les codes d'erreur suivants sont spécifiques à Ethernet ;
101 - adresse IP incorrecte
102 - absence de connexion TCP
103 - aucun socket disponible (toutes les voies de connexion sont
occupées)
104 - réseau non opérationnel
105 - réseau inaccessible
106 - connexion interrompue par le réseau lors de la réinitialisation
107 - connexion abandonnée par équipement homologue
108 - connexion réinitialisée par équipement homologue
109 - timeout écoulé pour la connexion
110 - rejet de la tentative de connexion
111 - hôte non opérationnel
120 - index incorrect (l'équipement distant n'est pas indexé dans le tableau
de configuration)
121 - erreur système (MAC, puce, adresse IP en double)
122 - timeout du processus de réception après l'envoi des données
123 - initialisation d'Ethernet en cours
EIO0000001475 12/2017
Description
201
Objets logiciels
Configuration
Erreur détectée
Si une erreur est détectée lors de l'utilisation d'une instruction Exchange, les bits %MSGx.D et
%MSGx.E sont définis sur 1, le mot système %SW63 contient le code d'erreur du port 1 et %SW64 le
code d'erreur du port 2. Consultez le chapitre Mots système du Guide de programmation du
contrôleur logique.
Opérations
Ce tableau décrit les principales étapes des opérations du bloc fonction Message :
Opération
Action
Réinitialisation
L'entrée R est mise à 1 (ou l'instruction  L'émission de tous les messages est
interrompue.
R est activée).
 La sortie d'erreur de communication est
remise à 0.
 Le bit Done est mis à 1.
Résultat
Un nouveau message peut être envoyé.
202
Communication
terminée
La sortie D est mise à l'état 1.
Le contrôleur logique est prêt à envoyer un
autre message. Utilisez le bit %MSGx.D pour
éviter de perdre des messages lors de l'envoi
de plusieurs messages.
Erreur de
communication
détectée
La sortie d'erreur de communication est mise à 1 :
 En cas d'erreur de programmation des communications ou d'erreur de transmission
du message.
 Si le nombre d'octets définis dans le bloc de données associé à l'instruction
Exchange (mot 1, octet de poids faible) est supérieur à 128 (+80 en hexadécimal
par FA).
 S'il existe un problème d'envoi d'un message Modbus à un équipement Modbus.
Dans ce cas, vérifiez le câblage et assurez-vous que l'équipement de destination
prend en charge la communication Modbus.
EIO0000001475 12/2017
Objets logiciels
Cas particuliers
Ce tableau contient une liste de cas particuliers du Message :
Cas particulier
Description
Effet d'un redémarrage à froid (%S0=1) ou INIT Force la réinitialisation de la communication.
Effet d'un redémarrage à chaud (%S1=1)
Aucun effet
Effet d'un arrêt du contrôleur
Si un message est en cours d'émission, le contrôleur
interrompt le transfert et réinitialise les sorties %MSGx.D et
%MSGx.E.
NOTE : L'effet de INIT est identique à celui de %S0=1.
Limitations
Prenez note des limitations suivantes :
 La disponibilité du port 2 (pour le protocole ASCII) et son type (voir %SW7) ne sont vérifiés qu'à
la mise sous tension ou à la réinitialisation.
 La présence du port 2 (pour le protocole Modbus) et sa configuration (RS-485) sont vérifiées
lors de la mise sous tension ou de la réinitialisation.
 Tout message en cours de traitement sur le port 1 est abandonné lorsque SoMachine Basic est
connecté.
 Les instructions Exchange abandonnent le traitement des esclaves Modbus actifs.
 Le traitement des instructions Exchange ne reprend pas en cas d'erreur détectée.
 Il est possible d'utiliser l'entrée RAZ pour annuler le traitement de la réception d'une instruction
Exchange.
 Les instructions Exchange sont configurées avec un timeout si le protocole Modbus est utilisé.
 Les messages multiples sont contrôlés via %MSGx.D
EIO0000001475 12/2017
203
Objets logiciels
Configuration de la table d'émission/réception
La taille maximale des trames émises et/ou reçues est de :
250 octets pour le protocole Modbus ;
 256 octets pour le protocole ASCII.

En outre, la table de mots associée à l'instruction Exchange comprend les tables de contrôle,
d'émission et de réception :
Octet de poids fort
Modbus
Table de contrôle
Commande
Décalage réception
Table d'émission
Octet de poids faible
ASCII
Octet 1 émis
...
Modbus
ASCII
Longueur (émission/réception)
Réservé (0)
Décalage émission
Réservé (0)
Octet 2 émis
...
Octet n émis
Octet n+1 émis
Table de réception
Octet 1 reçu
...
Octet 2 reçu
...
Octet p reçu
Octet p+1 reçu
NOTE : Le contrôleur maître Modbus peut envoyer des requêtes à des esclaves individuellement,
mais aussi une diffusion générale à tous les esclaves. En cas de diffusion générale, l'octet
Commande doit être mis à 00, et l'adresse de l'esclave à 0.
Table de contrôle du protocole ASCII
L'octet Longueur contient la longueur de la table d'émission (250 octets max.), qui est remplacée
par le nombre de caractères reçus à la fin de la réception, si la réception est demandée.
L'octet Commande doit contenir l'une des valeurs suivantes :
0 : émission seule
 1 : émission/réception
 2 : réception seule

204
EIO0000001475 12/2017
Objets logiciels
Table de contrôle du protocole Modbus
L'octet Longueur contient la longueur de la table d'émission (250 octets max.), qui est remplacée
par le nombre de caractères reçus à la fin de la réception, si la réception est demandée.
Ce paramètre correspond à la longueur en octets de la table d'émission. Si le paramètre Décalage
émission est égal à 0, ce paramètre sera égal à la longueur de la trame d'émission. Si le paramètre
Décalage émission est différent de 0, un octet de la table d'émission (indiqué par la valeur de
décalage) ne sera pas émis et ce paramètre sera égal à la longueur de la trame plus 1.
En cas de requête Modbus RTU (sauf pour une diffusion générale), l'octet Commande doit toujours
être égal à 1 (Tx et Rx). Pour une diffusion générale, il doit être égal à 0.
L'octet Décalage émission contient le rang (1 pour le premier octet, 2 pour le deuxième octet, etc.)
dans la table d'émission de l'octet à ignorer, lors de l'émission des octets. Il permet de gérer les
problèmes liés aux valeurs d'octet/de mot dans le protocole Modbus. Par exemple, si cet octet est
égal à 3, le troisième octet est ignoré, ce qui fait du quatrième octet de la table le troisième octet à
émettre.
L'octet Décalage réception contient le rang (1 pour le premier octet, 2 pour le deuxième octet, etc.)
dans la table de réception à ajouter, lors de l'émission des octets. Il permet de gérer les problèmes
liés aux valeurs d'octet/de mot dans le protocole Modbus. Par exemple, si cet octet contenait 3, le
troisième octet de la table prendrait la valeur 0 et le troisième octet reçu serait stocké dans le
quatrième emplacement de la table.
Tables d'émission/réception du protocole ASCII
En mode émission seule, les tables de contrôle et d'émission de type %MW sont remplies avant
l'exécution de l'instruction Exchange (EXCH). Aucun espace n'est requis pour la réception de
caractères en mode émission seule. Une fois tous les octets émis, %MSGx.D est mis à 1 et une
nouvelle instruction Exchange (EXCH) peut être exécutée.
En mode émission/réception, les tables de contrôle et d'émission sont remplies avant l'exécution
de l'instruction Exchange. Elles doivent être de type %MW. Un espace pouvant accueillir jusqu'à
256 octets de réception est requis à la fin de la table d'émission. Une fois tous les octets émis, le
contrôleur logique passe en mode réception et est prêt à recevoir des octets.
En mode réception seule, la table de contrôle est remplie avant l'exécution de l'instruction
Exchange. Elle doit être de type %MW. Un espace pouvant accueillir jusqu'à 256 octets de réception
est requis à la fin de la table de contrôle. Le contrôleur logique passe immédiatement en mode
réception et est prêt à recevoir des octets.
La réception est terminée une fois que les octets de fin de trame utilisés ont été reçus ou lorsque
la table de réception est pleine. Dans ce cas, un code d'erreur détectée (table de réception
saturée) s'affiche dans les mots système %SW63 et %SW64. Si un timeout non nul est configuré, la
réception se termine à l'expiration du timeout. Si vous sélectionnez une valeur de timeout nulle, il
n'existe aucun timeout de réception. Par conséquent, pour arrêter la réception, vous devez activer
l'entrée %MSGx.R.
EIO0000001475 12/2017
205
Objets logiciels
Table d'émission/réception du protocole Modbus
Dans l'un ou l'autre mode (Modbus ASCII ou Modbus RTU), le contenu de la requête est stocké
dans la table d'émission, avant l'exécution de l'instruction Exchange (EXCH). Lors de l'exécution,
le contrôleur logique identifie la couche de liaison de données et effectue toutes les conversions
nécessaires pour traiter l'émission et la réponse. Les caractères de début, de fin et de contrôle ne
sont pas stockés dans les tables d'émission/réception.
Une fois tous les octets émis, le contrôleur logique passe en mode réception et est prêt à recevoir
des octets.
La réception se termine de l'une des manières suivantes :
un timeout est détecté sur un caractère ou une trame ;
 des caractères de fin de trame sont reçus en mode ASCII ;
 la table de réception est saturée.

Les x entrées Octet émis contiennent les données Modbus (codage RTU) à émettre. Si le port de
communication est configuré en Modbus ASCII, les caractères de trame corrects sont ajoutés à
l'émission. Le premier octet contient l'adresse de l'équipement (spécifique ou diffusion générale),
le deuxième octet contient le code de fonction, et le reste contient les informations associées à ce
code de fonction.
NOTE : Il s'agit d'une application type, mais toutes les possibilités ne sont pas définies. Aucune
validation des données en cours d'émission n'est effectuée.
Les x entrées Octets reçus contiennent les données Modbus (codage RTU) à recevoir. Si le port
de communication est configuré en Modbus ASCII, les caractères de trame corrects sont
supprimés de la réponse. Le premier octet contient l'adresse de l'équipement, le deuxième octet
contient le code de fonction (ou code de réponse), et le reste contient les informations associées
à ce code de fonction.
NOTE : Il s'agit d'une application type, mais toutes les possibilités ne sont pas définies. Aucune
validation des données en cours de réception n'est effectuée, à l'exception de la vérification de la
somme de contrôle.
206
EIO0000001475 12/2017
Objets logiciels
Exemple de programmation
Introduction
Les exemples ci-dessous illustrent la programmation d'un bloc fonction Message.
Programmation de l'émission de plusieurs messages successifs
L'exécution de l'instruction Exchange active un bloc fonction Message dans le programme
d'application. Le message est transmis si le bloc fonction Message n'est pas déjà actif
(%MSGx.D = 1). Si plusieurs messages sont envoyés au cours du même cycle, seul le premier
est émis à l'aide du même port.
Exemple d'émission de deux messages successifs sur le port 1 :
Réseau
Instruction réversible
Commentaire
0
LD
%M142
[%MW2:=16#0106]
[%MW3:=0]
[%MW4:=16#0106]
[%MW5:=4]
[%MW6:=7]
Ecriture sur un esclave, à l'adresse 1 : valeur 7 sur le registre 4.
[%MW2:=16#0106] : code de commande : 01 hex, longueur
d'émission : 06 hex
[%MW3:=0] : aucun décalage de réception ou d'émission
[%MW4:=16#0106] adresse esclave : 01 hex, code de fonction :
06 hex (Écriture d'un registre)
[%MW5:=4] : adresse du registre
[%MW6:=7] : valeur à écrire
1
LD
AND
[EXCH1
R
%MSG1.D
%M0
%MW2:8]
%M0
%MSG2.D : détecte si le port est occupé ou non, et gère la
coordination de plusieurs messages.
2
LDR
AND
[EXCH1
S
%I0.0
%MSG1.D
%MW2:8]
%M0
–
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
EIO0000001475 12/2017
207
Objets logiciels
Programmation d'un échange de réinitialisation
Pour annuler un échange, activez l'entrée (ou l'instruction) R. Cette entrée initialise la
communication et remet la sortie %MSGx.E à 0 et la sortie %MSGx.D à 1. Il est possible de
réinitialiser un échange si une erreur est détectée.
Exemple de réinitialisation d'un échange :
Réseau
Instruction réversible
Commentaire
0
BLK
%MSG1
LD
%M0
R
END_BLK
–
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
208
EIO0000001475 12/2017
Objets logiciels
Exemples ASCII
Ecriture d'application
Exemple d'application ASCII :
Réseau
Instruction
Commentaire
0
LD
1
[%MW10:=16#0104]
[%MW11:=16#0000]
[%MW12:=16#4F4B]
[%MW10:=16#0104] : code de commande : 01 hex, longueur
d'émission : 04 hex
[%MW11:=16#0000] : 0000 : null
[%MW12:=16#4F4B] : OK
1
LD
1
AND %MSG2.D
[EXCH2 %MW10:8]
NOTE : cette table comporte huit éléments :
2
LD
ST
END
%MSG2.E
%Q0.0
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Utilisez SoMachine Basic pour créer un programme contenant trois réseaux :
Tout d'abord, initialisez les tables de contrôle et d'émission à utiliser pour l'instruction Exchange
Dans cet exemple, une commande est configurée pour envoyer et recevoir des données. Le
volume de données à envoyer est de 4 octets (comme défini dans l'application), suivis par le
caractère de fin de trame spécifié dans la configuration. Les caractères de début et de fin ne
sont pas affichés dans la table d'animation, où seuls les caractères de données apparaissent.
Quoi qu'il en soit, ces caractères sont automatiquement émis ou vérifiés lors de la réception (par
%SW63 et %SW64), lorsqu'ils sont utilisés.
NOTE : Les caractères de fin définis dans la configuration sont envoyés automatiquement dans
la fin de la trame. Par exemple, si vous avez configuré 10 comme premier caractère de fin de
trame et 13 comme deuxième caractère de fin de trame, 16#0A0D (codes ASCII, 0A = LF et
0D = CR) est envoyé dans la fin de la trame.



Vérifiez ensuite le bit d'état associé à %MSG2 et exécutez l'instruction EXCH2 uniquement si le
port est prêt. Une valeur de 8 mots est spécifiée pour l'instruction EXCH2. Il existe deux mots de
contrôle (%MW10 et %MW11), deux mots à utiliser pour émettre des informations (%MW12 et
%MW13) et quatre mots pour recevoir des données (%MW14 à %MW17).
Enfin, l'état d'erreur de %MSG2 est détecté et stocké dans le premier bit de sortie des E/S locales
du contrôleur de base. Pour accroître la précision, il est possible d'effectuer un traitement
supplémentaire à l'aide de %SW64.
EIO0000001475 12/2017
209
Objets logiciels
Initialisation de la table d'animation
Exemple d'initialisation d'une table d'animation en mode en ligne :
Adresse
Valeur
Format
%MW10
0104
Hexadécimal
%MW11
0000
Hexadécimal
%MW12
4F4B
Hexadécimal
%MW13
0A0D
Hexadécimal
%MW14
AL
ASCII
%MW15
OH
ASCII
%MW16
A
ASCII
Pour afficher les formats possibles, cliquez avec le bouton droit de la souris sur le champ Valeurs
dans une table d'animation.
L'étape finale consiste à charger cette application sur le contrôleur et à l'exécuter. Initialisez une
table d'animation pour animer et afficher les mots %MW10 à %MW16. Ces informations sont
échangées avec un Logic Controller et affichées dans une table d'animation.
210
EIO0000001475 12/2017
Objets logiciels
Requêtes et exemples Modbus standard
Maître Modbus : lecture de N bits
Cette table représente les requêtes 01 et 02 (01 pour le bit mémoire ou de sortie, 02 pour le bit
d'entrée) :
Table de
contrôle
Table
d'émission
Table de
réception
(après
réponse)
Table
Index
Octet de poids fort
Octet de poids faible
0
01
(Emission/Réception)
06 (longueur d'émission)(1)
1
03 (Décalage
réception)
00 (Décalage émission)
2
Slave@(1 à 247)
01 ou 02 (Code de requête)
3
Adresse du premier bit à lire dans l'esclave
4
N1 = Nombre de bits à lire
5
Slave@(1 à 247)
01 ou 02 (Code de réponse)
6
00 (octet ajouté par
l'action de décalage
de Rx)
N2
= Nombre d'octets de données à lire
= [1+(N1-1)/8],
où le résultat est la partie entière de la division.
7
Valeur du premier bit
(valeur 00 ou 01)
convertie en un octet
Valeur du deuxième bit (si N2 > 1) convertie en
un octet
8
Valeur du troisième bit
(si N1 > 1) convertie en
un octet
–
...
…
...
(N2/2) + 6 (si N2
est pair)
(N2/2 + 1) + 6
(si N2 est impair)
ème
bit
Valeur du N2
(si N1 > 1) convertie en
un octet
–
(1) Cet octet reçoit également la longueur de la chaîne émise après réponse..
EIO0000001475 12/2017
211
Objets logiciels
Maître Modbus : lecture de N mots
Cette table représente les requêtes 03 et 04 (03 pour le mot mémoire ou de sortie, 04 pour le mot
d'entrée) :
Table de contrôle
Table d'émission
Table de réception
(après réponse)
Table
Index
Octet de poids fort
Octet de poids faible
0
01 (Emission/Réception)
06 (longueur d'émission)(1)
1
03 (Décalage réception)
00 (Décalage émission)
2
Slave@(1 à 247)
03 ou 04 (Code de requête)
3
Adresse du premier mot à lire
4
N = Nombre de mots à lire
5
Slave@(1 à 247)
03 ou 04 (Code de réponse)
6
00 (octet ajouté par l'action de
décalage de Rx)
2*N (nombre d'octets lus)
7
Premier mot lu
8
Deuxième mot lu (si N>1)
...
...
N+6
Nième mot lu (si N>2)
(1) Cet octet reçoit également la longueur de la chaîne émise après réponse..
NOTE : Le décalage de 3 de la réception ajoute un octet (valeur = 0) à la troisième position de la
table de réception. Ce qui assure un bon positionnement dans la table, du nombre d'octets lus et
des valeurs des mots lus.
212
EIO0000001475 12/2017
Objets logiciels
Maître Modbus : écriture de bit
Cette table représente la requête 05 (écriture d'un bit : sortie ou mémoire) :
Table de contrôle
Table d'émission
Table
Index
Octet de poids fort
Octet de poids faible
0
01 (Emission/Réception)
06 (longueur d'émission)(1)
1
00 (Décalage réception)
00 (Décalage émission)
2
Slave@(1 à 247) ou 0 en cas de
diffusion
05 (Code de requête)
3
Valeur pour écrire l'octet de poids fort du mot d'index 4 ; 0xFF ou 0x00(2).
4
Valeur du bit à écrire dans l'esclave (16#0000 = False et 16#FF00 = True)
Table de réception 5
(après réponse)
6
7
Slave@(1 à 247)
05 (Code de réponse)
Adresse du bit écrit
Valeur écrite
(1) Cet octet reçoit également la longueur de la chaîne émise après réponse..
(2) Pour affecter la valeur 1 à un bit, le mot associé dans la table d'émission doit contenir la valeur FF00H,
et 0 pour affecter la valeur 0 à un bit.
NOTE :
Il n'est pas nécessaire d'utiliser le décalage pour cette requête.
 La trame de la réponse est identique à celle de la requête (normalement).

EIO0000001475 12/2017
213
Objets logiciels
Maître Modbus : écriture de mot
Cette table représente la requête 06 (écriture d'un mot : sortie ou mémoire) :
Table de contrôle
Table d'émission
Table de réception
(après réponse)
Table
Index
Octet de poids fort
Octet de poids faible
0
01 (Emission/Réception)
06 (longueur d'émission)(1)
1
00 (Décalage réception)
00 (Décalage émission)
2
Slave@(1 à 247) ou 0 en cas de 06 (Code de requête)
diffusion
3
Adresse du mot à écrire
4
Valeur du mot à écrire
5
Slave@(1 à 247)
6
Adresse du mot écrit
7
Valeur écrite
06 (Code de réponse)
(1) Cet octet reçoit également la longueur de la chaîne émise après réponse..
NOTE :
Il n'est pas nécessaire d'utiliser le décalage pour cette requête.
 La trame de la réponse est identique à celle de la requête (normalement).

214
EIO0000001475 12/2017
Objets logiciels
Maître Modbus : écriture de N bits
Cette table représente la requête 15 (écriture de N bits : sortie ou mémoire) :
Table
Index
Octet de poids fort
Octet de poids faible
Table de
contrôle
0
01 (Emission/Réception) 8 + nombre d'octets (émission)
1
00 (Décalage réception)
Table
d'émission
2
Slave@(1 à 247) ou 0 en 15 (Code de requête)
cas de diffusion
07 (Décalage émission)
3
Adresse du premier bit à écrire
4
N1 = Nombre de bits à écrire
5
00 (octet non envoyé,
effet de décalage)
N2
= Nombre d'octets de données à écrire
= [1+(N1-1)/8],
où le résultat est la partie entière de la
division.
6
Valeur du premier octet
Valeur du deuxième octet
7
Valeur du troisième octet Valeur du quatrième octet
...
…
...
(N2/2) + 5 (si N2 est pair) Valeur du N2ème octet
(N2/2 + 1) + 5 (si N2 est
impair)
Table de
réception
(après
réponse)
–
Slave@(1 à 247)
15 (Code de réponse)
–
Adresse du premier bit écrit
–
Nombre de bits écrits (= N1)
NOTE : Le décalage d'émission de 7 supprime le septième octet de la trame envoyée. Ceci permet
également d'assurer une bonne correspondance avec les valeurs des mots dans la table
d'émission.
EIO0000001475 12/2017
215
Objets logiciels
Maître Modbus : écriture de N mots
La table suivante représente la requête 16 :
Table
Index
Table de contrôle
Table d'émission
Table de réception
(après réponse)
Octet de poids fort
Octet de poids faible
0
01 (Emission/Réception)
8 + (2*N) (Longueur émission)
1
00 (Décalage réception)
07 (Décalage émission)
2
Slave@(1 à 247) ou 0 en cas de 16 (Code de requête)
diffusion
3
Adresse du premier mot à écrire
4
N = Nombre de mots à écrire
5
00 (octet non envoyé, effet de
décalage)
6
Première valeur de mot à écrire
7
Deuxième valeur à écrire
...
...
N+5
N valeurs à écrire
N+6
Slave@(1 à 247)
N+7
Adresse du premier mot écrit
N+8
Nombre de mots écrits (= N)
2*N = Nombre d'octets à écrire
16 (Code de réponse)
NOTE : Le décalage d'émission de 7 supprime le septième octet de la trame envoyée. Ceci permet
également d'assurer une bonne correspondance avec les valeurs des mots dans la table
d'émission.
Requête Modbus : lire l'identification des équipements
Cette table représente la requête 43 (lire l'identification des équipements) :
216
Réseau
Instruction
Commentaire
0
LD
1
[%MW800:=16#0105]
[%MW801:=16#0000]
[%MW802:=16#032B]
[%MW803:=16#0E01]
[%MW804:=16#0000]
[%MW800:=16#0105] : en-tête Modbus standard
[%MW801:=16#0000] : aucun décalage d'émission et de
réception
[%MW802:=16#032B] : adresse de l'esclave, code fonction
[%MW803:=16#0E01] : type MEI, lecture du code d'identification
des équipements
[%MW804:=16#0000] : ID d'objet, inutilisé
EIO0000001475 12/2017
Objets logiciels
Requête Modbus : diagnostic
Cette table représente la requête 8 (diagnostic) :
Réseau
Instruction
Commentaire
0
LD
1
[%MW1000:=16#0106]
[%MW1001:=16#0000]
[%MW1002:=16#0308]
[%MW1003:=16#0000]
[%MW1004:=16#1234]
[%MW1000:=16#0106] : en-tête Modbus standard
[%MW1001:=16#0000] : aucun décalage d'émission et de
réception
[%MW1002:=16#0308] : adresse de l'esclave, code fonction
[%MW1003:=16#0000] : code de sous-fonction
[%MW1004:=16#1234] : toute donnée
L'esclave répond en envoyant une copie de la requête. Ce mode
est appelé Echo ou Miroir.
Exemple 1 : écriture d'application Modbus
Programme du maître :
Réseau
Instruction
Commentaire
0
LD
1
[%MW0:=16#0106]
[%MW1:=16#0300]
[%MW2:=16#0203]
[%MW3:=16#0000]
[%MW4:=16#0004]
[%MW0:=16#0106] : longueur d'émission = 6
[%MW1:=16#0300][ : décalage de réception = 3, décalage
d'émission = 0
%MW2 à %MW4 : émission
[%MW2:=16#0203] : esclave 2, fonction 3 (lecture de plusieurs
mots)
[%MW3:=16#0000] : adresse du premier mot à lire dans
l'esclave : jusqu'à l'adresse 0
[%MW4:=16#0004] : nombre de mots à lire : 4 (%MW0 à %MW3)
1
LD
1
AND %MSG2.D
[EXCH2 %MW0:11]
–
2
LD
ST
END
–
EIO0000001475 12/2017
%MSG2.E
%Q0.0
217
Objets logiciels
Programme de l'esclave :
Réseau
Instruction
Commentaire
0
LD
1
[%MW0:=16#6566]
[%MW1:=16#6768]
[%MW2:=16#6970]
[%MW3:=16#7172]
END
–
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
A l'aide de SoMachine Basic, créez un programme d'application pour le maître et l'esclave. Pour
l'esclave, écrivez des mots mémoire et attribuez-leur des valeurs connues. Dans le maître, la table
de mots de l'instruction Exchange est initialisée pour lire quatre mots sur l'esclave à l'adresse
Modbus 2, à partir de l'emplacement %MW0.
NOTE : Remarquez l'utilisation du décalage de réception défini dans le mot %MW1 du maître
Modbus. Ce décalage de trois ajoute un octet (valeur = 0) à la troisième position de la zone de
réception de la table. Il permet d'aligner les mots dans le maître de façon à ce qu'ils correspondent
exactement aux limites de mot. Sans ce décalage, chaque mot de données serait fractionné en
deux dans le bloc Exchange. Ce décalage est utilisé pour des raisons de commodité.
Avant d'exécuter l'instruction EXCH, l'application vérifie le bit de communication associé à %MSG2.
Enfin, l'état d'erreur de %MSG2 est détecté et stocké dans le premier bit de sortie des E/S locales
du contrôleur de base. Pour accroître la précision, il est possible d'effectuer un contrôle d'erreur
supplémentaire à l'aide de %SW64.
Table d'animation s'initialisant en mode en ligne et correspondant à la partie de la table de
réception :
Adresse
Valeur
Format
%MW5
0203
Hexadécimal
%MW6
0008
Hexadécimal
%MW7
6566
Hexadécimal
%MW8
6768
Hexadécimal
%MW9
6970
Hexadécimal
%MW10
7172
Hexadécimal
Après le chargement et la configuration de chaque Logic Controller à exécuter, ouvrez une table
d'animation sur le maître. Dans la section réponse de la table, vérifiez que le code de réponse est 3
et que le nombre d'octets lus est correct. Notez également, dans cet exemple, que les mots lus sur
l'esclave (à partir de %MW7) correspondent aux limites de mot dans le maître.
218
EIO0000001475 12/2017
Objets logiciels
Exemple 2 : écriture d'application Modbus
Programme du maître :
Réseau
Instruction
Commentaire
0
LD
1
[%MW0:=16#010C]
[%MW1:=16#0007]
[%MW2:=16#0210]
[%MW3:=16#0010]
[%MW4:=16#0002]
[%MW5:=16#0004]
[%MW6:=16#6566]
[%MW7:=16#6768]
[%MW0:=16#010C] : longueur de la table d'émission :
0C hex = 12 dec, de %MW2 à %MW7
[%MW1:=16#0007]
[%MW2:=16#0210] : adresse de l'esclave 2, code fonction 10h
déclenchant l'écriture de mots
[%MW3:=16#0010] : à partir de l'adresse 16 dans l'esclave
[%MW4:=16#0002] : écriture de 2 mots
[%MW5:=16#0004] : nombre d'octets à écrire
[%MW6:=16#6566] : valeur du premier mot
[%MW7:=16#6768] : valeur du second mot
1
LD
1
AND %MSG2.D
[EXCH2 %MW0:12]
–
2
LD
ST
END
–
%MSG2.E
%Q0.0
Programme de l'esclave :
Réseau
Instruction
Commentaire
0
LD
1
[%MW18:=16#FFFF]
END
–
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
A l'aide de SoMachine Basic, créez un programme d'application pour le maître et l'esclave. Pour
l'esclave, écrivez un mot mémoire unique %MW18. Cela allouera sur l'esclave l'espace nécessaire
aux adresses mémoire de %MW0 à %MW18. Sans cet espace, la requête Modbus tenterait d'écrire
dans des emplacements qui n'existent pas sur l'esclave.
Dans le maître, la table de mots de l'instruction EXCH2 est initialisée pour lire 4 octets sur l'esclave
à l'adresse Modbus 2 et à l'adresse %MW16 (10 en hexadécimal).
NOTE : Remarquez l'utilisation du décalage d'émission défini dans le mot %MW1 de l'application
maître Modbus. Ce décalage de sept supprime l'octet de poids fort dans le sixième mot (valeur 00
hexadécimale dans %MW5). Cette action permet d'aligner les valeurs de données dans la table
d'émission de la table de mots, de façon à ce qu'elles respectent les limites de mot.
EIO0000001475 12/2017
219
Objets logiciels
Avant d'exécuter l'instruction EXCH2, l'application vérifie le bit de communication associé à %MSG2.
Enfin, l'état d'erreur de %MSG2 est détecté et stocké dans le premier bit de sortie des E/S locales
du contrôleur de base. Pour accroître la précision, il est possible d'effectuer un contrôle
supplémentaire d'erreur détectée à l'aide de %SW64.
Initialisation d'une table d'animation sur le maître :
Adresse
Valeur
Format
%MW0
010C
Hexadécimal
%MW1
0007
Hexadécimal
%MW2
0210
Hexadécimal
%MW3
0010
Hexadécimal
%MW4
0002
Hexadécimal
%MW5
0004
Hexadécimal
%MW6
6566
Hexadécimal
%MW7
6768
Hexadécimal
%MW8
0210
Hexadécimal
%MW9
0010
Hexadécimal
%MW10
0004
Hexadécimal
Initialisation d'une table d'animation sur l'esclave :
Adresse
Valeur
Format
%MW16
6566
Hexadécimal
%MW17
6768
Hexadécimal
Après le chargement et la configuration de chaque Logic Controller à exécuter, ouvrez une table
d'animation sur le contrôleur esclave. Les deux valeurs de %MW16 et %MW17 sont écrites sur
l'esclave.
Dans le maître, il est possible d'utiliser la table d'animation pour examiner la partie table de
réception des données d'échange. Ces données affichent l'adresse de l'esclave, le code de
réponse, le premier mot écrit et le nombre de mots écrits à partir de %MW8 dans l'exemple cidessus.
220
EIO0000001475 12/2017
Objets logiciels
Sous-chapitre 6.5
LIFO/FIFO Register (%R)
LIFO/FIFO Register (%R)
Utilisation des blocs fonction LIFO/FIFO Register
Cette section fournit des descriptions et des conseils de programmation pour utiliser les blocs
fonction LIFO/FIFO Register.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
Page
Description
222
Configuration
224
Fonction du registre LIFO
226
Fonctionnement du registre FIFO
227
Exemple de programmation
228
EIO0000001475 12/2017
221
Objets logiciels
Description
Introduction
Le bloc fonction LIFO/FIFO Register
est un bloc mémoire capable de stocker jusqu'à
16 mots de 16 bits de deux manières différentes :
 dans une file d'attente, appelée "FIFO" (First In, First Out – Premier entré, Premier sorti) ;
 dans une pile, appelée "LIFO" (Last In, First Out – Dernier entré, Premier sorti).
Illustration
Cette illustration décrit le bloc fonction LIFO/FIFO Register.
Entrées
Le bloc fonction LIFO/FIFO Register a les entrées suivantes :
222
Libellé
Description
Valeur
R
Entrée
(ou instruction) de
RAZ
A l'état 1, initialise le bloc fonction LIFO/FIFO Register.
I
Entrée
(ou instruction) de
stockage
En cas de front montant, stocke le contenu du mot associé %Ri.I dans
le bloc fonction LIFO/FIFO Register.
O
Entrée
(ou instruction) de
récupération
En cas de front montant, charge un mot de données du bloc fonction
LIFO/FIFO Register dans le mot associé %Ri.O.
EIO0000001475 12/2017
Objets logiciels
Sorties
Le bloc fonction LIFO/FIFO Register a les sorties suivantes :
Libellé
Description
E
Sortie vide (%Ri.E) Le bit associé %Ri.E indique que le bloc fonction LIFO/FIFO
Register est vide. La valeur de %Ri.E peut être testée, par exemple
dans une table d'animation ou avec une instruction.
F
Sortie pleine
(%Ri.F)
EIO0000001475 12/2017
Valeur
Le bit associé %Ri.F indique que le bloc fonction LIFO/FIFO
Register est saturé. La valeur de %Ri.F peut être testée, par exemple
dans une table d'animation ou avec une instruction.
223
Objets logiciels
Configuration
Paramètres
Pour configurer les paramètres, suivez la procédure Configuration d'un bloc fonction
(voir page 176) et lisez la description des Modes d'allocation de mémoire dans le document
SoMachine Basic - Guide d'utilisation.
Le bloc fonction LIFO/FIFO Register a les paramètres suivants :
Paramètre
Description
Valeur
Modifiable
en mode
en ligne ?
Utilisée
Adresse utilisée
Si ce paramètre est sélectionné, cette adresse est utilisée Non
dans un programme.
Adresse
Adresse de l'objet
LIFO/FIFO Register
Un programme ne peut contenir qu'un nombre limité
d'objets LIFO/FIFO Register. Consultez le Guide de
programmation de la plate-forme matérielle pour
connaître le nombre maximum de registres.
Non
Symbole
Symbole
Symbole associé à cet objet. Pour plus d'informations,
consultez la section Définition et utilisation des symboles
(voir SoMachine Basic, Guide d'utilisation) dans le
document SoMachine Basic - Guide d'utilisation.
Non
Type
Type LIFO/FIFO
Register
FIFO (first in, first out) ou LIFO (last in, first out).
Oui
Commentaire
Commentaire
Un commentaire peut être associé à cet objet.
Non
Objets
Le bloc fonction LIFO/FIFO Register comporte les objets suivants :
224
Objet
Description
Valeur
%Ri.I
Mot d'entrée du bloc
LIFO/FIFO Register
Peut être lu, testé et écrit.
Peut être modifié dans une table d'animation.
%Ri.O
Mot de sortie du bloc
LIFO/FIFO Register
Peut être lu, testé et écrit.
Peut être modifié dans une table d'animation.
%Ri.E
Sortie vide
Consultez le tableau Sorties ci-dessus.
%Ri.F
Sortie pleine
Consultez le tableau Sorties ci-dessus.
EIO0000001475 12/2017
Objets logiciels
Cas particuliers
Ce tableau contient une liste de cas particuliers de programmation du LIFO/FIFO Register :
Cas particulier
Description
Effet d'un redémarrage à froid (%S0=1) ou INIT Initialise le contenu du bloc LIFO/FIFO Register. Le bit
de sortie %Ri.E associé à la sortie E est mis à 1.
Effet d'un redémarrage à chaud (%S1=1) ou
d'un arrêt du contrôleur
Aucun effet sur la valeur courante du bloc LIFO/FIFO
Register ou sur l'état de ses bits de sortie.
Front montant détecté sur %Ri.O et %Ri.I
Si un front montant sur %Ri.O et %Ri.I est détecté dans le
même appel de bloc fonction LIFO/FIFO Register, les
valeurs ne sont ni stockées, ni extraites votre programme
doit gérer le stockage ou l'extraction des valeurs.
NOTE : L'effet de INIT est identique à celui de %S0=1.
EIO0000001475 12/2017
225
Objets logiciels
Fonction du registre LIFO
Introduction
En fonctionnement LIFO (Last In, First Out), la dernière information entrée est la première à être
récupérée.
Fonctionnement
Ce tableau décrit le fonctionnement LIFO :
Etape
226
Description
Exemple
1
Stockage :
Lorsqu'une demande de stockage est reçue (front
montant sur l'entrée I ou activation de l'instruction I), le
contenu du mot d'entrée %Ri.I est stocké en haut de la
pile (fig. a). Lorsque la pile est pleine (sortie F=1),
aucun autre stockage n'est possible.
2
Récupération :
Lors de la réception d'une demande de récupération
(front montant sur l'entrée
O ou activation de l'instruction O), le mot de données le
plus haut (dernier mot entré) est chargé dans le mot
%Ri.O (fig. b). Lorsque le bloc fonction LIFO/FIFO
Register est vide (sortie E=1), aucune autre
récupération n'est possible. Le mot de sortie %Ri.O
n'est pas modifié et conserve sa valeur.
3
Réinitialisation :
–
La pile peut être réinitialisée à tout moment (état 1 sur
l'entrée R ou activation de l'instruction R). La pile est vide
après une réinitialisation (%Ri.E =1).
EIO0000001475 12/2017
Objets logiciels
Fonctionnement du registre FIFO
Introduction
En fonctionnement FIFO (First In, First Out), la première information entrée est la première à être
récupérée.
Fonctionnement
Ce tableau décrit le fonctionnement FIFO :
Etape
Description
1
Stockage :
Lorsqu'une demande de stockage est reçue (front
montant sur l'entrée I ou activation de l'instruction I), le
contenu du mot d'entrée %Ri.I est stocké en haut de la
file d'attente (fig. a). Lorsque la file d'attente est pleine
(sortie F=1), aucun autre stockage n'est possible.
2
Récupération :
Lors de la réception d'une demande de récupération
(front montant sur l'entrée O ou activation de l'instruction
O), le mot de données le plus bas dans la file d'attente est
chargé dans le mot de sortie %Ri.O et le contenu du bloc
fonction LIFO/FIFO Register est décalé d'une place
vers le bas dans la file d'attente (fig. b).
Lorsque le bloc fonction LIFO/FIFO Register est
vide (sortie E=1), aucune autre récupération n'est
possible. Le mot de sortie %Ri.O n'est pas modifié et
conserve sa valeur.
3
Réinitialisation :
La file d'attente peut être réinitialisée à tout moment
(état 1 sur l'entrée R ou activation de l'instruction R).
La file d'attente est vide après une réinitialisation
(%Ri.E =1).
EIO0000001475 12/2017
Exemple
–
227
Objets logiciels
Exemple de programmation
Introduction
L'exemple de programmation suivant montre le contenu d'un mot mémoire (%MW34) chargé dans
un bloc fonction LIFO/FIFO Register (%R2.I) en cas de réception d'une requête de stockage
(%I0.2) si le bloc fonction LIFO/FIFO Register %R2 n'est pas saturé (%R2.F = 0). La requête
de stockage dans le LIFO/FIFO Register est émise par %M1. La demande de récupération est
confirmée par l'entrée %I0.3, et %R2.O est chargé dans %MW20 si le registre n'est pas vide
(%R2.E = 0).
Programmation
Voici un exemple de LIFO/FIFO Register avec des instructions réversibles :
228
Réseau
Instruction réversible
0
BLK %R2
LD
%M1
I
LD
%I0.3
ANDN %R2.E
O
END_BLK
1
LD
%I0.3
[%MW20:=%R2.O]
2
LD
%I0.2
ANDN %R2.F
[%R2.I:=%MW34]
ST
%M1
EIO0000001475 12/2017
Objets logiciels
Voici un exemple du même bloc fonction LIFO/FIFO Register avec des instructions non
réversibles :
Réseau
Instruction non réversible
0
LD
I
1
LD
%I0.3
ANDN %R2.E
O
%R2
2
LD
%I0.3
[%MW20:=%R2.O]
3
LD
%I0.2
ANDN %R2.F
[%R2.I:=%MW34]
ST
%M1
%M1
%R2
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
EIO0000001475 12/2017
229
Objets logiciels
Sous-chapitre 6.6
Drums (%DR)
Drums (%DR)
Utilisation des blocs fonction Drum
Cette section décrit l'utilisation des blocs fonction Drum et fournit des conseils de programmation.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
230
Page
Description
231
Configuration
232
Exemple de programmation
235
EIO0000001475 12/2017
Objets logiciels
Description
Introduction
Le bloc fonction Drum
fonctionne selon un principe semblable à celui des contrôleurs de type
programmateurs cycliques (drums) électromécaniques qui permettent de modifier le pas en
fonction d'événements externes. A chaque étape, le point haut d'une came donne une commande
exécutée ensuite par le contrôleur. Dans le cas d'un bloc fonction Drum, ces points hauts sont
symbolisés par l'état 1 à chaque étape et sont affectés à des bits de sortie %Qi.j ou des bits
mémoire %Mi.
Illustration
L'illustration suivante représente le bloc fonction Drum en mode hors ligne.
Etapes Affiche le nombre total d'étapes configurées dans l'Assistant Drum.
Etape S'affiche en mode hors ligne lors de la création d'un bloc. En mode en ligne, affiche le numéro de l'étape
courante.
Entrées
Le bloc fonction Drum a les entrées suivantes :
Libellé
Description
Valeur
R
Retour à l'étape (ou à
l'instruction) 0
A l'état 1, règle le bloc fonction Drum sur l'étape 0.
U
Entrée (ou instruction)
d'avancement
En cas de front montant, provoque le passage du bloc fonction Drum
à l'étape suivante et met à jour les bits de contrôle.
Sorties
Le bloc fonction Drum comporte la sortie suivante :
Libellé
Description
Valeur
F
Sortie (%DRi.F)
Indique que l'étape courante est égale à la dernière étape définie.
Le bit associé %DRi.F peut être testé.
EIO0000001475 12/2017
231
Objets logiciels
Configuration
Paramètres
Pour configurer les paramètres, suivez la procédure Configuration d'un bloc fonction
(voir page 176) et lisez la description des Modes d'allocation de mémoire dans le document
SoMachine Basic - Guide d'utilisation.
Le bloc fonction Drum a les paramètres suivants :
Paramètre
Description
Valeur
Modifiable en
mode en
ligne ?
Utilisée
Adresse utilisée
Si ce paramètre est sélectionné, cette
adresse est utilisée dans un programme.
Non
Adresse
Adresse de l'objet
Drum
Un programme ne peut contenir qu'un
Non
nombre limité d'objets Drum. Pour connaître
le nombre maximum d'objets Drum, consultez
le Guide de programmation de votre
contrôleur.
Symbole
Symbole
Symbole associé à cet objet. Pour plus
Non
d'informations, consultez la section Définition
et utilisation des symboles (voir SoMachine
Basic, Guide d'utilisation) dans le document
SoMachine Basic - Guide d'utilisation.
Configuration
Assistant Drum
Permet d'afficher l'Assistant Drum
(voir page 233).
Commentaire
Commentaire
Un commentaire peut être associé à cet objet. Non
Oui (tous les
paramètres
de la fenêtre
Assistant
Drum)
Objets
Le bloc fonction Drum comporte les objets suivants :
232
Objet
Description
Valeur
%DRi.S
Numéro de l'étape
courante
0<=%DRi.S<=7. Mot pouvant être lu et écrit. La valeur écrite
doit être une valeur décimale immédiate. Une fois écrite, la
valeur sera prise en compte à la prochaine exécution du bloc
fonction.
Peut être modifié dans une table d'animation ou en mode en
ligne.
%DRi.F
Complet
Consultez le tableau Sorties (voir page 231).
EIO0000001475 12/2017
Objets logiciels
Fonctionnement
Le bloc fonction Drum est composé :
d'une matrice de données constantes (les cames) organisées en huit étapes (0 à 7) et 16 bits
de données (état de l'étape) disposés en colonnes numérotées de 0 à 15 ;
 d'une liste de bits de contrôle associée à une sortie configurée (%Qi.j) ou à un mot mémoire
(%Mi). Pendant l'étape en cours, les bits de contrôle prennent les états binaires définis pour
cette étape.

Assistant Drum
L'Assistant Drum permet de configurer le bloc fonction Drum.
Configurez le nombre d'étapes (1 à 8) et les sorties ou bits mémoire associés à chacune (Bit0 à
Bit15), puis cliquez sur OK.
NOTE : la configuration est également possible à l'aide des bits mémoire (%Mi).
EIO0000001475 12/2017
233
Objets logiciels
Cas particuliers
Ce tableau contient une liste de cas particuliers de Drum :
Cas particulier
Description
Effets d'un redémarrage à froid Réinitialise le bloc fonction Drum sur l'étape 0 (mise à jour des bits de
(%S0=1)
contrôle).
Effet d'un redémarrage à
chaud (%S1=1)
Met à jour les bits de contrôle après l'étape courante.
Effet d'un saut de programme
L'arrêt de la scrutation du bloc fonction Drum implique que les bits de
contrôle conservent leur dernier état.
Mise à jour des bits de contrôle Survient uniquement en cas de changement d'étape ou lors d'un démarrage
à froid ou à chaud.
234
EIO0000001475 12/2017
Objets logiciels
Exemple de programmation
Introduction
Voici un exemple de programmation d'un bloc fonction Drum configuré de telle sorte qu'aucune des
commandes ne soit définie à l'étape 0, mais qu'elles le soient pour les étapes 1 à 6 sur les sorties
%Q0.0 à %Q0.5 respectivement (consultez la section Configuration (voir page 237)).
Les 6 premières sorties %Q0.0 à %Q0.5 sont activées successivement chaque fois que l'entrée
%I0.1 est mise à 1. A l'état 1, l'entrée %I0.0 remet les éléments suivants à 0 :
 Sortie de drum F (%DRi.F = 0)
 Numéro de l'étape courante (%DRi.S = 0)
Programmation
Voici un exemple de programme de bloc fonction Drum :
Réseau
Instruction
0
BLK
%DR1
LD
%I0.0
R
LD
%I0.1
U
OUT_BLK
LD
F
ST
%Q0.7
END_BLK
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
EIO0000001475 12/2017
235
Objets logiciels
Chronogramme
Ce schéma illustre le fonctionnement du bloc fonction Drum :
(1)
(2)
(3)
(4)
(5)
(6)
(7)
236
Lors d'un front montant sur l'entrée U, l'étape courante est incrémentée.
Lorsque l'étape courante est mise à jour, les sorties le sont également.
Lorsque la dernière étape est atteinte, la sortie F est mis à 1.
Un front montant sur l'entrée U, lorsque la dernière étape est active, remet l'étape courante à 0.
%DR0.R = 1 (front montant), la valeur courante est mise à 0.
L'utilisateur écrit le numéro de l'étape : %DR0.S = 4.
La valeur écrite par l'utilisateur est mise à jour lors de la prochaine exécution.
EIO0000001475 12/2017
Objets logiciels
Configuration
Les informations suivantes sont définies au moment de la configuration :
Nombre d'étapes : 6
 Etats de sortie (bits de contrôle) pour chaque étape du bloc fonction Drum :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Etape 0 :
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Etape 1 :
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Etape 2 :
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
Etape 3 :
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
Etape 4 :
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
Etape 5 :
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0

Affectation des bits de contrôle :
Ce tableau présente les sorties associées aux bits de contrôle :
Bit
Sortie associée
0
Sortie non associée
1
%Q0.1
2
%Q0.2
3
%Q0.3
4
%Q0.4
5
%Q0.5
EIO0000001475 12/2017
237
Objets logiciels
Sous-chapitre 6.7
Shift Bit Register (%SBR)
Shift Bit Register (%SBR)
Utilisation de blocs fonction Shift Bit Register
Cette section fournit des descriptions et des conseils de programmation pour utiliser les blocs
fonction Shift Bit Register.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
238
Page
Description
239
Configuration
240
Exemple de programmation
242
EIO0000001475 12/2017
Objets logiciels
Description
Introduction
Le bloc fonction Shift Bit Register
la gauche ou vers la droite.
décale les bits de données binaires (0 ou 1) vers
Illustration
Cette illustration décrit le bloc fonction Shift Bit Register :
La valeur courante du bloc fonction Shift Bit Register s'affiche au centre de ce dernier :
Valeur décimale (par exemple, 7)
 Valeur binaire (par exemple, 111)
 Valeur hexadécimale (par exemple, 16#7)

Entrées
Le bloc fonction Shift Bit Register a les entrées suivantes :
Libellé
Description
Valeur
R
Entrée (ou instruction) de
RAZ
Lorsque le paramètre de fonction R est à 1, les bits 0 à 15 du registre
%SBRi.j sont réglés sur 0.
CU
Entrée (ou instruction) de
décalage à gauche
En cas de front montant, décale un bit du registre vers la gauche.
CD
Entrée (ou instruction) de
décalage à droite
En cas de front montant, décale un bit du registre vers la droite.
EIO0000001475 12/2017
239
Objets logiciels
Configuration
Paramètres
Pour configurer les paramètres, suivez la procédure Configuration d'un bloc fonction
(voir page 176) et lisez la description des Modes d'allocation de mémoire dans le document
SoMachine Basic - Guide d'utilisation.
Le bloc fonction Shift Bit Register a les paramètres suivants :
Paramètre
Description
Valeur
Utilisée
Adresse utilisée
Si ce paramètre est sélectionné, cette adresse est utilisée
dans un programme.
Adresse
Adresse de l'objet Shift Bit
Register
Un programme ne peut contenir qu'un nombre limité d'objets
Shift Bit Register. Consultez le Guide de
programmation de la plate-forme matérielle pour connaître
le nombre maximum de registres.
Symbole
Symbole
Symbole associé à cet objet. Pour plus d'informations,
consultez la section Définition et utilisation des symboles
(voir SoMachine Basic, Guide d'utilisation) dans le
document SoMachine Basic - Guide d'utilisation.
Commentaire
Commentaire
Un commentaire peut être associé à cet objet.
Objets
Le bloc fonction Shift Bit Register a les objets suivants :
240
Objet
Description
Valeur
%SBRi
Numéro de registre
0à7
Peut être modifié dans une table d'animation.
%SBRi.j
Bit de registre
Les bits 0 à 15 (j = 0 à 15) du registre à décalage peuvent
être testés par une instruction de test et écrit à l'aide d'une
instruction d'affectation.
EIO0000001475 12/2017
Objets logiciels
Fonctionnement
L'illustration suivante présente une configuration de bits avant et après une opération de
décalage :
Ceci vaut également pour une requête de décalage d'un bit vers la droite (bit 15 à bit 0) à l'aide de
l'instruction CD. Le bit 0 est perdu.
Si un registre de 16 bits n'est pas adapté, il est possible d'utiliser le programme pour utiliser
plusieurs registres en cascade.
Cas particuliers
Ce tableau contient une liste de cas particuliers de programmation du bloc fonction Shift Bit
Register :
Cas particulier
Description
Effet d'un redémarrage à froid (%S0=1)
Règle tous les bits du mot de registre sur 0.
Effet d'un redémarrage à chaud (%S1=1)
N'a aucun effet sur les bits du mot de registre.
EIO0000001475 12/2017
241
Objets logiciels
Exemple de programmation
Introduction
Le bloc fonction Shift Bit Register décale les bits de données binaires (0 ou 1) vers la
gauche ou vers la droite.
Programmation
Dans l'exemple suivant, un bit est décalé vers la gauche à chaque seconde et le bit 0 prend l'état
du bit 15.
Dans les instructions réversibles :
Réseau
Instruction réversible
0
BLK %SBR0
LD
%S6
CU
END_BLK
1
LD
ST
%SBR0.15
%SBR0.0
Dans les instructions non réversibles :
Réseau
Instruction non réversible
0
LD
CU
1
LD
ST
%S6
%SBR0
%SBR0.15
%SBR0.0
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
242
EIO0000001475 12/2017
Objets logiciels
Sous-chapitre 6.8
Step Counter (%SC)
Step Counter (%SC)
Utilisation des blocs fonction Step Counter
Cette section fournit des descriptions et des conseils de programmation pour utiliser les blocs
fonction Step Counter.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
Page
Description
244
Configuration
245
Exemple de programmation
246
EIO0000001475 12/2017
243
Objets logiciels
Description
Introduction
Un bloc fonction Step Counter
fournit une série d'étapes auxquelles des actions peuvent
être affectées. Le passage d'une étape à l'autre dépend d'événements internes ou externes.
Chaque fois qu'une étape est active, le bit associé (bit %SCi.j de Step Counter) est mis à 1.
Une seule étape d'un bloc fonction Step Counter peut être active à la fois.
Illustration
Cette illustration décrit le bloc fonction Step Counter :
Entrées
Le bloc fonction Step Counter a les entrées suivantes :
244
Libellé
Description
Valeur
R
Entrée (ou instruction) de RAZ
Lorsque le paramètre de fonction R est à 1, le bloc fonction
Step Counter est réinitialisé.
CU
Entrée (ou instruction)
d'incrémentation
En cas de front montant, elle incrémente le bloc fonction Step
Counter d'une étape.
CD
Entrée (ou instruction) de
décrémentation
En cas de front montant, elle décrémente le bloc fonction Step
Counter d'une étape.
EIO0000001475 12/2017
Objets logiciels
Configuration
Paramètres
Pour configurer les paramètres, suivez la procédure Configuration d'un bloc fonction
(voir page 176) et lisez la description des Modes d'allocation de mémoire dans le document
SoMachine Basic - Guide d'utilisation.
Le bloc fonction Step Counter a les paramètres suivants :
Paramètre
Description
Valeur
Utilisée
Adresse utilisée
Si ce paramètre est sélectionné, cette adresse est utilisée
dans un programme.
Adresse
Adresse de l'objet Step
Counter
Un programme ne peut contenir qu'un nombre limité d'objets
Step Counter. Consultez le Guide de programmation de la
plate-forme matérielle pour connaître le nombre maximum de
blocs fonction Step Counter.
Symbole
Symbole
Symbole associé à cet objet. Pour plus d'informations,
consultez la section Définition et utilisation des symboles
dans le document SoMachine Basic - Guide d'utilisation.
Commentaire
Commentaire
Un commentaire peut être associé à cet objet.
Objets
Le bloc fonction Step Counter a l'objet suivant :
Objet
Description
Valeur
%SCi.j
Bit du bloc fonction
Step Counter
Les bits de bloc fonction Step Counter 0 à 255 (j = 0 à 255)
peuvent être testés par une instruction logique de chargement
et écrits à l'aide d'une instruction d'affectation.
Peut être modifié dans une table d'animation.
Cas particulier
Ce tableau contient une liste de cas particuliers d'utilisation du bloc fonction Step Counter :
Cas particulier
Description
Effet d'un redémarrage à froid (%S0=1)
Initialise le bloc fonction Step Counter.
Effet d'un redémarrage à chaud (%S1=1)
N'a aucun effet sur le bloc fonction Step Counter.
EIO0000001475 12/2017
245
Objets logiciels
Exemple de programmation
Introduction
Voici un exemple de bloc fonction Step Counter.
Le bloc Step Counter 0 est décrémenté par l'entrée %I0.1.
 Le bloc Step Counter 0 est incrémenté par l'entrée %I0.2.
 Le bloc Step Counter 0 est remis à 0 par l'entrée %I0.3 ou lorsqu'il arrive à l'étape 3.
 L'étape 0 commande la sortie %Q0.1, l'étape 1 commande la sortie %Q0.2 et l'étape 2
commande la sortie %Q0.3.

Programmation
Voici un exemple de bloc fonction Step Counter avec des instructions réversibles :
Réseau
Instruction réversible
0
BLK
%SC0
LD
%SC0.3
OR
%I0.3
R
LD
%I0.2
CU
LD
%I0.1
CD
END_BLK
1
LD
ST
%SC0.0
%Q0.1
2
LD
ST
%SC0.1
%Q0.2
3
LD
ST
%SC0.2
%Q0.3
Voici un exemple de bloc fonction Step Counter avec des instructions non réversibles :
246
Réseau
Instruction non réversible
0
LD
OR
R
%SC0.3
%I0.3
%SC0
1
LD
CU
%I0.2
%SC0
2
LD
CD
%I0.1
%SC0
3
LD
ST
%SC0.0
%Q0.1
EIO0000001475 12/2017
Objets logiciels
Réseau
Instruction non réversible
4
LD
ST
%SC0.1
%Q0.2
5
LD
ST
%SC0.2
%Q0.3
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Chronogramme
Ce schéma illustre le fonctionnement du bloc fonction Step Counter :
(1)
(2)
(3)
(4)
(5)
L'étape 0 étant active, %SC0.0 est mis à 1.
Lors du front montant de l'entrée CU, l'étape est incrémentée et les sorties sont mises à jour.
L'étape est incrémentée et les sorties sont mises à jour.
L'étape 3 étant active, l'entrée Reset est active après un cycle d'UC.
Lorsque Reset est active, l'étape courante est mise à 0 et l'entrée de réinitialisation est mise à 0 après un
cycle d'UC.
(6) L'étape courante est incrémentée lors du front montant de l'entrée CU.
(7) Lors du front montant de l'entrée CD, l'étape est décrémentée et les sorties sont mises à jour.
EIO0000001475 12/2017
247
Objets logiciels
Sous-chapitre 6.9
Blocs horodateurs (%SCH)
Blocs horodateurs (%SCH)
Utilisation des blocs horodateurs
Cette section fournit des descriptions et des conseils de programmation pour utiliser les Schedule
blocks.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
248
Page
Description
249
Programmation et configuration
252
EIO0000001475 12/2017
Objets logiciels
Description
Introduction
Les blocs horodateurs sont utilisés pour contrôler les actions pour un mois, un jour et une heure
prédéfinis.
Les blocs horodateurs ne sont configurés qu'en SoMachine Basic ; ils ne peuvent pas être insérés
dans un réseau de programme de la même manière que les autres blocs fonction.
NOTE : Vérifiez le bit système %S51 et le mot système %SW118 pour vous assurer que l'option RTC
(Real-Time Clock) est installée. Cette option est requise pour utiliser les Schedule blocks.
Les blocs horodateurs peuvent être configurés :
dans la fenêtre des propriétés des blocs horodateurs (Onglet Outils → Blocs horodateurs) ;
 à l'aide d'objets %SCHi.xxx (voir page 250) dédiés.

Configuration des propriétés des blocs horodateurs
Pour configurer un bloc horodateur, lisez la description des Modes d'allocation de mémoire
(voir SoMachine Basic, Guide d'utilisation).
Les Schedule blocks possèdent les paramètres suivants :
Paramètre
Description
Valeur
Utilisée
Adresse utilisée
Si ce paramètre est sélectionné, cette adresse
est utilisée dans un programme.
Adresse
Adresse de l'objet Schedule blocks Un programme ne peut contenir qu'un nombre
limité d'objets Schedule blocks. Consultez le
Guide de programmation de la plate-forme
matérielle pour connaître le nombre maximum
d'objets Schedule blocks.
Configured
Indique si le numéro d'objet Schedule Si la case est cochée, il est configuré pour être
blocks sélectionné est configuré pour utilisé. Sinon, il n'est pas utilisé.
être utilisé.
Bit de sortie
Bit de sortie
L'affectation de sortie est activée par l'objet
Schedule blocks : %Mi ou %Qj.k.
Cette sortie est mise à 1 lorsque les paramètres
de date et d'heure courants sont compris entre
les paramètres de début et de fin de la période
active.
Jour de début
Jour auquel débute l'objet Schedule
blocks.
1 à 31
Mois de début
Mois auquel débute l'objet Schedule
blocks.
Schedule blocks.
EIO0000001475 12/2017
249
Objets logiciels
Paramètre
Description
Valeur
Jour de fin
Jour auquel s'arrête l'objet Schedule
blocks.
1 à 31
Mois de fin
Mois auquel s'arrête l'objet Schedule
blocks.
janvier à décembre
Heure de début
Heure du jour (avec les minutes) à
laquelle débute l'objet Schedule
blocks.
Heure : 0 à 23
Minute : 0 à 59
Heure de fin
Heure du jour (avec les minutes) à
laquelle s'arrête l'objet Schedule
blocks.
Heure : 0 à 23
Minute : 0 à 59
Lundi
Cases à cocher identifiant le ou les
jours au cours desquels sera activé
l'objet Schedule blocks.
Si la case est cochée, il est configuré pour être
utilisé. Sinon, il n'est pas utilisé.
Commentaire
Un commentaire peut être associé à cet objet.
Mardi
Mercredi
Jeudi
Vendredi
Samedi
Dimanche
Commentaire
Objets
Ces objets ne sont disponibles que si le bloc est configuré comme expliqué ci-dessus.
L'application doit être configurée avec un niveau fonctionnel (voir SoMachine Basic, Guide
d'utilisation) d'au moins Niveau 6.0.
Les objets des blocs horodateurs sont les suivants :
250
Objets
Description
%SCHi.STARTDAY
Jour auquel débute l'objet Schedule blocks.
%SCHi.STARTMONTH
Mois auquel débute l'objet Schedule blocks.
%SCHi.STARTHOUR
Heure à laquelle débute l'objet Schedule blocks.
%SCHi.STARTMIN
Minutes auxquelles débute l'objet Schedule blocks.
%SCHi.ENDDAY
Jour auquel s'arrête l'objet Schedule blocks.
%SCHi.ENDMONTH
Mois auquel s'arrête l'objet Schedule blocks.
%SCHi.ENDHOUR
Heure à laquelle s'arrête l'objet Schedule blocks.
EIO0000001475 12/2017
Objets logiciels
Objets
Description
%SCHi.ENDMIN
Minutes auxquelles s'arrête l'objet Schedule blocks.
%SCHi.DOW
Jour de la semaine d'activation de l'objet Schedule blocks.
La modification de ces valeurs d'objet dans le programme permet de modifier de manière
dynamique la configuration des blocs horodateurs. La modification est prise en compte lors de la
prochaine scrutation MAST.
Après un redémarrage à froid (%S0=1), les valeurs d'objet sont remises à la valeur définie lors de
la configuration.
Configuration des blocs horodateurs à l'aide de mots système ou de mots mémoire
Vous pouvez également configurer les Blocs horodateurs à l'aide de mots système ou de mots
mémoire.
Activation d'objets Schedule Blocks
Les bits du mot système %SW114 activent (lorsqu'ils sont mis à 1) ou désactivent (lorsqu'ils sont
mis à 0) le fonctionnement des 16 objets Schedule blocks.
Affectation d'objets Schedule blocks dans %SW114 :
Par défaut (ou après un redémarrage à froid), tous les bits de ce mot système sont mis à 1
(activés). L'utilisation de ces bits par le programme est facultative.
Sortie des objets Schedule Blocks
Si plusieurs blocs horodateurs affectent la même sortie (%Mi ou %Qj.k), c'est l'opérateur OR des
résultats de chacun des blocs qui est finalement affecté à cet objet. Notez que la même sortie peut
avoir plusieurs objets Schedule blocks.
Par exemple, les objets %SCH0 et %SCH1 sont tous deux affectés à la sortie %Q0.0. %SCH0 modifie
la sortie de 12h00 à 13h00 le lundi, et %SCH1 la sortie de 12h00 à 13h00 le mardi. Le résultat est
que la sortie passe de 12h00 à 13h00 le lundi et le mardi.
EIO0000001475 12/2017
251
Objets logiciels
Programmation et configuration
Introduction
Les Schedule blocks permettent de contrôler des actions selon un calendrier précis (mois, jour
et heure).
Exemple de programmation
Le tableau suivant présente les paramètres d'un programme d'arrosage pendant les mois d'été :
Paramètre
Valeur
Description
Modifiable en
mode en ligne ?
Adresse
Real-Time Clock 6
Schedule blocks numéro 6
Non
Configured
Case cochée
Case cochée pour configurer le Schedule
blocks numéro 6.
Non
Bit de sortie
%Q0.2
Activer la sortie %Q0.2
Oui
Jour de début
21
Débuter l'activité le 21 juin
Oui
Mois de début
Juin
Débuter l'activité en juin
Oui
Heure de début
21
Débuter l'activité à 21:00
Oui
Jour de fin
21
Arrêter l'activité le 21 septembre
Oui
Mois de fin
Septembre
Arrêter l'activité en septembre
Oui
Heure de fin
22
Arrêter l'activité à 22:00
Oui
Lundi
Case cochée
Exécuter l'activité le lundi
Oui
Mardi
Case non cochée
Aucune activité
Oui
Mercredi
Case cochée
Exécuter l'activité le mercredi
Oui
Jeudi
Case non cochée
Aucune activité
Oui
Vendredi
Case cochée
Exécuter l'activité le vendredi
Oui
Samedi
Case non cochée
Aucune activité
Oui
Dimanche
Case non cochée
Aucune activité
Oui
Le programme suivant permet de désactiver les Schedule blocks grâce à un commutateur ou
un détecteur d'humidité relié à l'entrée %I0.1 :
Réseau
Instruction
Commentaire
0
LD
ST
Dans cet exemple, %SCH6 est validé.
%I0.1
%SW114:X6
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
252
EIO0000001475 12/2017
Objets logiciels
Le tableau suivant présente un exemple de programme :
Réseau
Instruction
0
LD %M4
[ %M0:4 := 7 ]
1
LD %M0
RISING1
OPER [ %SCH0.STARTDAY := %MW0]
OPER [ %SCH0.STARTMONTH := %MW1]
OPER [ %SCH0.STARTHOUR := %MW2]
OPER [ %SCH0.STARTMIN := %MW3]
R %M0
2
LD %M1
RISING0
OPER [ %SCH0.ENDDAY := %MW4
OPER [ %SCH0.ENDMONTH := %MW5]
OPER [ %SCH0.ENDHOUR := %MW6]
OPER [ %SCH0.ENDMIN := %MW7]
R %M1
3
LD %M2
RISING2
[%SCH0.DOW := %MW8]
Chronogramme
Le chronogramme suivant illustre l'activation de la sortie %Q0.2 :
EIO0000001475 12/2017
253
Objets logiciels
Sous-chapitre 6.10
Horloge (%RTC)
Horloge (%RTC)
Utilisation des blocs fonction RTC
Cette section décrit l'utilisation des blocs fonction RTC et fournit des conseils de programmation.
NOTE : l'application doit être configurée sur le niveau fonctionnel (voir SoMachine Basic, Guide
d'utilisation) 5.0 au moins pour utiliser les blocs fonctions RTC.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
254
Page
Description
255
Configuration
259
EIO0000001475 12/2017
Objets logiciels
Description
Introduction
Le bloc fonction RTC
Controller.
vous permet de lire et d'écrire l'horloge temps réel (RTC) du M221 Logic
Illustration
Cette illustration affiche le bloc fonction RTC.
EIO0000001475 12/2017
255
Objets logiciels
Entrées
Le bloc fonction RTC a les entrées suivantes :
256
Libellé
Objet
Valeur
Enable
-
Active le bloc fonction lorsqu'un front montant de cette entrée est détecté.
A l'état 1, les valeurs d'entrée RD et WR sont lues en continu pour
déterminer l'action à effectuer.
A l'état 0, le bloc fonction est désactivé et les sorties sont réinitialisées.
La combinaison des valeurs des deux entrées détermine l'action à
effectuer :
 RD = 0 et WR = 0. Aucune action.
Les sorties Done et Error sont mises à 0.
 RD = 1 et WR = 0. Lit la valeur RTC.
En cas de réussite, la sortie Done est mise à 1 et la sortie Error est
mise à 0.
Les objets d'entrée sont mis à jour en continu avec les valeurs lues
dans le RTC. Utilisez une table d'animation (voir SoMachine Basic,
Guide d'utilisation) pour afficher les valeurs d'objet.
 RD = 0 et WR = 1. Lorsque le front montant de WR est détecté, mettez à
jour le RTC à l'aide des valeurs d'objet spécifiées dans les paramètres
RTC associés à ce bloc fonction (voir ci-dessous).
Si la mise à jour aboutit, la sortie Done est mise à 1 et la sortie Error
est mise à 0. Le RTC est mis à jour.
Si la mise à jour n'aboutit pas, la sortie Done est mise à 0 et la sortie
Error est mise à 1.
 RD = 1 et WR = 1. Non pris en charge.
La sortie Done est mise à 0, la sortie Error est mise à 1 et la sortie
ErrorId (voir page 258) est mise à 256 (lecture et écriture simultanées).
RD
-
WR
-
Day
%RTCi.DAY
Jour
Valeur par défaut : 12
-32767 à 32768
Month
%RTCi.MONTH
Mois
Valeur par défaut : 6
-32767 à 32768
Year
%RTCi.YEAR
Année
Valeur par défaut : 2017
-32767 à 32768
Hours
%RTCi.HOURS
Heures
Valeur par défaut : 0
-32767 à 32768
EIO0000001475 12/2017
Objets logiciels
Libellé
Objet
Valeur
Minutes
%RTCi.MINUTES
Minutes
Valeur par défaut : 0
-32767 à 32768
Seconds
%RTCi.SECONDS
Secondes
Valeur par défaut : 0
-32767 à 32768
Sorties
Le bloc fonction RTC a les sorties suivantes :
Libellé
Objet
Valeur
Done
%RTCi.Done
Mis à 1 lorsque le RTC est lu ou écrit.
Mis à 0 lorsque l'opération de lecture ou d'écriture n'a pas
abouti.
Error
%RTCi.Error
Mis à 1 si une erreur survient pendant l'exécution. L'exécution
du bloc fonction est terminée. L'objet de sortie ErrorId
indique la cause de l'erreur.
DayOfWeek
%RTCi.DayOfWeek
Renvoie le jour de la semaine, calculé à partir de la valeur de
la semaine courante.
Plage : 0 à 7
0 : bloc fonction non encore exécuté
1 à 7 : jour de la semaine.
ErrorId
%RTCi.ErrorId
Identificateur du code d'erreur.
Consultez les Codes d'erreur (voir page 258) ci-dessous.
EIO0000001475 12/2017
257
Objets logiciels
Codes d'erreur
Les codes d'erreur suivants sont renvoyés dans l'objet %RTCi.ErrorId lorsque la sortie Error
est mise à 1.
Code d'erreur
258
Description
0
Aucune erreur
1
Erreur d'année
2
Erreur de mois
3
Erreur de jour
4
Erreur de semaine
5
Erreur d'heure
6
Erreur de minute
7
Erreur de secondes
8
Erreur de combinaison
9
Erreur interne de RTC
256
Lecture et écriture simultanées
257
Mise à jour du RTC déjà en cours (bit système %S50 = 1)
EIO0000001475 12/2017
Objets logiciels
Configuration
Présentation
Configurez les propriétés du bloc fonction RTC avec les valeurs à utiliser pour mettre à jour le RTC
dans le contrôleur logique.
Pour afficher la page Propriétés RTC, procédez au choix comme suit :
Double-cliquez sur un bloc fonction RTC.
 Dans l'onglet Programmation, sélectionnez Outils → Objets logiciels → RTC.

Propriétés de RTC
Pour configurer les paramètres, suivez la procédure Configuration d'un bloc fonction
(voir page 176) et lisez la description des Modes d'allocation de mémoire dans le document
SoMachine Basic - Guide d'utilisation.
La page Propriétés de RTC affiche les propriétés suivantes :
Propriété
Description
Valeur
Modifiable en
mode en
ligne ?
Utilisé
Adresse d'objet déjà
utilisée
Si ce paramètre est sélectionné, cette
adresse est utilisée dans un programme.
Non
Adresse
Adresse de l'objet RTC
%RTCi, où i est le numéro de l'objet.
Non
Un programme ne peut contenir qu'un
nombre limité d'objets RTC. Pour connaître le
nombre maximum d'objets RTC, consultez le
Guide de programmation de votre contrôleur.
Symbole
Symbole
Oui
Symbole associé à cet objet. Pour plus
d'informations, consultez la section Définition
et utilisation des symboles (voir SoMachine
Basic, Guide d'utilisation) dans le document
SoMachine Basic - Guide d'utilisation.
Jour
Jour du mois
1 à 31
Oui
Mois
Mois de l'année
1 à 12
Oui
Année
Année
Supérieure ou égale à 2000
Oui
Heures
Heure du jour
0 à 23
Oui
Minutes
Minutes de l'heure
0 à 59
Oui
Secondes
Secondes de la minute 0 à 59
Oui
Commentaire
Commentaire
EIO0000001475 12/2017
Un commentaire peut être associé à cet objet. Oui
259
Objets logiciels
Sous-chapitre 6.11
PID
PID
Fonction PID
Introduction
La fonction PID permet de contrôler un processus dynamique de manière continue. Le but du
contrôle PID est de maintenir un processus en cours d'exécution aussi proche que possible de la
consigne souhaitée.
Pour plus d'informations sur le comportement de PID, les fonctionnalités et la mise en œuvre de
la fonction PID, consultez le Guide de la bibliothèque des fonctions avancées :
 Modes de fonctionnement de la fonction PID
 Configuration d'Auto-Tuning de la fonction PID
 Configuration standard de la fonction PID
 Assistant PID
 Programmation de la fonction PID
 Paramètre de la fonction PID
 Rôle et influence des paramètres de la fonction PID
 Méthode de réglage des paramètres de la fonction PID
260
EIO0000001475 12/2017
Objets logiciels
Sous-chapitre 6.12
Journalisation des données
Journalisation des données
Journalisation des données
Description du bloc fonction
La fonction de journalisation des données vous permet de stocker de manière sûre les données
des objets ou des chaînes dans le fichier /user/DATALOGx.csv, x représentant l'entier
correspondant au numéro d'instance de journalisation des données. Ce fichier est stocké sur la
carte SD.
Le nom de la carte SD doit être DATA.
NOTE : L'application doit être configurée avec un niveau fonctionnel (voir SoMachine Basic, Guide
d'utilisation) correspondant au moins à Niveau 6.0 et une version de chargeur de démarrage 50
ou ultérieure. Reportez-vous au mot système (voir Modicon M221, Contrôleur logique, Guide de
programmation) %SW13 .
Représentation graphique
EIO0000001475 12/2017
261
Objets logiciels
Configuration de la journalisation des données
Etape
1
2
Action
Dans la fenêtre Programmation, cliquez sur Outils → Objets logiciels → Journalisation des
données.
Dans la colonne Configuration, cliquez sur
Résultat : l'assistant DATALOG apparaît.
.
3
Saisissez la taille maximale du fichier.
La taille maximale du fichier peut être comprise entre1 et 500. La valeur par défaut est 100.
4
Sélectionnez Données historiques ou Journal des événements.
La fonction Données historiques vous permet de stocker plusieurs données des objets. Seuls
les objets SoMachine Basic sont autorisés. Vous pouvez stocker jusqu'à 32 objets.
La fonction Journal des événements vous permet de stocker une chaîne (voir SoMachine
Basic, Guide d'utilisation) unique.
5
Cochez ou décochez la case Ajouter un horodatage.
Cette fonction ajoute l'heure de l'événement dans le fichier CSV.
6
Saisissez l'objet dans la colonne Adresse.
Si vous avez sélectionné Journal des événements, saisissez le premier %MW de la chaîne.
Si vous avez affecté un symbole à l'objet, il est affiché dans la colonne Symbole.Vous ne
pouvez pas modifier le symbole ici.
7
Cliquez sur Appliquer.
8
Pour insérer le bloc fonction dans l'éditeur Schéma à contacts, utilisez l'une des méthodes
suivantes :
 Cliquez sur
, puis sur
.
 Copiez par glisser-déposer des propriétés de journalisation des données.
Entrée
Le tableau suivant décrit l'entrée du bloc fonction :
Libellé
Type
Description
EXECUTE
BOOL
Lance l'exécution du bloc fonction lors de la détection d'un front montant.
262
EIO0000001475 12/2017
Objets logiciels
Sorties
Le tableau suivant décrit les sorties du bloc fonction :
Libellé
Type
Description
DONE
BOOL
Lance l'exécution du bloc fonction lors de la détection d'un front montant.
Si un deuxième front montant est détecté durant l'exécution du bloc fonction,
il est ignoré et la commande en cours n'est pas affectée.
BUSY
BOOL
La valeur TRUE indique que l'exécution du bloc fonction est en cours.
ERROR
BOOL
La valeur TRUE indique qu'une erreur a été détectée. L'exécution du bloc
fonction est interrompue. La sortie Errorld indique le code d'erreur.
BAK
BOOL
Si la valeur est TRUE, le fichier BAK est créé.
Codes d'erreur
Code d'erreur
Description
0
Aucune erreur.
1
Opération en cours.
2
Erreur lors du stockage des données dans le fichier CSV.
3
Erreur lors de la création du fichier BAK.
4
Instance de journal des données déjà utilisée.
10
Délai de restauration dépassé. Ejectez la carte SD.
11
Carte SD non détectée.
12
Carte SD protégée en écriture.
50
Erreur du système de fichiers.
51
Erreur lors de l'ouverture du fichier CSV.
EIO0000001475 12/2017
263
Objets logiciels
Sous-chapitre 6.13
Etapes Grafcet
Etapes Grafcet
Etapes Grafcet
Présentation
Les objets d'étape Grafcet (%Xi) indiquent l'état de l'étape Grafcet i correspondante dans un
programme.
Paramètres
La fenêtre des propriétés des étapes Grafcet contient les propriétés suivantes :
264
Paramètre
Description
Valeur
Utilisée
Adresse utilisée
Si ce paramètre est sélectionné, l'adresse en question est
actuellement utilisée dans un programme.
Adresse
Adresse de l'objet
d'étape Grafcet.
Un programme peut contenir jusqu'à 96 objets d'étape Grafcet.
Symbole
Symbole
Symbole associé à cet objet. Pour plus d'informations, consultez la
section Définition et utilisation des symboles (voir SoMachine Basic,
Guide d'utilisation) dans le document SoMachine Basic - Guide
d'utilisation.
Commentaire
Commentaire
Commentaire associé à cet objet.
EIO0000001475 12/2017
SoMachine Basic
Objets PTO
EIO0000001475 12/2017
Chapitre 7
Objets PTO
Objets PTO
Contenu de ce chapitre
Ce chapitre contient les sous-chapitres suivants :
Sous-chapitre
Sujet
Page
7.1
Motion Task Table (%MT)
266
7.2
Bloc fonction Pulse Train Output (%PTO)
267
EIO0000001475 12/2017
265
Objets PTO
Sous-chapitre 7.1
Motion Task Table (%MT)
Motion Task Table (%MT)
Motion Task Table
Présentation
Consultez le Guide de la bibliothèque des fonctions avancées de votre contrôleur.
266
EIO0000001475 12/2017
Objets PTO
Sous-chapitre 7.2
Bloc fonction Pulse Train Output (%PTO)
Bloc fonction Pulse Train Output (%PTO)
Sortie à train d'impulsions
Présentation
Consultez le Guide de la bibliothèque des fonctions avancées de votre contrôleur.
EIO0000001475 12/2017
267
Objets PTO
268
EIO0000001475 12/2017
SoMachine Basic
Objets de variateur
EIO0000001475 12/2017
Chapitre 8
Objets de variateur
Objets de variateur
Objets de variateur
Présentation
Les objets de variateur contrôlent les variateurs ATV et d'autres équipements configurés sur le
Scrutateur d'E/S Modbus série ou Modbus TCP IOScanner.
Consultez le document Fonctions avancées - Guide de la bibliothèque de votre contrôleur logique.
EIO0000001475 12/2017
269
Objets de variateur
270
EIO0000001475 12/2017
SoMachine Basic
Objets de communication
EIO0000001475 12/2017
Chapitre 9
Objets de communication
Objets de communication
Introduction
Les blocs fonction de communication permettent la communication avec les équipements Modbus
ainsi que l'envoi et la réception de messages en mode caractères (ASCII).
NOTE : un seul bloc fonction de communication peut être actif à la fois sur un port de
communication durant un cycle de tâche maître. Si vous utilisez plusieurs blocs fonction de
communication ou instructions EXCH simultanément sur le même port de communication, les
blocs fonction renvoient un code d'erreur. Il faut donc vérifier l'absence d'échange actif (%MSGx.D
= TRUE) en cours sur un port de communication avant de démarrer un bloc fonction de
communication ou une instruction EXCH.
Contenu de ce chapitre
Ce chapitre contient les sous-chapitres suivants :
Sous-chapitre
9.1
Sujet
Page
Lecture de données depuis un équipement distant (%READ_VAR)
272
9.2
Ecrire des données sur un équipement Modbus (%WRITE_VAR)
281
9.3
Lecture et écriture de données sur un équipement Modbus
(%WRITE_READ_VAR)
289
9.4
Communication sur une liaison ASCII (%SEND_RECV_MSG)
297
9.5
Send Receive SMS (%SEND_RECV_SMS)
305
9.6
Chronogrammes des blocs fonction d'objet de communication.
320
EIO0000001475 12/2017
271
Objets de communication
Sous-chapitre 9.1
Lecture de données depuis un équipement distant (%READ_VAR)
Lecture de données depuis un équipement distant
(%READ_VAR)
Utilisation des blocs fonction %READ_VAR
Cette section décrit l'utilisation des blocs fonction %READ_VAR et fournit des conseils de
programmation.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
272
Page
Description
273
Configuration de fonctions
277
Exemple de programmation
280
EIO0000001475 12/2017
Objets de communication
Description
Introduction
Le bloc fonction %READ_VAR permet de lire des données d'un équipement distant sur Modbus SL
ou Modbus TCP.
Illustration
L'illustration suivante présente le bloc fonction %READ_VAR :
Entrées
Le bloc fonction %READ_VAR a les entrées suivantes :
Libellé
Type
Valeur
Exécuter
BOOL
Lance l'exécution du bloc fonction lors de la détection d'un front montant.
Si un deuxième front montant est détecté durant l'exécution du bloc fonction, il est
ignoré et la commande en cours n'est pas affectée.
Abandonner
BOOL
Arrête l'exécution du bloc fonction lors de la détection d'un front montant.
La sortie Annulé est définie sur 1 et l'objet %READ_VARi.CommError contient le
code 02 hex (échange interrompu à la demande de l'utilisateur).
NOTE : Le réglage de l'entrée Exécuter ou Abandonner sur TRUE au premier cycle de tâches en
mode RUN n'est pas détecté en tant que front montant. Le bloc fonction doit d'abord visualiser
l'entrée avec la valeur FALSE pour pouvoir détecter le front montant suivant.
EIO0000001475 12/2017
273
Objets de communication
Sorties
Le bloc fonction %READ_VAR a les sorties suivantes :
Libellé
Type
Valeur
Terminé
BOOL
La valeur TRUE indique que l'exécution du bloc fonction a été effectuée
sans erreur.
Occupé
BOOL
La valeur TRUE indique que l'exécution du bloc fonction est en cours.
Annulé
BOOL
La valeur TRUE indique que l'exécution du bloc fonction a été annulée
avec l'entrée Abandonner.
Erreur
BOOL
La valeur TRUE indique qu'une erreur a été détectée. L'exécution du bloc
fonction est interrompue.
Pour plus d'informations sur CommError et OperError, consultez les
tableaux Codes des erreurs de communication (voir page 274) et Codes
des erreurs d'opération (voir page 275) .
Ce tableau décrit les objets de sortie du bloc fonction :
Objet de sortie
Type
Description
CommError
BYTE
Pour plus d'informations sur %READ_VARi.CommError, consultez le
tableau Codes des erreurs de communication (voir page 274).
OperError
DWORD
Pour plus d'informations sur %READ_VARi.OperError, consultez le
tableau Codes des erreurs d'opération (voir page 275).
Codes des erreurs de communication
Ce tableau décrit les codes d'erreur écrits dans l'objet de mot %READ_VARi.CommError :
274
Nom
Code de
l'erreur
détectée
Description
CommunicationOK
0 (00 hex)
L'échange est correct.
TimedOut
1 (01 hex)
L'échange a été interrompu suite à l'expiration du délai.
Abort
2 (02 hex)
L'échange a été interrompu à la demande de l'utilisateur
(entrée Abandon).
BadAddress
3 (03 hex)
Format d'adresse incorrect.
BadRemoteAddr
4 (04 hex)
Adresse distante incorrecte.
BadMgtTable
5 (05 hex)
Format de la table de gestion incorrect.
BadParameters
6 (06 hex)
Paramètres spécifiques incorrects.
ProblemSendingRq
7 (07 hex)
Echec d'envoi de requête à la destination.
RecvBufferNotAlloc
9 (09 hex)
La taille de la mémoire tampon de réception est
insuffisante.
EIO0000001475 12/2017
Objets de communication
Nom
Code de
l'erreur
détectée
Description
SendBufferNotAlloc
10 (0A hex)
La taille de la mémoire tampon de transmission est
insuffisante.
SystemResourceMissing
11 (0B hex)
Ressource système non disponible.
BadLength
14 (0E hex)
Longueur incorrecte.
ProtocolSpecificError
254 (FE hex)
Indique une erreur de protocole Modbus. Pour plus de
détails, consultez Codes des erreurs d'opération.
Refused
255 (FF hex)
Message refusé. Pour plus de détails, consultez Codes
des erreurs d'opération. (voir page 275)
(voir page 275)
Codes des erreurs d'opération
Ce code de retour est pertinent si le code d'erreur de communication (objet CommError) a la
valeur suivante :
 0 (00 hex) (correct)
 254 (FE hex) (code d'exception Modbus)
 255 (FF hex) (refusé)
Ce tableau décrit les codes d'erreur écrits dans l'objet de mot double %READ_VARi.OperError :
CommError
Nom
Code de l'erreur détectée Description
0 (00 hex)
(correct)
OperationOK
0 (00000000 hex)
L'échange est correct.
NotProcessed
1 (00000001 hex)
La requête n'a pas été traitée.
BadResponse
2 (00000002 hex)
La réponse reçue est incorrecte.
EIO0000001475 12/2017
275
Objets de communication
CommError
Nom
Code de l'erreur détectée Description
254 (FE hex)
(code
d'exception
Modbus)
IllegalFunction
1 (00000001 hex)
Le code fonction reçu dans la requête
ne correspond pas à une action
autorisée pour l'esclave. L'état de
l'esclave est peut être inapproprié pour
traiter une requête spécifique.
IllegalDataAddress
2 (00000002 hex)
L'adresse de données reçue par
l'esclave n'est pas une adresse
autorisée pour l'esclave.
IllegalDataValue
3 (00000003 hex)
La valeur dans le champ de données de
la requête n'est pas autorisée pour
l'esclave.
SlaveDeviceFailure
4 (00000004 hex)
L'esclave ne peut pas exécuter une
action demandée à cause d'une erreur
majeure.
Acknowledge
5 (00000005 hex)
L'esclave a acquitté la requête mais le
délai de communication a expiré avant
que l'esclave traite la requête.
SlaveDeviceBusy
6 (00000006 hex)
L'esclave est occupé à traiter une autre
commande.
MemoryParityError
8 (00000008 hex)
L'esclave a détecté une erreur de parité
dans la mémoire lors de la tentative de
lecture de la mémoire étendue.
GatewayPathUnavailable
10 (0000000A hex)
La passerelle est surchargée ou
incorrectement configurée.
GatewayTargetDeviceFailedToRespond
11 (0000000B hex)
L'esclave n'est pas présent sur le
réseau.
TargetResourceMissing
1 (00000001 hex)
La ressource du système cible n'est pas
disponible.
BadLength
5 (00000005 hex)
Longueur incorrecte.
CommChannelErr
6 (00000006 hex)
Erreur détectée sur la voie de
communication.
BadAddr
7 (00000007 hex)
Adresse incorrecte.
SystemResourceMissing
11 (0000000B hex)
Ressource système non disponible.
TargetCommInactive
12 (0000000C hex)
Une fonction de communication cible
n'est pas active.
TargetMissing
13 (0000000D hex)
La cible ne communique pas.
ChannelNotConfigured
15 (0000000F hex)
Voie non configurée.
255 (FF hex)
(refusé)
276
EIO0000001475 12/2017
Objets de communication
Configuration de fonctions
Propriétés
Double-cliquez sur le bloc fonction pour ouvrir le tableau des propriétés de la fonction
(voir Compact Modbus SL Logic Controller M221 Book, System User Guide).
Il est impossible de modifier les propriétés de ce bloc fonction en mode en ligne.
Le bloc fonction %READ_VAR a les propriétés suivantes :
Propriété
Valeur
Description
Utilisé
Case à cocher Activé/Désactivé
Indique si l'adresse est utilisée.
Adresse
%READ_VARi, où i est compris entre 0 i est l'identificateur de l'instance. Pour connaître
et le nombre d'objets disponibles sur le le nombre maximal d'instances, consultez la
contrôleur logique
section Nombre maximum d'objets (voir Modicon
M221, Contrôleur logique, Guide de
programmation).
Symbole
Texte défini par l'utilisateur
Le symbole identifie de façon unique cet objet.
Pour plus d'informations, consultez le Guide
d'utilisation de SoMachine Basic (définition et
utilisation de symboles) (voir SoMachine Basic,
Guide d'utilisation).
Liaison
 SL1 : série 1
Sélection du port.
 SL2 : série 2
NOTE : Les ports de communication intégrés SL2
et ETH1 sont disponibles sur certains modèles de
contrôleur uniquement.
 ETH1 : Ethernet
Id
Timeout
Ce paramètre dépend de la
configuration des liaisons :
 1 à 247 pour l'adresse de l'esclave
de lignes série
 1 à 16 pour l'index Ethernet
Valeur exprimée par incrément de
100 ms (100 par défaut, soit
10 secondes).
La valeur 0 signifie qu'aucune
temporisation n'est appliquée.
Identificateur de l'équipement.
Pour plus d'informations sur l'indice Ethernet,
consultez Ajout de serveurs distants (voir Modicon
M221, Contrôleur logique, Guide de
programmation).
La temporisation définit la durée maximale
d'attente d'une réponse.
Si le délai expire, l'échange est interrompu avec
un code d'erreur (CommError = 01 hex). Si le
système reçoit une réponse après l'expiration du
délai, cette réponse est ignorée.
NOTE : La configuration de la temporisation sur
le bloc fonction remplace la valeur configurée sur
les écrans de configuration SoMachine Basic
(Configuration Modbus TCP (voir Modicon M221,
Contrôleur logique, Guide de programmation) et
Configuration de ligne série (voir Modicon M221,
Contrôleur logique, Guide de programmation)).
EIO0000001475 12/2017
277
Objets de communication
Propriété
Valeur
Description
ObjType
Type d'objet à lire :
 0 pour les mots
 1 pour les entrées numériques
 2 pour les sorties numériques
 3 pour les mots d'entrée
Les types de codes de la fonction de lecture
Modbus sont :
 Mbs 0x03 - Read multiple words (holding
register)
 Mbs 0x02 - Read multiple bits (digital inputs)
 Mbs 0x01 - Read multiple bits (digital outputs)
 Mbs 0x04 - Read multiple words (input register)
FirstObj
0 à 65 535
L'adresse du premier objet sur l'équipement
distant où les valeurs sont lues.
Quantité
 1 à 125 pour %MW
Le nombre d'objets à lire sur l'équipement distant.
 1 à 2000 pour %I
 1 à 2000 pour %Q ou %M
 0 à 125 pour %IW
IndexData
0 à 7999
L'adresse de la table de mots locaux (%MW) dans
laquelle les valeurs lues sont stockées.
Lors de la lecture des bits (%I ou %Q), les bits
récupérés sont écrits dans la table de mots, à
partir de la première adresse indiquée. Ainsi, lors
de la lecture de 16 bits où IndexData = 10 et
Quantity = 16, le résultat est stocké dans les
adresses %MW10:X0 à %MW10:X15.
Commentaire
Texte défini par l'utilisateur
Commentaire relatif à cet objet.
Objets
Le bloc fonction %READ_VAR comporte les objets suivants :
Objet
Description
Valeur
%READ_VARi.LINK
Sélection du port
Consultez la rubrique Propriétés
(voir page 277). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
%READ_VARi.ID
Identificateur d'équipement distant Consultez la rubrique Propriétés
(voir page 277). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
%READ_VARi.TIMEOUT
Temporisateur de bloc fonction
Consultez la rubrique Propriétés
(voir page 277). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
278
EIO0000001475 12/2017
Objets de communication
Objet
Description
%READ_VARi.OBJTYPE
Type des objets à lire
Valeur
Consultez la rubrique Propriétés
(voir page 277). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
%READ_VARi.FIRSTOBJ
Consultez la rubrique Propriétés
L'adresse du premier objet sur
l'équipement distant où les valeurs (voir page 277). Peut être lu et
sont lues.
écrit. Peut être modifié dans une
table d'animation.
%READ_VARi.QUANTITY
Le nombre d'objets à lire sur
l'équipement distant.
%READ_VARi.INDEXDATA
L'adresse de la table de mots
locaux (%MW) dans laquelle les
valeurs lues sont stockées.
Consultez la rubrique Propriétés
(voir page 277). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
Consultez la rubrique Propriétés
(voir page 277). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
%READ_VARi.COMMERROR
Codes des erreurs de
communication
Consultez Codes des erreurs de
communication (voir page 274).
Lecture seule. Peut être lu dans
une table d'animation.
%READ_VARi.OPERERROR
Codes des erreurs d'opération
Consultez Codes des erreurs
d'opération (voir page 275).
Lecture seule. Peut être lu dans
une table d'animation.
%READ_VARi.DONE
Exécution correctement effectuée
Consultez la rubrique Sorties
(voir page 274). Lecture seule.
Peut être lu dans une table
d'animation.
%READ_VARi.BUSY
Exécution en cours
Consultez la rubrique Sorties
(voir page 274). Lecture seule.
Peut être lu dans une table
d'animation.
%READ_VARi.ABORTED
L'exécution a été annulée
Consultez la rubrique Sorties
(voir page 274). Lecture seule.
Peut être lu dans une table
d'animation.
%READ_VARi.ERROR
Une erreur a été détectée
Consultez la rubrique Sorties
(voir page 274). Lecture seule.
Peut être lu dans une table
d'animation.
EIO0000001475 12/2017
279
Objets de communication
Exemple de programmation
Introduction
Le bloc fonction %READ_VAR peut être configuré comme dans cet exemple de programmation.
Programmation
Voici un exemple de bloc fonction %READ_VAR :
Réseau
Instruction
0
BLK
%READ_VAR0
LD
%I0.0
EXECUTE
LD
%I0.1
ABORT
OUT_BLK
LD
DONE
ST
%Q0.0
LD
BUSY
ST
%Q0.1
LD
ABORTED
ST
%M1
LD
ERROR
ST
%Q0.2
END_BLK
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Chronogramme
Chronogrammes des blocs fonction de communication (voir page 320).
280
EIO0000001475 12/2017
Objets de communication
Sous-chapitre 9.2
Ecrire des données sur un équipement Modbus (%WRITE_VAR)
Ecrire des données sur un équipement Modbus
(%WRITE_VAR)
Utilisation des blocs fonction %WRITE_VAR
Cette section décrit l'utilisation des blocs fonction %WRITE_VAR et fournit des conseils de
programmation.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
Page
Description
282
Configuration de fonctions
284
Exemple de programmation
288
EIO0000001475 12/2017
281
Objets de communication
Description
Introduction
Le bloc fonction %WRITE_VAR permet d'écrire des données sur un équipement externe en utilisant
le protocole Modbus SL ou Modbus TCP.
Illustration
L'illustration suivante présente le bloc fonction %WRITE_VAR :
Entrées
Le bloc fonction %WRITE_VAR a les entrées suivantes :
Libellé
Type
Valeur
Exécuter
BOOL
Lance l'exécution du bloc fonction lors de la détection d'un front montant.
Si un deuxième front montant est détecté durant l'exécution du bloc fonction, il est
ignoré et la commande en cours n'est pas affectée.
Abandonner
BOOL
Arrête l'exécution du bloc fonction lors de la détection d'un front montant.
La sortie Annulé est définie sur 1 et l'objet %WRITE_VARi.CommError contient
le code 02 hex (échange interrompu à la demande de l'utilisateur).
NOTE : Le réglage de l'entrée Exécuter ou Abandonner sur TRUE au premier cycle de tâches en
mode RUN n'est pas détecté en tant que front montant. Le bloc fonction doit d'abord visualiser
l'entrée avec la valeur FALSE pour pouvoir détecter le front montant suivant.
282
EIO0000001475 12/2017
Objets de communication
Sorties
Le bloc fonction %WRITE_VAR a les sorties suivantes :
Libellé
Type
Valeur
Terminé
BOOL
La valeur TRUE indique que l'exécution du bloc fonction a été effectuée
sans erreur.
Occupé
BOOL
La valeur TRUE indique que l'exécution du bloc fonction est en cours.
Annulé
BOOL
La valeur TRUE indique que l'exécution du bloc fonction a été annulée
avec l'entrée Abandonner.
Erreur
BOOL
La valeur TRUE indique qu'une erreur a été détectée. L'exécution du bloc
fonction est interrompue.
Pour plus d'informations sur CommError et OperError, consultez les
tableaux Codes des erreurs de communication (voir page 274) et Codes
des erreurs d'opération (voir page 275) .
Ce tableau décrit les objets de sortie du bloc fonction :
Objet de sortie
Type
Description
CommError
BYTE
Pour plus d'informations sur %READ_VARi.CommError, consultez le
tableau Codes des erreurs de communication (voir page 274).
OperError
DWORD
Pour plus d'informations sur %READ_VARi.OperError, consultez le
tableau Codes des erreurs d'opération (voir page 275).
Codes des erreurs de communication
Consultez Codes des erreurs de communication (voir page 274).
Codes des erreurs d'opération
Consultez Codes des erreurs d'opération (voir page 275).
EIO0000001475 12/2017
283
Objets de communication
Configuration de fonctions
Propriétés
Double-cliquez sur le bloc fonction pour ouvrir le tableau des propriétés de la fonction.
Il est impossible de modifier les propriétés de ce bloc fonction en mode en ligne.
Le bloc fonction %WRITE_VAR a les propriétés suivantes :
Propriété
Valeur
Description
Utilisé
Case à cocher activée / désactivée
Indique si l'adresse est utilisée.
Adresse
%WRITE_VARi, où i est compris entre 0 et le nombre
d'objets disponibles sur le contrôleur logique
i est l'identificateur de l'instance. Pour
connaître le nombre maximal d'instances,
consultez le tableau Nombre maximal
d'objets (voir Modicon M221, Contrôleur
logique, Guide de programmation).
Symbole
Texte défini par l'utilisateur
Le symbole identifie de façon unique cet
objet. Pour plus d'informations, consultez le
Guide d'utilisation de SoMachine Basic
(définition et utilisation de symboles)
(voir SoMachine Basic, Guide d'utilisation).
Liaison
 SL1 : série 1
Sélection du port.
 SL2 : série 2
NOTE : Les ports de communication
intégrés SL2 et ETH1 sont disponibles sur
certains modèles de contrôleur
uniquement.
 ETH1 : Ethernet
Id
284
Ce paramètre dépend de la configuration des liaisons : Identificateur de l'équipement.
Avec la valeur 0, le contrôleur maître
Modbus envoie une diffusion générale à
 1 à 247 pour l'adresse de l'esclave de lignes série
tous les esclaves. En mode diffusion, les
 1 à 16 pour l'index Ethernet
esclaves ne répondent pas au maître.
Pour plus d'informations sur l'indice
Ethernet, consultez Ajout de serveurs
distants (voir Modicon M221, Contrôleur
logique, Guide de programmation).
 0 pour diffusion générale
EIO0000001475 12/2017
Objets de communication
Propriété
Valeur
Description
Timeout
Valeur exprimée par incrément de 100 ms (100 par
défaut, soit 10 secondes).
La valeur 0 signifie qu'aucune temporisation n'est
appliquée.
La temporisation définit la durée maximale
d'attente d'une réponse.
Si le délai expire, l'échange est interrompu
avec un code d'erreur
(CommError = 01 hex). Si le système reçoit
une réponse après l'expiration du délai,
cette réponse est ignorée.
NOTE : La configuration de la
temporisation sur le bloc fonction remplace
la valeur configurée sur les écrans de
configuration SoMachine Basic
(Configuration Modbus TCP (voir Modicon
M221, Contrôleur logique, Guide de
programmation) et Configuration de ligne
série (voir Modicon M221, Contrôleur
logique, Guide de programmation)).
ObjType
Les codes fonction Modbus suivants sont pris en
charge :
 0
 2
 4
 5
Type des objets à écrire :
 Mbs 0x10 - Write multiple words
(register)
 Mbs 0x0F - Write multiple bits (digital
outputs)
 Mbs 0x05 - Write single bit (digital
output)
 Mbs 0x06 - Write single word (register)
NOTE : l'application doit être
configurée avec un niveau fonctionnel
d'au moins 5.0 pour utiliser les codes
fonction Modbus Single Coil (Mbs 0x05)
ou Single Register (Mbs 0x06).
FirstObj
0 à 65 535
L'adresse du premier objet sur l'équipement
distant où les valeurs sont écrites.
Quantité
 1 à 123 (registre interne) pour %MW
Le nombre d'objets à écrire sur
l'équipement distant.
Ignoré pour les types d'objet Single Coil et
Single Register.
 1 à 1968 (bit interne) pour %M ou %Q
EIO0000001475 12/2017
285
Objets de communication
Propriété
Valeur
Description
IndexData
0 à 7999
L'adresse de la table de mots locaux (%MW)
contenant les valeurs à écrire sur
l'équipement distant.
Lors de l'écriture de bits (%M ou %Q), les
valeurs à écrire sont récupérées dans la
table de mots, à partir de la première
adresse indiquée. Ainsi, lors de l'écriture de
16 bits où IndexData = 10 et Quantity = 16,
les valeurs sont récupérées des adresses
%MW10:X0 à %MW10:X15.
Commentaire
Texte défini par l'utilisateur
Commentaire relatif à cet objet.
Objets
Le bloc fonction %WRITE_VAR comporte les objets suivants :
Objet
Description
Valeur
%WRITE_VARi.LINK
Sélection du port
Consultez la rubrique Propriétés
(voir page 284). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
%WRITE_VARi.ID
Identificateur d'équipement distant Consultez la rubrique Propriétés
(voir page 284). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
%WRITE_VARi.TIMEOUT
Temporisateur de bloc fonction
Consultez la rubrique Propriétés
(voir page 284). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
%WRITE_VARi.OBJTYPE
Type des objets à écrire
Consultez la rubrique Propriétés
(voir page 284). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
286
%WRITE_VARi.FIRSTOBJ
Consultez la rubrique Propriétés
L'adresse du premier objet sur
l'équipement distant où les valeurs (voir page 284). Peut être lu et
sont écrites.
écrit. Peut être modifié dans une
table d'animation.
%WRITE_VARi.QUANTITY
Le nombre d'objets à écrire sur
l'équipement distant.
Consultez la rubrique Propriétés
(voir page 284). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
EIO0000001475 12/2017
Objets de communication
Objet
Description
%WRITE_VARi.INDEXDATA
L'adresse de la table de mots
Consultez la rubrique Propriétés
locaux (%MW) contenant les valeurs (voir page 284). Peut être lu et
écrit. Peut être modifié dans une
à écrire sur l'équipement distant.
table d'animation.
%WRITE_VARi.COMMERROR
Codes des erreurs de
communication
Consultez Codes des erreurs de
communication (voir page 283).
Lecture seule. Peut être lu dans
une table d'animation.
%WRITE_VARi.OPERERROR
Codes des erreurs d'opération
Consultez Codes des erreurs
d'opération (voir page 283).
Lecture seule. Peut être lu dans
une table d'animation.
%WRITE_VARi.DONE
Exécution correctement effectuée
Consultez la rubrique Sorties
(voir page 283). Lecture seule.
Peut être lu dans une table
d'animation.
%WRITE_VARi.BUSY
Exécution en cours
Consultez la rubrique Sorties
(voir page 283). Lecture seule.
Peut être lu dans une table
d'animation.
%WRITE_VARi.ABORTED
L'exécution a été annulée
Consultez la rubrique Sorties
(voir page 283). Lecture seule.
Peut être lu dans une table
d'animation.
%WRITE_VARi.ERROR
Une erreur a été détectée
Consultez la rubrique Sorties
(voir page 283). Lecture seule.
Peut être lu dans une table
d'animation.
EIO0000001475 12/2017
Valeur
287
Objets de communication
Exemple de programmation
Introduction
Le bloc fonction %WRITE_VAR peut être configuré comme dans cet exemple de programmation.
Programmation
Voici un exemple de bloc fonction %WRITE_VAR :
Réseau
Instruction
0
BLK
%WRITE_VAR0
LD
%I0.0
EXECUTE
LD
%I0.1
ABORT
OUT_BLK
LD
DONE
ST
%Q0.0
LD
BUSY
ST
%Q0.1
LD
ABORTED
ST
%M1
LD
ERROR
ST
%Q0.2
END_BLK
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Chronogramme
Chronogrammes des blocs fonction de communication (voir page 320).
288
EIO0000001475 12/2017
Objets de communication
Sous-chapitre 9.3
Lecture et écriture de données sur un équipement Modbus (%WRITE_READ_VAR)
Lecture et écriture de données sur un équipement Modbus
(%WRITE_READ_VAR)
Utilisation des blocs fonction %WRITE_READ_VAR
Cette section décrit l'utilisation des blocs fonction %WRITE_READ_VAR et fournit des conseils de
programmation.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
Page
Description
290
Configuration de fonctions
293
Exemple de programmation
296
EIO0000001475 12/2017
289
Objets de communication
Description
Introduction
Le bloc fonction %WRITE_READ_VAR permet de lire et d'écrire des données stockées dans les
mots mémoire internes vers un équipement externe en utilisant le protocole Modbus SL ou
Modbus TCP.
Ce bloc fonctionnel effectue une seule demande d'écriture puis une seule demande de lecture
dans la même transaction.
Illustration
L'illustration suivante présente le bloc fonction %WRITE_READ_VAR :
290
EIO0000001475 12/2017
Objets de communication
Entrées
Le bloc fonction %WRITE_READ_VAR a les entrées suivantes :
Libellé
Type
Valeur
Exécuter
BOOL
Lance l'exécution du bloc fonction lors de la détection d'un front montant.
Si un deuxième front montant est détecté durant l'exécution du bloc fonction, il est
ignoré et la commande en cours n'est pas affectée.
Abandonner
BOOL
Arrête l'exécution du bloc fonction lors de la détection d'un front montant.
La sortie Annulé est définie sur 1 et l'objet %WRITE_READ_VARi.CommError
contient le code 02 hex (échange interrompu à la demande de l'utilisateur).
NOTE : Le réglage de l'entrée Exécuter ou Abandonner sur TRUE au premier cycle de tâches en
mode RUN n'est pas détecté en tant que front montant. Le bloc fonction doit d'abord visualiser
l'entrée avec la valeur FALSE pour pouvoir détecter le front montant suivant.
Sorties
Le bloc fonction %WRITE_READ_VAR a les sorties suivantes :
Libellé
Type
Valeur
Terminé
BOOL
La valeur TRUE indique que l'exécution du bloc fonction a été effectuée
sans erreur.
Occupé
BOOL
La valeur TRUE indique que l'exécution du bloc fonction est en cours.
Annulé
BOOL
La valeur TRUE indique que l'exécution du bloc fonction a été annulée
avec l'entrée Abandonner.
Erreur
BOOL
La valeur TRUE indique qu'une erreur a été détectée. L'exécution du bloc
fonction est interrompue.
Pour plus d'informations sur CommError et OperError, consultez les
tableaux Codes des erreurs de communication (voir page 274) et Codes
des erreurs d'opération (voir page 275) .
Ce tableau décrit les objets de sortie du bloc fonction :
Objet de sortie
Type
Description
CommError
BYTE
Pour plus d'informations sur %READ_VARi.CommError, consultez le
tableau Codes des erreurs de communication (voir page 274).
OperError
DWORD
Pour plus d'informations sur %READ_VARi.OperError, consultez le
tableau Codes des erreurs d'opération (voir page 275).
EIO0000001475 12/2017
291
Objets de communication
Codes des erreurs de communication
Consultez Codes des erreurs de communication (voir page 274).
Codes des erreurs d'opération
Consultez Codes des erreurs d'opération (voir page 275).
292
EIO0000001475 12/2017
Objets de communication
Configuration de fonctions
Propriétés
Double-cliquez sur le bloc fonction pour ouvrir le tableau des propriétés de la fonction.
Il est impossible de modifier les propriétés de ce bloc fonction en mode en ligne.
Le bloc fonction %WRITE_READ_VAR a les propriétés suivantes :
Propriété
Valeur
Description
Utilisé
Case à cocher activée / désactivée
Indique si l'adresse est utilisée.
Adresse
%WRITE_READ_VARi, où i est
i est l'identificateur de l'instance. Pour
compris entre 0 et le nombre d'objets connaître le nombre maximal d'instances,
disponibles sur le contrôleur logique consultez le tableau Nombre maximal d'objets
(voir Modicon M221, Contrôleur logique,
Guide de programmation).
Symbole
Texte défini par l'utilisateur
Le symbole identifie de façon unique cet objet.
Pour plus d'informations, consultez le Guide
d'utilisation de SoMachine Basic (définition et
utilisation de symboles) (voir SoMachine
Basic, Guide d'utilisation).
Liaison
 SL1 : série 1
Sélection du port
 SL2 : série 2
NOTE : Les ports de communication intégrés
 ETH1 : Ethernet
Id
Timeout
SL2 et ETH1 sont disponibles sur certains
modèles de contrôleur uniquement.
Ce paramètre dépend de la
configuration des liaisons :
 1 à 247 pour l'adresse de
l'esclave de lignes série
 1 à 16 pour l'index Ethernet
Identificateur de l'équipement
Pour plus d'informations sur l'indice Ethernet,
consultez Ajout de serveurs distants
Valeur exprimée par incrément de
100 ms (100 par défaut, soit
10 secondes).
La valeur 0 signifie qu'aucune
temporisation n'est appliquée.
La temporisation définit la durée maximale
d'attente d'une réponse.
Si le délai expire, l'échange est interrompu
avec un code d'erreur (CommError = 01 hex).
Si le système reçoit une réponse après
l'expiration du délai, cette réponse est
ignorée.
(voir Modicon M221, Contrôleur logique,
Guide de programmation).
NOTE : La configuration de la temporisation
sur le bloc fonction remplace la valeur
configurée sur les écrans de configuration
SoMachine Basic (Configuration Modbus TCP
(voir Modicon M221, Contrôleur logique,
Guide de programmation) et Configuration de
ligne série (voir Modicon M221, Contrôleur
logique, Guide de programmation)).
EIO0000001475 12/2017
293
Objets de communication
Propriété
Valeur
Description
ObjType
%MW (Mbs Fct 17) : mots mémoire
Le type de code de la fonction lecture/écriture
Modbus est Mbs Fct 17, qui est équivalent au
code fonction Modbus 17.
FirstWriteObj
0 à 65 535
L'adresse du premier objet sur l'équipement
distant où les valeurs sont écrites.
WriteQuantity
1 à 121
Le nombre d'objets à écrire sur l'équipement
distant.
IndexDataOut
0 à 7999
L'adresse de la table de mots locaux (%MW)
contenant les valeurs à écrire sur
l'équipement distant.
FirstReadObj
0 à 65 535
L'adresse du premier objet sur l'équipement
distant où les valeurs sont lues.
ReadQuantity
1 à 125
Le nombre d'objets à lire sur l'équipement
distant.
IndexDataIn
0 à 7999
L'adresse de la table de mots locaux (%MW)
dans laquelle les valeurs lues sont stockées.
Commentaire
Texte défini par l'utilisateur
Commentaire relatif à cet objet.
Objets
Le bloc fonction %WRITE_READ_VAR comporte les objets suivants :
Objet
Description
Valeur
%WRITE_READ_VARi.LINK
Sélection du port
Consultez la rubrique Propriétés
(voir page 293). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
%WRITE_READ_VARi.ID
Identificateur d'équipement
distant
%WRITE_READ_VARi.TIMEOUT
Temporisateur de bloc fonction
Consultez la rubrique Propriétés
(voir page 293). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
Consultez la rubrique Propriétés
(voir page 293). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
294
%WRITE_READ_VARi.OBJTYPE
Type des objets à lire
%WRITE_READ_VARi.FIRSTWRITEOBJ
L'adresse du premier objet sur
l'équipement distant où les
valeurs sont écrites.
Consultez la rubrique Propriétés
(voir page 293). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
Consultez la rubrique Propriétés
(voir page 293). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
EIO0000001475 12/2017
Objets de communication
Objet
Description
%WRITE_READ_VARi.WRITEQUAN- Le nombre d'objets à écrire sur
TITY
l'équipement distant.
%WRITE_READ_VARi.INDEXDATAOUT
L'adresse de la table de mots
locaux (%MW) contenant les
valeurs à écrire sur l'équipement
distant.
%WRITE_READ_VARi.FIRSTREAD- L'adresse du premier objet sur
OBJ
l'équipement distant où les
valeurs sont lues.
%WRITE_READ_VARi.READQUANTITY
%WRITE_READ_VARi.INDEXDATAIN
Le nombre d'objets à lire sur
l'équipement distant.
L'adresse de la table de mots
locaux (%MW) dans laquelle les
valeurs lues sont stockées.
Valeur
Consultez la rubrique Propriétés
(voir page 293). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
Consultez la rubrique Propriétés
(voir page 293). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
Consultez la rubrique Propriétés
(voir page 293). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
Consultez la rubrique Propriétés
(voir page 293). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
Consultez la rubrique Propriétés
(voir page 293). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
%WRITE_READ_VARi.COMMERROR
Codes des erreurs de
communication
Consultez Codes des erreurs de
communication (voir page 292).
Lecture seule. Peut être lu dans
une table d'animation.
%WRITE_READ_VARi.OPERERROR
Codes des erreurs d'opération
Consultez Codes des erreurs
d'opération (voir page 292).
Lecture seule. Peut être lu dans
une table d'animation.
%WRITE_READ_VARi.DONE
Exécution correctement
effectuée
Consultez la rubrique Sorties
(voir page 291). Lecture seule.
Peut être lu dans une table
d'animation.
%WRITE_READ_VARi.BUSY
Exécution en cours
Consultez la rubrique Sorties
(voir page 291). Lecture seule.
Peut être lu dans une table
d'animation.
%WRITE_READ_VARi.ABORTED
L'exécution a été annulée
Consultez la rubrique Sorties
(voir page 291). Lecture seule.
Peut être lu dans une table
d'animation.
%WRITE_READ_VARi.ERROR
Une erreur a été détectée
Consultez la rubrique Sorties
(voir page 291). Lecture seule.
Peut être lu dans une table
d'animation.
EIO0000001475 12/2017
295
Objets de communication
Exemple de programmation
Introduction
Le bloc fonction %WRITE_READ_VAR peut être configuré comme dans cet exemple de
programmation.
Programmation
Voici un exemple de bloc fonction %WRITE_READ_VAR :
Réseau
Instruction
0
BLK
%WRITE_READ_VAR0
LD
%I0.0
EXECUTE
LD
%I0.1
ABORT
OUT_BLK
LD
DONE
ST
%Q0.0
LD
BUSY
ST
%Q0.1
LD
ABORTED
ST
%M1
LD
ERROR
ST
%Q0.2
END_BLK
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Chronogramme
Chronogrammes des blocs fonction de communication (voir page 320).
296
EIO0000001475 12/2017
Objets de communication
Sous-chapitre 9.4
Communication sur une liaison ASCII (%SEND_RECV_MSG)
Communication sur une liaison ASCII (%SEND_RECV_MSG)
Utilisation des blocs fonction %SEND_RECV_MSG
Cette section décrit l'utilisation des blocs fonction %SEND_RECV_MSG et fournit des conseils de
programmation.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
Page
Description
298
Configuration de fonctions
301
Exemple de programmation
304
EIO0000001475 12/2017
297
Objets de communication
Description
Introduction
Le bloc fonction %SEND_RECV_MSG permet d'envoyer ou de recevoir des données sur une ligne
série configurée pour le protocole ASCII.
Illustration
Cette illustration décrit le bloc fonction %SEND_RECV_MSG :
Entrées
Le bloc fonction %SEND_RECV_MSG a les entrées suivantes :
Libellé
Type
Valeur
Exécuter
BOOL
Lance l'exécution du bloc fonction lors de la détection d'un front montant.
Si un deuxième front montant est détecté durant l'exécution du bloc fonction, il est
ignoré et la commande en cours n'est pas affectée.
Abandonner
BOOL
Arrête l'exécution du bloc fonction lors de la détection d'un front montant.
La sortie Annulé est définie sur 1 et l'objet %SEND_RECV_MSGi.CommError
contient le code 02 hex (échange interrompu à la demande de l'utilisateur).
NOTE : Le réglage de l'entrée Exécuter ou Abandonner sur TRUE au premier cycle de tâches en
mode RUN n'est pas détecté en tant que front montant. Le bloc fonction doit d'abord visualiser
l'entrée avec la valeur FALSE pour pouvoir détecter le front montant suivant.
298
EIO0000001475 12/2017
Objets de communication
Sorties
Le bloc fonction %SEND_RECV_MSG a les sorties suivantes :
Libellé
Type
Valeur
Terminé
BOOL
La valeur TRUE indique que l'exécution du bloc fonction a été effectuée
sans erreur.
Occupé
BOOL
La valeur TRUE indique que l'exécution du bloc fonction est en cours.
Annulé
BOOL
La valeur TRUE indique que l'exécution du bloc fonction a été annulée
avec l'entrée Abandonner.
Erreur
BOOL
La valeur TRUE indique qu'une erreur a été détectée. L'exécution du bloc
fonction est interrompue.
Pour plus d'informations sur CommError et OperError, consultez les
tableaux Codes des erreurs de communication (voir page 274) et Codes
des erreurs d'opération (voir page 275) .
Codes des erreurs de communication
Consultez Codes des erreurs de communication (voir page 274).
Codes des erreurs d'opération
Consultez Codes des erreurs d'opération (voir page 275).
Conditions de fin
Pour une opération d'envoi seulement, la sortie Terminé est définie sur TRUE lorsque toutes les
données (y compris tout caractère de début/fin) ont été envoyées.
Pour une opération de réception seulement, le système reçoit des caractères jusqu'à ce que la
condition de fin soit remplie. Une fois la condition de fin remplie, la sortie Terminé est définie sur
TRUE. Les caractères reçus sont alors copiés dans BufferToRecv, jusqu'aux caractères sizeRecvBuffer. sizeRecvBuffer n'est pas une condition de fin.
EIO0000001475 12/2017
299
Objets de communication
La condition de fin doit être définie dans l'écran Configuration de ligne série (voir Modicon M221,
Contrôleur logique, Guide de programmation) :
La condition de fin doit être définie sur :
 Un nombre d'octets reçus : Longueur de trame reçue
 Un silence de fin de trame : Timeout de trame reçue (ms)
 Une structure de trame : Premier caractère de fin
Pour une opération d'envoi/réception, les caractères sont d'abord envoyés à la ligne, puis les
caractères sont reçus jusqu'à ce que la condition de fin soit remplie (comme pour l'opération de
réception uniquement).
300
EIO0000001475 12/2017
Objets de communication
Configuration de fonctions
Propriétés
Double-cliquez sur le bloc fonction pour ouvrir le tableau des propriétés de la fonction.
Il est impossible de modifier les propriétés de ce bloc fonction en mode en ligne.
Le bloc fonction %SEND_RECV_MSG a les propriétés suivantes :
Propriété
Valeur
Description
Utilisé
Case à cocher Activé/Désactivé
Indique si l'adresse est utilisée.
Adresse
%SEND_RECV_MSGi, où i est compris entre 0
et le nombre d'objets disponibles sur le
contrôleur logique
i est l'identificateur de l'instance.
Pour connaître le nombre maximal
d'instances, consultez le guide de
programmation du contrôleur logique.
Symbole
Texte défini par l'utilisateur
Le symbole identifie de façon unique
cet objet. Pour plus d'informations,
consultez le Guide d'utilisation de
SoMachine Basic (définition et
utilisation de symboles)
(voir SoMachine Basic, Guide
d'utilisation).
Liaison
Timeout
 SL1 : série 1
Sélection du port
 SL2 : série 2
NOTE : Le port de communication
SL2 intégré est disponible sur
certains modèles de contrôleur
uniquement.
Valeur exprimée par incrément de 100 ms
(100 par défaut, soit 10 secondes).
La valeur 0 signifie qu'aucune temporisation
n'est appliquée.
La temporisation définit la durée
maximale d'attente d'une réponse.
Si le délai expire, l'échange est
interrompu avec un code d'erreur
(CommError = 01 hex). Si le système
reçoit une réponse après l'expiration
du délai, cette réponse est ignorée.
NOTE : La configuration de la
temporisation sur le bloc fonction
remplace la valeur configurée sur les
écrans de configuration SoMachine
Basic (Configuration Modbus TCP et
Configuration de ligne série,
consultez le guide de programmation
du contrôleur logique).
QuantityToSend
EIO0000001475 12/2017
Nombre d'octets à envoyer
0 à 254
La valeur 0 signifie que le bloc fonction effectue
uniquement la réception de données.
301
Objets de communication
Propriété
Valeur
Description
BufferToSend
0 à 7999
Adresse du premier objet à envoyer
SizeRecvBuffer
Taille disponible (en octets) du
0 à 254
La valeur 0 signifie que le bloc fonction effectue tampon de réception.
uniquement l'envoi de données.
BufferToRecv
0 à 7999
Première adresse de la table de mots
dans laquelle les valeurs lues sont
stockées (%MW).
QuantityRecv
0 à 254
Quantité de données reçues
(en octets)
Commentaire
Texte défini par l'utilisateur
Commentaire relatif à cet objet.
Objets
Le bloc fonction %SEND_RECV_MSG comporte les objets suivants :
Objet
Description
Valeur
%SEND_RECV_MSGi.LINK
Sélection du port
Consultez la rubrique Propriétés
(voir page 301). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
%SEND_RECV_MSGi.TIMEOUT
Temporisateur de bloc fonction
Consultez la rubrique Propriétés
(voir page 301). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
%SEND_RECV_MSGi.QUANTITYTOSEND
Nombre d'octets à envoyer
Consultez la rubrique Propriétés
(voir page 301). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
%SEND_RECV_MSGi.BUFFERTOSEND
%SEND_RECV_MSGi.SIZERECVBUFFER
%SEND_RECV_MSGi.BUFFERTORECV
302
Adresse du premier objet à
envoyer
(voir page 301). Peut être lu et
Taille disponible (en octets) du
tampon de réception
(voir page 301). Peut être lu et
Première adresse de la table de
mots dans laquelle stocker les
valeurs
Consultez la rubrique Propriétés
écrit. Peut être modifié dans une
table d'animation.
Consultez la rubrique Propriétés
écrit. Peut être modifié dans une
table d'animation.
Consultez la rubrique Propriétés
(voir page 301). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
EIO0000001475 12/2017
Objets de communication
Objet
Description
Valeur
%SEND_RECV_MSGi.QUANTITYRECV
Quantité de données reçues
(en octets)
Consultez la rubrique Propriétés
(voir page 301). Peut être lu
uniquement. Peut être modifié
dans une table d'animation.
%SEND_RECV_MSGi.COMMERROR
Codes des erreurs de
communication
Consultez Codes des erreurs de
communication (voir page 299).
Lecture seule. Peut être lu dans
une table d'animation.
%SEND_RECV_MSGi.OPERERROR
Codes des erreurs d'opération
Consultez Codes des erreurs
d'opération (voir page 299).
Lecture seule. Peut être lu dans
une table d'animation.
%SEND_RECV_MSGi.DONE
Exécution correctement effectuée
Consultez la rubrique Sorties
(voir page 299). Lecture seule.
Peut être lu dans une table
d'animation.
%SEND_RECV_MSGi.BUSY
Exécution en cours
Consultez la rubrique Sorties
(voir page 299). Lecture seule.
Peut être lu dans une table
d'animation.
%SEND_RECV_MSGi.ABORTED
L'exécution a été annulée
Consultez la rubrique Sorties
(voir page 299). Lecture seule.
Peut être lu dans une table
d'animation.
%SEND_RECV_MSGi.ERROR
Une erreur a été détectée
Consultez la rubrique Sorties
(voir page 299). Lecture seule.
Peut être lu dans une table
d'animation.
EIO0000001475 12/2017
303
Objets de communication
Exemple de programmation
Introduction
Le bloc fonction %SEND_RECV_MSG peut être configuré comme dans cet exemple de
programmation.
Programmation
Voici un exemple de bloc fonction %SEND_RECV_MSG :
Réseau
Instruction
0
BLK
%SEND_RECV_MSG0
LD
%I0.0
EXECUTE
LD
%I0.1
ABORT
OUT_BLK
LD
DONE
ST
%Q0.0
LD
BUSY
ST
%Q0.1
LD
ABORTED
ST
%M1
LD
ERROR
ST
%Q0.2
END_BLK
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Chronogramme
Chronogrammes des blocs fonction de communication (voir page 320).
304
EIO0000001475 12/2017
Objets de communication
Sous-chapitre 9.5
Send Receive SMS (%SEND_RECV_SMS)
Send Receive SMS (%SEND_RECV_SMS)
Utilisation du bloc fonction %SEND_RECV_SMS
Cette section décrit l'utilisation du bloc fonction %SEND_RECV_SMS et fournit des conseils de
programmation.
Contenu de ce sous-chapitre
Ce sous-chapitre contient les sujets suivants :
Sujet
Page
Description
306
Configuration des fonctions
314
EIO0000001475 12/2017
305
Objets de communication
Description
Présentation
Le bloc fonction %SEND_RECV_SMS est utilisé pour l'envoi et la réception de SMS (Short Message
Service) via un modem connecté à une ligne série. Par exemple, le contrôleur peut envoyer un
SMS afin de transmettre une alarme à un téléphone mobile spécifié ou recevoir un SMS pour
arrêter une fonction de la machine.
NOTE : L'application doit être configurée avec un niveau fonctionnel (voir SoMachine Basic, Guide
d'utilisation) d'au moins Niveau 3.2 pour utiliser la fonctionnalité SMS.
Le bloc fonction %SEND_RECV_SMS permet d'effectuer les opérations suivantes :
 envoyer un SMS à un destinataire unique ou
 recevoir un SMS filtré à l'aide d'un tableau répertoriant les numéros de téléphone approuvés.
Vous pouvez utiliser un seul bloc fonction %SEND_RECV_SMS dans un programme.
L'utilisation de la fonction SMS comme équipement de contrôle à distance nécessite une attention
et des dispositions particulières afin d'éviter des conséquences involontaires dues à l'exploitation
de la machine commandée, des changements d'état du contrôleur ou l'altération de la mémoire de
données ou des paramètres de fonctionnement de la machine.
AVERTISSEMENT
FONCTIONNEMENT IMPREVU DE L'EQUIPEMENT


Assurez-vous de la présence sur site d'un observateur compétent et qualifié en cas
d'exploitation à distance.
Configurez et installez l'entrée RUN/STOP pour l'application afin que le contrôle local du
démarrage ou de l'arrêt du contrôleur puisse être maintenu indépendamment des commandes
envoyées à distance au contrôleur.
Le non-respect de ces instructions peut provoquer la mort, des blessures graves ou des
dommages matériels.
306
EIO0000001475 12/2017
Objets de communication
La fonction SMS dépend d'un réseau de télécommunications et de paramètres externes. Les
commandes et messages SMS transmis à la machine peuvent être retardés, non envoyés ou non
reçus. N'utilisez pas la fonction SMS pour des opérations de sécurité critiques ou d'autres tâches
critiques.
AVERTISSEMENT
FONCTIONNEMENT IMPREVU DE L'EQUIPEMENT


Ne permettez pas l'utilisation de fonctions de sécurité critiques dans les commandes SMS.
N'utilisez pas les commandes ou messages SMS pour des opérations critiques.
Le non-respect de ces instructions peut provoquer la mort, des blessures graves ou des
dommages matériels.
NOTE : Vérifiez le bon fonctionnement de la fonction SMS et du réseau de télécommunications
associé pendant la mise en service. Procédez à des tests réguliers pour vérifier la couverture
réseau.
Illustration
L'illustration suivante présente le bloc fonction %SEND_RECV_SMS :
EIO0000001475 12/2017
307
Objets de communication
Entrées
Ce tableau décrit les entrées du bloc fonction :
Libellé
Type
Valeur
Execute
BOOL
Lance l'exécution du bloc fonction lors de la détection d'un front montant.
Si un deuxième front montant est détecté durant l'exécution du bloc fonction, il est
ignoré et la commande en cours n'est pas affectée.
Abort
BOOL
Arrête l'exécution du bloc fonction lors de la détection d'un front montant.
La sortie Aborted a la valeur 1 et l'objet %SEND_RECV_SMSi.CommError
contient le code 02 hex (échange arrêté sur un front montant sur l'entrée Abort).
S
BOOL
Avec la valeur 1, le bloc fonction est configuré pour envoyer un SMS.
Avec la valeur 0, le bloc fonction est configuré pour recevoir un SMS.
NOTE : Le réglage de l'entrée Exécuter ou Abandonner sur 1 au premier cycle de tâches en mode
RUN n'est pas détecté en tant que front montant. Le bloc fonction doit d'abord visualiser l'entrée
avec la valeur 0 pour pouvoir détecter le front montant suivant.
Ce tableau décrit les objets d'entrée du bloc fonction :
308
Objet d'entrée
Type
Valeur plage
Description
Link
BYTE
1 - SL1
2 - SL2
Indique la ligne série utilisée pour communiquer via le
modem.
Timeout
WORD
0 à 255
Définit la durée d'attente maximale de la réponse du
modem.
Valeur exprimée par incrément de 100 ms (100 par défaut,
soit 10 secondes). La valeur 0 signifie qu'aucune
temporisation n'est appliquée.
Index
WORD
0 à 15
La valeur de l'index est utilisée :
 Pendant l'envoi, pour sélectionner un texte à envoyer à
partir de la table Messages.
0 correspond à la première chaîne de la table.
 Pendant la réception, pour sélectionner une chaîne de
la table Commandes qui correspond au texte reçu.
Mis à FFFF hex si aucune chaîne correspondante n'est
trouvée.
VAD
DINT
-2147483648 à  Lors de l'envoi, la valeur de %SEND_RECV_SMSi.VAD
2147483647
remplace l'espace réservé $VAD dans le texte du SMS.
 Lors de la réception, la valeur de
%SEND_RECV_SMSi.VAD contient la valeur du point
d'insertion de l'espace réservé $VAD dans le SMS
stocké dans le tableau Commandes.
EIO0000001475 12/2017
Objets de communication
Objet d'entrée
Type
Valeur plage
VBD
DINT
-2147483648 à  Lors de l'envoi, la valeur de %SEND_RECV_SMSi.VBD
2147483647
remplace l'espace réservé $VBD dans le texte du SMS.
 Lors de la réception, la valeur de
%SEND_RECV_SMSi.VBD contient la valeur du point
d'insertion de l'espace réservé $VBD dans le SMS
stocké dans le tableau Commandes.
Description
MASKPHONE
WORD
0 à 15
 Lors de l'envoi, le masque est utilisé pour sélectionner
le destinataire du SMS dans le tableau Numéros de
téléphone.
 Lors de la réception, le masque est appliqué au tableau
Numéros de téléphone pour créer une liste de numéros
valides.
Sorties
Ce tableau décrit les sorties du bloc fonction :
Libellé
Type
Valeur
Done
BOOL
La valeur TRUE indique que l'exécution du bloc fonction a été effectuée sans
erreur.
Occupé
BOOL
La valeur TRUE indique que l'exécution du bloc fonction est en cours.
Annulé
BOOL
La valeur TRUE indique que l'exécution du bloc fonction a été annulée avec
l'entrée %SEND_RECV_SMSi.Abort.
Error
BOOL
La valeur TRUEindique qu'une erreur a été détectée. L'exécution du bloc fonction
est interrompue.
Pour plus d'informations sur %SEND_RECV_SMSi.CommError et
%SEND_RECV_SMSi.OperError, consultez les tableaux Codes des erreurs de
communication (voir page 310) et Codes des erreurs d'opération (voir page 311).
NOTE : Lorsque la sortie Busy a la valeur TRUE, l'exécution continue jusqu'à ce que l'une des sorties Done,
Aborted ou Error a la valeur TRUE.
NOTE : Quand la sortie Busy a la valeur TRUE, les modifications apportées à l'entrée Execute n'ont aucune
incidence sur l'exécution du bloc fonction en cours. Toutefois, en cas d'appel d'un autre bloc fonction
%SEND_RECV_SMS, ce SMS est refusé (CommError = 255 (FF hex) et OperError = 11
(0000000B hex)).
EIO0000001475 12/2017
309
Objets de communication
Ce tableau décrit les objets de sortie du bloc fonction :
Objet de sortie
Type
Description
CommError
BYTE
Pour plus d'informations sur %SEND_RECV_SMSi.CommError, consultez
le tableau Codes des erreurs de communication (voir page 310).
OperError
DWORD
Pour plus d'informations sur %SEND_RECV_SMSi.OperError, consultez
le tableau Codes des erreurs d'opération (voir page 311).
Codes des erreurs de communication
Ce tableau décrit les codes d'erreur écrits dans l'objet %SEND_RECV_SMSi.CommError de
sortie :
Code de l'erreur
détectée au
format décimal
(hexadécimal)
Nom
Description
0 (00 hex)
CommunicationOK
L'échange est correct.
NOTE : Dans ce cas, l'objet
%SEND_RECV_SMSi.OperError de sortie
contient le niveau de signal du modèle au lieu
d'un code d'erreur.
310
1 (01 hex)
TimedOut
L'échange a été interrompu suite à l'expiration du
délai.
2 (02 hex)
Abort
L'échange a été interrompu sur un front montant
sur l'entrée %SEND_RECV_SMSi.Abort.
3 (03 hex)
BadLink
Lien incorrect.
4 (04 hex)
BadCommand
Commande incorrecte.
5 (05 hex)
BadMgtTable
Format de la table de gestion incorrect.
6 (06 hex)
BadParameters
Paramètres spécifiques incorrects.
7 (07 hex)
ProblemSendingSms
Échec de la commande d'envoi de SMS.
9 (09 hex)
RecvCmdError
Commande non valide.
10 (0A hex)
SendValueError
Valeur non valide.
11 (0B hex)
SystemResourceMissing
Ressource système non disponible.
14 (0E hex)
BadLength
Longueur incorrecte.
EIO0000001475 12/2017
Objets de communication
Code de l'erreur
détectée au
format décimal
(hexadécimal)
Nom
Description
254 (FE hex)
ProtocolSpecificError
Indique qu'une erreur de protocole a été
détectée.
NOTE : dans ce cas, l'objet
%SEND_RECV_SMSi.OperError de sortie
contient des informations supplémentaires.
Consultez Codes des erreurs d'opération.
(voir page 311)
255 (FF hex)
SMS refusé.
Refused
NOTE : dans ce cas, l'objet
%SEND_RECV_SMSi.OperError de sortie
contient des informations supplémentaires.
Consultez Codes des erreurs d'opération.
(voir page 311)
Codes des erreurs d'opération
Ce code de retour est pertinent si le code d'erreur de communication (objet
%SEND_RECV_SMSi.CommError de sortie) a la valeur suivante :
 0 (00 hex) (protocole correct)
 254 (FE hex) (protocole incorrect)
 255 (FF hex) (SMS refusé)
Lorsque %SEND_RECV_SMSi.CommError correspond à 0 (00 hex) (protocole correct), l'objet
%SEND_RECV_SMSi.OperError de sortie donne la RSSI (Received Signal Strength Indication) :
Valeur décimale dans l'objet
%SEND_RECV_SMSi.OperError
Niveau de signal du modem RSSI
Moins de 9
Valeur marginale (atténuation supérieure à la limite requise pour
maintenir la connexion du réseau sans fil)
10 à 14
Ok
15 à 19
Bon
Supérieur à 20
Excellent
EIO0000001475 12/2017
311
Objets de communication
Lorsque %SEND_RECV_SMSi.CommError correspond à 254 (FE hex) (protocole incorrect),
l'objet %SEND_RECV_SMSi.OperError de sortie contient des informations supplémentaires :
Valeur décimale (hexadécimale)
dans l'objet
%SEND_RECV_SMSi.OperError
Nom
Description
256 (00000100 hex)
ModemConfSLAsciiFailed
La configuration ASCII de la ligne série est
incorrecte.
512 (00000200 hex)
ModemReconfSLFailed
Le repositionnement de la configuration de
la ligne série sur la configuration utilisateur
est incorrect.
768 (00000300 hex)
ModemBusy
Le modem répond BUSY à la commande
Dial.
1024 (00000400 hex)
ModemNoDialtone
Le modem répond NODIALTONE à la
commande Dial.
1280 (00000500 hex)
ModemNoCarrier
Le signal porteuse du modem a été perdu
ou déconnecté. Le modem répond NO
CARRIER à la commande Dial.
1536 (00000600 hex)
ModemBadAnswer
La réponse du modem est incorrecte.
Erreurs spécifiques liées à l'utilisation de la carte SIM
SimConfigurationFailed
La configuration de la carte SIM est
incorrecte. Par exemple, le code PUK est
demandé.
8192 (00002000 hex)
SimPinCodeInvalid
Le code PIN est incorrect.
16384 (00004000 hex)
SimSmsCenterInvalid
Le numéro de téléphone du centre SMS est
incorrect.
4096 (00001000 hex)
Lorsque %SEND_RECV_SMSi.CommError correspond à 255 (FF hex) (SMS refusé), l'objet
%SEND_RECV_SMSi.OperError de sortie contient des informations supplémentaires :
Valeur décimale (hexadécimale)
dans l'objet
%SEND_RECV_SMSi.OperError
Nom
Description
1 (00000001 hex)
TargetResourceMissing
La ressource du système cible n'est pas
disponible.
5 (00000005 hex)
BadLength
La longueur est incorrecte.
6 (00000006 hex)
CommChannelErr
Une erreur a été détectée sur le canal de
communication.
11 (0000000B hex)
SystemResourceMissing
La ressource du système n'est pas
disponible.
12 (0000000C hex)
TargetCommInactive
La fonction de communication cible n'est pas
active.
312
EIO0000001475 12/2017
Objets de communication
Valeur décimale (hexadécimale)
dans l'objet
%SEND_RECV_SMSi.OperError
Nom
Description
13 (0000000D hex)
TargetMissing
La cible n'est pas disponible.
15 (0000000F hex)
ChannelNotConfigured
Le canal de communication n'est pas
configuré.
16 (00000010 hex)
PhoneNumberNotMatching
Le numéro de téléphone dans le message
reçu ne correspond pas à la liste des
numéros approuvés (liste blanche).
17 (00000011 hex)
MessageNotMatching
Le message reçu ne correspond à aucun
message dans la liste de commandes. Emis
uniquement si le numéro de téléphone de
l'émetteur correspond à une entrée dans la
liste des numéros approuvés (liste blanche).
EIO0000001475 12/2017
313
Objets de communication
Configuration des fonctions
Grandes étapes
La procédure suivante décrit les principales étapes de la configuration du bloc fonction
%SEND_RECV_SMS après la connexion d'un modem à la ligne série :
Etape
Action
1
Dans l'onglet Configuration de SoMachine Basic, configurez la ligne série avec le modem, la
Commande Init et le protocole ASCII. Pour plus d'informations, reportez-vous au Guide de
programmation associé à votre contrôleur logique.
2
Vérifiez que le modem est connecté à la ligne série du contrôleur, ainsi que les points suivants :
 La carte SIM est déverrouillée, c'est-à-dire non protégée par un code PIN.
 Le numéro de téléphone du centre SMS est configuré correctement sur la carte SIM.
3
Dans l'onglet Programmation :
 Ajoutez le bloc fonction %SEND_RECV_SMS et double-cliquez dessus pour afficher le tableau des
propriétés de la fonction.
 Cliquez sur le bouton Configuration de SMS pour ouvrir la fenêtre Assistant SMS.
 Modifiez les tableaux Messages, Commandes et Numéros de téléphone.
Pour plus d'informations, consultez la section Assistant SMS .
 Cliquez sur le bouton Appliquer pour fermer la fenêtre Assistant SMS.
NOTE : Si l'adresse du bloc fonction (par exemple %SEND_RECV_SMS0) n'est pas valide et que le
double-clic est désactivé, vérifiez que le niveau fonctionnel de votre application (onglet
Programmation > Tâches > Comportement) est au dernier niveau Niveau 3.2).
4
Dans l'onglet Programmation, modifiez les champs de la table des propriétés de la fonction.
Pour plus d'informations sur ces champs, consultez la section Propriétés (voir page 317).
AVERTISSEMENT
FONCTIONNEMENT IMPREVU DE L'APPAREIL
Avant d'utiliser le bloc fonction, vérifiez que les indices des messages, des commandes et des
numéros de téléphone prévus sont valides (ceux que vous avez l'intention d'utiliser).
Le non-respect de ces instructions peut provoquer la mort, des blessures graves ou des
dommages matériels.
Pour plus d'informations sur l'installation et le paramétrage des modems SR2MOD03, consultez le
manuel Modem sans fil SR2MOD02 et SR2MOD03 - Guide de l'utilisateur (EIO00000001575).
314
EIO0000001475 12/2017
Objets de communication
Assistant SMS
Pour utiliser le bloc fonction %SEND_RECV_SMS, configurez les tableaux des commandes, des
messages et des numéros de téléphone.
Cliquez sur le bouton Configuration de SMS dans la zone des propriétés Send Receive SMS pour
ouvrir la fenêtre Assistant SMS.
La fenêtre Assistant SMS comporte trois onglets dans lesquels vous devez configurer des
tableaux :
 Messages
Entrez les chaînes utilisées lors de l'envoi de SMS par le contrôleur. Utilisez des espaces
réservés pour les variables, la date et l'heure. Tenez compte des limitations liées au nombre de
caractères et au format.
 Commandes
Entrez les chaînes utilisées lors de la réception de SMS par le contrôleur. Utilisez des espaces
réservés pour les variables. Tenez compte des limitations liées au nombre de caractères et au
format.
 Numéros de téléphone
Lors de la programmation du bloc fonction pour l'envoi de messages SMS, vous sélectionnez
le destinataire dans ce tableau.
Lors de la programmation du bloc fonction pour la réception de messages SMS, vous
sélectionnez les numéros de téléphone appelants autorisés dans cette liste. La liste des
numéros de téléphone autorisés augmente la sécurité de votre application. Lorsqu'un appel et
le SMS associé sont transmis à votre application via le modem, le numéro de téléphone de
l'expéditeur est validé avant d'entreprendre toute action liée au SMS reçu.
Pour plus d'informations, consultez la ligne MASKPHONE à la section Propriétés
(voir page 317).
NOTE : pour connaître les codes de numérotation internationaux, consultez la documentation
du modem.
Chaque tableau contient 16 entrées maximum avec un index compris entre 0 et 15 associés à
chaque ligne.
Les chaînes que contiennent les tableaux de l'assistant peuvent utiliser les formats et les tailles de
message suivants :
Format des caractères
Tableaux Messages et Commandes
GSM 7-bit
105 caractères maximum
UNICODE
45 caractères maximum
NOTE : le format des caractères est déterminé automatiquement par les caractères que contient le champ
de texte.
EIO0000001475 12/2017
315
Objets de communication
Les espaces réservés suivants peuvent être ajoutés au texte des tableaux Messages ou
Commandes et tenir lieu de variables :
Espace réservé
Valeur de remplacement lors de
l'exécution
Nombre de
caractères en format
GSM 7-bit
Nombre de caractères
en format UNICODE
$DATE(1)
YY/MM/DD (date du jour)
8+1
16 + 2
$TIME(1)
HH:MM:SS (heure actuelle)
8+1
16 + 2
$VAD
La valeur DWORD du paramètre
%SEND_RECV_SMSi.VAD est convertie
en texte.
12 maximum
24 maximum
$VBD
La valeur DWORD du paramètre
%SEND_RECV_SMSi.VBD est convertie
en texte.
12 maximum
24 maximum
$$
Le symbole $
1
2
NOTE : lorsque le texte saisi est valide (nombre maximum de caractères respecté et espaces réservés
valides), le bouton Appliquer est actif.
(1) Ignoré pour le tableau Commandes
Exemples
Cet exemple illustre l'utilisation des espaces réservés dans les messages :
Messages
Message configuré
$DATE : $TIME - Valeur A = $VAD et Valeur B = $VBD !
Valeurs des
espaces réservés
VAD = 10; VBD = 2000
SMS envoyé
15/04/27 : 11:15:43 - Valeur A = 10 et Valeur B = 2000 !
Cet exemple illustre l'utilisation des espaces réservés dans les commandes :
Commandes
316
Commande
configurée
Valeur A = $VAD et Valeur B = $VBD !
SMS reçu
Valeur A = 300 et Valeur B = 2 !
Valeurs capturées
VAD = 300; VBD = 2
EIO0000001475 12/2017
Objets de communication
Propriétés
Double-cliquez sur le bloc fonction pour ouvrir le tableau des propriétés de la fonction.
Il est impossible de modifier les propriétés de ce bloc fonction en mode en ligne.
Le bloc fonction %SEND_RECV_SMS a les propriétés suivantes :
Propriété
Valeur
Description
Utilisé
Case à cocher
Activé/Désactivé.
Indique si l'adresse est utilisée.
Adresse
%SEND_RECV_SMSi, où i est
compris entre 0 et le nombre
d'objets disponibles sur le
contrôleur logique.
i est l'identificateur de l'instance. Pour connaître le nombre
maximal d'instances, consultez le guide de programmation de votre
contrôleur logique.
Symbole
Texte défini par l'utilisateur.
Le symbole identifie de façon unique cet objet. Pour plus
d'informations, consultez Définition et utilisation des symboles
(voir SoMachine Basic, Guide d'utilisation).
Link
1 - SL1
2 - SL2
La ligne série sur laquelle le modem est configuré (onglet
Configuration).
Timeout
0 à 255
Valeur exprimée par incrément
de 100 ms (100 par défaut, soit
10 secondes).
La valeur 0 signifie qu'aucune
temporisation n'est appliquée.
La temporisation définit la durée d'attente maximale de la réponse
du modem.
Si le délai expire, l'échange est interrompu avec un code d'erreur
(%SEND_RECV_SMSi.CommError = 01 hex). Si le système reçoit
une réponse après l'expiration du délai, cette réponse est ignorée.
Index
0 à 15
NOTE : 0 correspond à la
première chaîne de la liste.
VAD
-214748364 à 2147483647
NOTE : la temporisation définie pour le bloc fonction remplace la
valeur entrée sur l'écran de configuration SoMachine Basic. Pour
plus d'informations, reportez-vous au Guide de programmation
associé à votre contrôleur logique.
 Lors de l'envoi, la valeur de l'index est utilisée pour sélectionner
un texte à envoyer à partir du tableau Messages.
 Lors de la réception, la valeur correspond à l'index du tableau
Commandes qui est identique au texte reçu.
 Lors de l'envoi, la valeur de %SEND_RECV_SMSi.VAD remplace
l'espace réservé $VAD dans le texte du SMS.
 Lors de la réception, la valeur de %SEND_RECV_SMSi.VAD
contient la valeur du point d'insertion de l'espace réservé $VAD
dans le SMS stocké dans le tableau Commandes.
VBD
-214748364 à 2147483647
 Lors de l'envoi, la valeur de %SEND_RECV_SMSi.VBD remplace
l'espace réservé $VBD dans le texte du SMS.
 Lors de la réception, la valeur de %SEND_RECV_SMSi.VBD
contient la valeur du point d'insertion de l'espace réservé $VBD
dans le SMS stocké dans le tableau Commandes.
EIO0000001475 12/2017
317
Objets de communication
Propriété
Valeur
Description
MASKPHONE
0000000000000000 bin à
1000000000000000 bin
 Lors de l'envoi, ce masque est utilisé pour sélectionner le
Texte défini par l'utilisateur
Commentaire relatif à cet objet.
Commentaire
Valeur initiale du masque.
destinataire du SMS dans le tableau Numéros de téléphone.
Par exemple, 0000000000000010 bin signifie que le SMS
est envoyé au deuxième numéro (index 1) du tableau Numéros
de téléphone.
 Lors de la réception, le masque est appliqué au tableau
Numéros de téléphone pour créer une liste de numéros
appelants valides. Un bit du masque indique le numéro de
téléphone qui a été utilisé pour envoyer le SMS au contrôleur
logique.
Exemple : 0000000000000100 bin signifie que le troisième
numéro de téléphone de la liste Numéros de téléphone (index 2)
a envoyé le SMS.
Objets
Le bloc fonction %SEND_RECV_SMS comporte les objets suivants :
Objet
Description
Valeur
%SEND_RECV_SMSi.LINK
Sélection du port
Consultez la rubrique Propriétés
(voir page 317). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
%SEND_RECV_SMSi.TIMEOUT
Temporisateur de bloc fonction
Consultez la rubrique Propriétés
(voir page 317). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
%SEND_RECV_SMSi.INDEX
318
Index de messages ou table de
commandes
Consultez la rubrique Propriétés
(voir page 317). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
%SEND_RECV_SMSi.VAD
VAD - Espace réservé A
Consultez la rubrique Propriétés
(voir page 317). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
%SEND_RECV_SMSi.VBD
VBD - Espace réservé B
Consultez la rubrique Propriétés
(voir page 317). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
%SEND_RECV_SMSi.MASKPHONE
Masque de sélection des entrées
dans la table de numéros de
téléphone
Consultez la rubrique Propriétés
(voir page 317). Peut être lu et
écrit. Peut être modifié dans une
table d'animation.
EIO0000001475 12/2017
Objets de communication
Objet
Description
Valeur
%SEND_RECV_SMSi.COMMERROR
Codes des erreurs de
communication
Consultez Codes des erreurs de
communication (voir page 310).
Peut être lu uniquement. Peut être
modifié dans une table
d'animation.
%SEND_RECV_SMSi.OPERERROR
Codes des erreurs d'opération
Consultez Codes des erreurs
d'opération (voir page 311). Peut
être lu uniquement. Peut être
modifié dans une table
d'animation.
%SEND_RECV_SMSi.DONE
Exécution correctement effectuée
Consultez la rubrique Sorties
(voir page 309). Peut être lu
uniquement. Peut être modifié
dans une table d'animation.
%SEND_RECV_SMSi.BUSY
Exécution en cours
Consultez la rubrique Sorties
(voir page 309). Peut être lu
uniquement. Peut être modifié
dans une table d'animation.
%SEND_RECV_SMSi.ABORTED
L'exécution a été annulée
Consultez la rubrique Sorties
(voir page 309). Peut être lu
uniquement. Peut être modifié
dans une table d'animation.
%SEND_RECV_SMSi.ERROR
Une erreur a été détectée
Consultez la rubrique Sorties
(voir page 309). Peut être lu
uniquement. Peut être modifié
dans une table d'animation.
Chronogrammes
Consultez la rubrique Comportement des signaux des blocs fonction avec l'entréeExecute
(voir page 320).
EIO0000001475 12/2017
319
Objets de communication
Sous-chapitre 9.6
Chronogrammes des blocs fonction d'objet de communication.
Chronogrammes des blocs fonction d'objet de communication.
Exemples de chronogrammes
Exemple 1
Exécution terminée sans erreur :
Exemple 2
Exécution terminée avec une erreur :
320
EIO0000001475 12/2017
Objets de communication
Exemple 3
Bloc fonction abandonné par l'application :
Si Execute a déjà été remis à FALSE lors de la demande d'abandon, Abort est réglé sur TRUE
pour un seul cycle.
(1) Réglé sur TRUE pour un seul cycle car Execute a déjà été réglé sur FALSE.
EIO0000001475 12/2017
321
Objets de communication
Exemple 4
Exécution terminée sans erreur une fois que Execute a été réglé sur FALSE.
(1) Réglé sur TRUE pour un seul cycle car Execute a déjà été réglé sur FALSE.
322
EIO0000001475 12/2017
SoMachine Basic
EIO0000001475 12/2017
Chapitre 10
Fonctions définies par l'utilisateur
Fonctions définies par l'utilisateur
Présentation
Vue d'ensemble
Une fonction définie par l'utilisateur vous permet de créer des fonctions avec un ou plusieurs
paramètres d'entrée, des variables locales et une valeur de retour. Les fonctions définies par
l'utilisateur sont stockées dans le projet SoMachine Basic.
Vous pouvez appeler des fonctions définies par l'utilisateur dans :
la tâche maître ;
 les tâches périodiques ;
 les POU libres.

Pour créer des fonctions définies par l'utilisateur, l'application doit être configurée avec un niveau
fonctionnel (voir SoMachine Basic, Guide d'utilisation) correspondant au moins à Niveau 6.0.
Pour plus d'informations sur l'utilisation des fonctions définies par l'utilisateur, consultez la section
SoMachine Basic - Guide d'utilisation - Fonctions définies par l'utilisateur (voir SoMachine Basic,
Guide d'utilisation).
EIO0000001475 12/2017
323
324
EIO0000001475 12/2017
SoMachine Basic
EIO0000001475 12/2017
Chapitre 11
Blocs fonction définis par l'utilisateur
Blocs fonction définis par l'utilisateur
Présentation
Vue d'ensemble
Un bloc fonction défini par l'utilisateur vous permet de créer des blocs fonction avec un ou plusieurs
paramètres d'entrée et de sortie, des variables locales et une valeur de retour. Les blocs fonction
définis par l'utilisateur sont stockés dans le projet SoMachine Basic.
Vous pouvez appeler des blocs fonction définis par l'utilisateur dans :
 la tâche maître ;
 les tâches périodiques ;
 les événements ;
 les POU libres.
Pour créer des blocs fonction définis par l'utilisateur, l'application doit être configurée avec un
niveau fonctionnel (voir SoMachine Basic, Guide d'utilisation) correspondant au moins à
Niveau 6.0.
Pour plus d'informations sur l'utilisation des blocs fonction définis par l'utilisateur, consultez la
section SoMachine Basic - Guide d'utilisation - Blocs fonction définis par l'utilisateur
(voir SoMachine Basic, Guide d'utilisation).
EIO0000001475 12/2017
325
326
EIO0000001475 12/2017
SoMachine Basic
EIO0000001475 12/2017
Chapitre 12
Fonctions d'horloge
Fonctions d'horloge
Présentation
Ce chapitre décrit les fonctions de gestion horaire des contrôleurs.
Contenu de ce chapitre
Ce chapitre contient les sujets suivants :
Sujet
Page
Fonctions d'horloge
328
Horodatage
329
Réglage de la date et de l'heure
331
EIO0000001475 12/2017
327
Fonctions d'horloge
Introduction
Sur les contrôleurs logiques équipés d'une fonction RTC, vous pouvez utiliser les fonctions d'heure
du jour suivantes lorsque SoMachine Basic est connecté au contrôleur logique :
 Les blocs fonction RTC (voir page 254) permettent de lire la date et l'heure de l'horodateur, ou
de mettre à jour l'horodateur du contrôleur logique avec une date et une heure définies par
l'utilisateur.
 Les blocs fonction de programmation (voir page 249) permettent de contrôler des actions à des
heures prédéfinies ou calculées.
 L'horodatage (voir page 329) permet d'affecter une date et une heure à des événements, et de
mesurer la durée de ces derniers.
Cette horloge peut être réglée par un programme (voir page 329). La pile du contrôleur facilite le
réglage de l'horloge en continuant de fonctionner pendant 1 an lorsque le contrôleur est hors
tension. Le contrôleur n'a pas de batterie rechargeable. La batterie a une durée de vie moyenne
de 4 ans et doit être remplacée avant sa fin de vie. Afin d'éviter toute perte de données, vous
disposez d'un délai de 120 secondes pour remplacer la pile du contrôleur.
L'horloge affiche l'heure au format "24 heures" et tient compte des années bissextiles.
328
EIO0000001475 12/2017
Horodatage
Introduction
Les mots système %SW49 à %SW53 contiennent la date et l'heure au format BCD, un format utile
pour l'affichage sur un périphérique ou la transmission vers un périphérique. Ces mots système
permettent de stocker la date et l'heure d'un événement.
Les instructions BTI permettent de convertir les dates et heures du format BCD au format binaire.
Pour plus d'informations, consultez la section Instructions de conversion BCD/binaire
(voir page 91).
Datage d'un événement
Pour dater un événement, il suffit d'utiliser des opérations d'affectation afin de transférer le contenu
de mots système vers des mots mémoire, puis de traiter ces mots mémoire (par exemple, la
transmission à l'unité d'affichage à l'aide de l'instruction EXCH).
Exemple de programmation
L'exemple suivant montre comment dater un front montant sur l'entrée %I0.1 :
Réseau
Instruction
0
LDR
%I0.1
[%MW11:5:=%SW49:5]
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Dès qu'un événement est détecté, la table de mots contient :
Codage
Octet de poids fort
Octet de poids faible
%MW11
-
Jour de la semaine (1)
%MW12
00
Seconde
%MW13
Heure
Minute
%MW14
Mois
Jour
%MW15
Siècle
Année
(1) 1 = lundi, 2 = mardi, 3 = mercredi, 4 = jeudi, 5 = vendredi, 6 = samedi, 7 = dimanche
EIO0000001475 12/2017
329
Exemple de table de mots
Exemple de données pour le lundi 03 juin 2013 à 13:40:30 :
Mot
Valeur (hex.)
Signification
%MW11
0001
Lundi
%MW12
0030
30 secondes
%MW13
1340
13 heures, 40 minutes
%MW14
0603
06 = 3 juin
%MW15
2013
2013
Date et heure du dernier arrêt
Les mots système %SW54 à %SW57 contiennent la date et l'heure du dernier arrêt, et le mot %SW58
contient le code affichant la cause du dernier arrêt, au format BCD.
330
EIO0000001475 12/2017
Réglage de la date et de l'heure
Introduction
Vous pouvez mettre à jour la date et l'heure du contrôleur logique, de l'une des méthodes
suivantes :
 Avec l'onglet Gestion RTC de l'onglet Mise en service de SoMachine Basic. Cette méthode
n'est disponible qu'en mode en ligne (voir SoMachine Basic, Guide d'utilisation).
Vous avez le choix entre deux modes :
 Manuel : ce mode affiche des champs de date et d'heure, et vous permet de choisir
manuellement l'heure à configurer dans le contrôleur logique.
 Automatique : ce mode utilise l'heure du PC qui exécute SoMachine Basic.
Pour plus d'informations, consultez la section Gestion RTC (voir SoMachine Basic, Guide
d'utilisation).


Dans un programme, avec des blocs fonction RTC (voir page 254).
En mode en ligne, en mettant à jour les mots système soit directement, soit dans le programme
à l'aide des blocs d'opération %SW49 à %SW53 ou du mot système %SW59.
NOTE : la date et l'heure ne sont réglables que si la fonction RTC est disponible dans votre
contrôleur logique (consultez le guide de programmation de votre contrôleur logique.).
Utilisation des mots %SW49 à %SW53
Pour régler la date et l'heure à l'aide des mots système %SW49 à %SW53, le bit %S50 doit être mis
à 1. Lorsque %S50 est mis à 1, le contrôleur ne met plus à jour les mots système %SW49 à %SW53.
Sur un front montant de %S50 (%S50 mis à 0), le RTC interne du contrôleur est mis à jour par les
valeurs dans %SW49 à %SW53. Ensuite, le contrôleur reprend la mise à jour de %SW49 à %SW53 à
l'aide de l'horloge RTC.
Ce tableau indique les mots système contenant la date et l'heure (au format BCD) des fonctions
RTC :
Mot système
Description
%SW49
xN Jour de la semaine (N=1 pour lundi)
%SW50
00SS : secondes
%SW51
HHMM : heure et minute
%SW52
MMJJ : mois et jour
%SW53
SSAA : siècle et année
Pour obtenir la liste complète des bits et mots système, consultez le guide de programmation de
votre contrôleur.
EIO0000001475 12/2017
331
Exemple de programmation :
Réseau
Instruction
Commentaire
0
LD %S50
R %S50
–
1
LD %I0.1
[%SW50:=%MW11]
[%SW51:=%MW12]
[%SW52:=%MW13]
[%SW53:=%MW14]
S %S50
Consultez la section Instructions de conversion
BCD/binaire (voir page 91).
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
Les mots %MW11 à %MW14 contiennent les nouvelles date et heure (consultez la section Analyse
du code BCD (voir page 91)) et correspondent au codage des mots %SW50 à %SW53.
NOTE : %SW49 (Jour de la semaine) est automatiquement calculé en fonction de la date indiquée.
La table de mots doit contenir les nouveaux paramètres de date et d'heure :
Codage
Octet de poids fort
Octet de poids faible
%MW11
–
Seconde
%MW12
Heure
Minute
%MW13
Mois
Jour
%MW14
Siècle
Année
Mot
Valeur (hex.)
Signification
%MW11
0030
30 secondes
%MW12
1340
13 heures, 40 minutes
%MW13
0603
06 = 3 juin
%MW14
2013
2013
Exemple pour le 03 juin 2013 :
332
EIO0000001475 12/2017
Utilisation du mot %SW59
Pour mettre à jour la date et l'heure, vous pouvez également utiliser le bit système %S59 et le mot
système %SW59.
Le réglage du bit %S59 sur 1 permet de configurer la date et l'heure en cours à l'aide du mot %SW59.
%SW59 incrémente ou décrémente chacun des composants de date et d'heure sur un front
montant.
Ce tableau décrit chaque bit du mot système %SW59 pour le réglage des paramètres de date et
heure :
Incrément
Décrément
Paramètre
Bit 0
Bit 8
Jour de la semaine(1)
Bit 1
Bit 9
Secondes
Bit 2
Bit 10
Minutes
Bit 3
Bit 11
Heures
Bit 4
Bit 12
Jours
Bit 5
Bit 13
Mois
Bit 6
Bit 14
Années
Bit 7
Bit 15
Siècles(1)
(1) L'utilisateur ne peut pas modifier (incrémentation ou décrémentation) le jour de la semaine et les siècles.
Pour obtenir la liste complète des bits et mots système, consultez le guide de programmation de
votre contrôleur.
Exemple d'application
Ce panneau avant permet de modifier le réglage de l'horloge interne (heures, minutes et
secondes).
EIO0000001475 12/2017
333
Description des commandes :
 Le commutateur Heures/Minutes/Secondes permet de sélectionner l'heure à modifier, respectivement à l'aide des entrées %I0.2 %I0.3 et %I0.4.
 Le bouton + incrémente l'affichage de l'heure sélectionnée via l'entrée %I0.0.
 Le bouton - décrémente l'affichage de l'heure sélectionnée via l'entrée %I0.1.
Le programme suivant lit les entrées du panneau et règle l'horloge interne :
Réseau
Instruction
Commentaire
0
LD %M0
ST %S59
–
1
LD %I0.2
ANDR %I0.0
ST %SW59:X3
Heure
2
LD %I0.2
ANDR %I0.1
ST %SW59:X11
–
3
LD %I0.3
ANDR %I0.0
ST %SW59:X2
Minute
4
LD %I0.3
ANDR %I0.1
ST %SW59:X10
–
5
LD %I0.4
ANDR %I0.0
ST %SW59:X1
Seconde
6
LD %I0.4
ANDR %I0.1
ST %SW59:X9
–
NOTE : Pour obtenir le schéma à contacts équivalent, reportez-vous à la procédure de réversibilité
(voir page 20).
334
EIO0000001475 12/2017
SoMachine Basic
Glossaire
EIO0000001475 12/2017
Glossaire
!
%
%Q
Selon la norme IEC, % est un préfixe qui identifie les adresses mémoire internes des contrôleurs
logiques pour stocker la valeur de variables de programme, de constantes, d'E/S, etc.
Selon la norme IEC, %Q représente un bit de sortie (par exemple, un objet langage de type sortie
numérique).
A
application
Programme comprenant des données de configuration, des symboles et de la documentation.
ASCII
Acronyme de American Standard Code for Information Interchange. Protocole utilisé pour
représenter les caractères alphanumériques (lettres, chiffres, ainsi que certains caractères
graphiques et de contrôle).
B
bloc fonction
Unité de programmation qui possède 1 ou plusieurs entrées et renvoie 1 ou plusieurs sorties. Les
blocs fonction (FBs) sont appelés via une instance (copie du bloc fonction avec un nom et des
variables dédiés) et chaque instance a un état persistant (sorties et variables internes) d'un appel
au suivant.
Exemples : temporisateurs, compteurs
bus d'extension
Bus de communication électronique entre des modules d'E/S d'extension et un contrôleur.
C
configuration
Agencement et interconnexions des composants matériels au sein d'un système, ainsi que les
paramètres matériels et logiciels qui déterminent les caractéristiques de fonctionnement du
système.
EIO0000001475 12/2017
335
Glossaire
contrôleur
Automatise des processus industriels. On parle également de contrôleur logique programmable
(PLC) ou de contrôleur programmable.
E
E/S
Entrée/sortie
élément conditionnel
Permet d'implémenter des conditions dans le programme en mode déconnecté (hors ligne).
élément de boucle
Permet d'implémenter une séquence d'instructions dans le programme en mode hors ligne.
entrée analogique
Convertit les niveaux de tension ou de courant reçus en valeurs numériques. Vous pouvez stocker
et traiter ces valeurs au sein du contrôleur logique.
J
journalisation des données
Stockage permanent des données liées à des objets ou des chaînes.
L
langage à liste d'instructions
Un programme écrit en langage à liste d'instructions (IL) consiste en une série d'instructions
textuelles exécutées de manière séquentielle par le contrôleur. Chaque instruction comprend un
numéro de ligne, un code d'instruction et un opérande (voir IEC 61131-3).
langage schéma à contacts
Représentation graphique des instructions d'un programme de contrôleur, avec des symboles
pour les contacts, les bobines et les blocs dans une série de réseaux exécutés séquentiellement
par un contrôleur (voir IEC 61131-3).
P
programme
Composant d'une application constitué de code source compilé qu'il est possible d'installer dans
la mémoire d'un contrôleur logique.
336
EIO0000001475 12/2017
Glossaire
R
RTC
Acronyme de real-time clock, horloge en temps réel. Horloge horaire et calendaire supportée par
une batterie qui fonctionne en continu, même lorsque le contrôleur n'est pas alimenté, jusqu'à la
fin de l'autonomie de la batterie.
S
sortie analogique
Convertit des valeurs numériques stockées dans le contrôleur logique et envoie des niveaux de
tension ou de courant proportionnels.
EIO0000001475 12/2017
337
Glossaire
338
EIO0000001475 12/2017
SoMachine Basic
Index
EIO0000001475 12/2017
Index
Symbols
%C, 188
%DR, 231
%I, 33
%IW, 33
%IWS, 33
%KD, 41
%KF, 41
%KW, 36
%M, 31
%MD, 41
%MF, 41
%MSG, 198
%MW, 36
%Q, 33
%QW, 33
%QWS, 33
%R, 222
%READ_VAR, 273
configuration, 277
description, 273
exemple de programmation, 280
%S, 31
%SBR, 239
%SC, 244
%SCH, 249
%SEND_RECV_MSG, 298
configuration, 301
description, 298
exemple de programmation, 304
%SEND_RECV_SMS, 306
configuration, 314
description, 306
%SW, 36
%TM, 178
%WRITE_READ_VAR, 290
configuration, 293
description, 290
exemple de programmation, 296
EIO0000001475 12/2017
%WRITE_VAR, 282
configuration, 284
description, 282
exemple de programmation, 288
%X, 31
%Xi (étape Grafcet), propriétés, 264
A
ABS, 107
ACOS, 110
addition, 83
adressage
format, 33
objets d'E/S, 33
affectation, opérateurs, 62
AND, 64
ANDF, 64
ANDN, 64
ANDR, 64
ASCII
exemples, 209
ASIN, 110
Assistant Drum, 233
ATAN, 110
B
bits système
%S18, 42
blocs comparaison
insertion d'expressions IL dans, 27
339
Index
blocs fonction
%READ_VAR, 273
%SEND_RECV_MSG, 298
%SEND_RECV_SMS, 306
%WRITE_READ_VAR, 290
%WRITE_VAR, 282
counter, 188
définis par l'utilisateur, 325
description générale, 53
Drum, 231
LIFO/FIFO register, 222
message, 198
principes de programmation, 171
RTC, 255
shift bit register, 239
step counter, 244
timer, 178
blocs fonction définis par l'utilisateur, 325
blocs horodateurs
blocs horodateurs, 249
blocs opération
insertion d'instructions d'affectation dans,
23
C
calcul, 83
chaînes de bits, 46
code source, utilisation d'exemples, 20
COS, 110
counter
configuration, 190
description, 188
exemple de programmation, 193
D
débordement
index, 52
débordement d'index, 52
décrémentation, 83
DEG_TO_RAD, 112
DINT_TO_REAL, 113
division, 83
340
Drum
configuration, 232
exemple de programmation, 235
Drum
description, 231
E
élément conditionnel, 100
configuration, 101
élément de boucle, 102
configuration, 102
EQUAL_ARR, 137
EXCH, 196
exemples, code source, 20
EXP, 107
expression de comparaison
insertion dans des réseaux en langage
Schéma à contacts, 27
EXPT, 107
F
FALLING
opérateur, 72
FIND_, 139
fonctions d'horloge
horodatage, 329
présentation, 328
réglage de la date et de l'heure, 331
fonctions définies par l'utilisateur, 323
format d'adresse des entrées/sorties, 33
front descendant
détection avec l'instruction LDF, 59
détection avec l'opérateur FALLING, 59
front montant
détection avec l'instruction LDR, 59
détection avec l'opérateur RISING, 59
EIO0000001475 12/2017
Index
I
incrémentation, 83
instruction NOP, 97
instructions
arithmétiques, 83
ASCII, 115
booléennes, 56
comparaison, 74
conversion ASCII/entier, 118
conversion ASCII/mot double, 126
conversion ASCII/valeur flottante, 122
conversion d'angle, 112
conversion d'entier/nombre à virgule flottante, 113
conversion entier/ASCII, 120
conversion mot double/ASCII, 128
conversion valeur flottante/ASCII, 124
échange, 196
END, 95
NOP, 97
objets d'entrée/sortie, 161
pile, 130
ROUND, 116
saut, 98
sous-programme, 104
SR, 104
table d'objets, 132
tables d'objet, 135
trigonométriques, 110
instructions arithmétiques, 83
instructions booléennes, 57
instructions d'affectation
chaînes de bits, 79
insertion dans des réseaux en langage
Schéma à contacts, 23
mots, 81
numériques, 78
tables d'objets, 133
instructions d'échange
EXCH1, 196
EXCH2, 196
EXCH3, 196
instructions de comparaison, 74
EIO0000001475 12/2017
instructions de conversion
BCD/binaire, 91
mot simple/double, 93
instructions de décalage, 89
instructions de pile
MPP, 130
MPS, 130
MRD, 130
instructions END, 95
instructions logiques, 87
instructions numériques
décalage, 89
INT_TO_REAL, 113
J
journalisation des données, 261
configuration, 262
L
LD, 60
LDF, 59, 60
LDN, 60
LDR, 59, 60
LIFO/FIFO register
configuration, 224
description, 222
exemple de programmation, 228
FIFO, 227
LIFO, 226
LKUP, 147
LN, 107
LOG, 107
M
MAX_ARR, 141
MEAN, 152
message
configuration, 202
description, 198
exemple de programmation, 207
MIN_ARR, 141
341
Index
modbus
requêtes et exemples standard, 211
mots système
%SW17, 42
multiplication, 83
N
N, 71
O
objets
adresse directe, 50
adresse indexée, 50
définition, 30
indexés, 50
logiciels, 169
réseau, 167
structurés, 46
tables, 46
objets bit
blocs fonction, 53
objets bit mémoire
description, 31
objets de réseau, 167, 167
objets de variateur, 269
objets flottants
description, 41
objets mot
bloc fonction, 54
description, 36
objets mot double
blocs fonction, 54
description, 41
OCCUR_ARR, 143
opérateur NOT, 71
342
opérateurs
affectation, 62
AND, 64
chargement, 60
FALLING, 72
NOT, 71
OR, 66
RISING, 72
XOR, 68
opérateurs AND, 64
opérateurs de chargement, 60
opérateurs OR, 66
opérateurs OR exclusifs, 68
opérations
insertion dans des réseaux en langage
Schéma à contacts, 23
OR, 66
ORF, 66
ORN, 66
ORR, 66
outils
objets de réseau, 167
Outils
objets de variateur, 269
P
PID, 260
propriétés des étapes Grafcet, 264
R
R, 62
racine carrée, 83
RAD_TO_DEG, 112
READ_IMM_IN, 154
REAL_TO_DINT, 113
REAL_TO_INT, 113
reste, 83
RISING
opérateur, 72
ROL_ARR, 144
ROR_ARR, 144
RTC
configuration, 259
EIO0000001475 12/2017
Index
S
S, 62
schedule blocks
description, 249
Schedule Blocks
programmation et configuration, 252
shift bit register
configuration, 240
description, 239
exemple de programmation, 242
SIN, 110
SORT_ARR, 146
soustraction, 83
SQRT, 107
SR (sous-programme), instructions, 104
ST, 62
step counter
configuration, 245
description, 244
exemple de programmation, 246
STN, 62
SUM_ARR, 135
V
valeur absolue, 83
W
WRITE_IMM_OUT, 156
X
XOR, 68
XORF, 68
XORN, 68
XORR, 68
T
tables
instructions sur, 132
TAN, 110
timer
configuration, 179
description, 178
exemple de programmation, 186
Type TOF, 183
type TON, 181
type TP, 185
traitement numérique
affectation, 78
présentation, 77
TRUNC, 107
U
utilisation d'exemples de code source, 20
EIO0000001475 12/2017
343
Index
344
EIO0000001475 12/2017

Manuels associés