Tutoriel : Paramétrage permettant la communication entre automates WAGO par protocole Modbus / UDP
• 1. Présentation du matériel nécessaire
• 2. Raccordements
• 3. Adressage IP des automates
• 4. Rappel : Adressage des variables de l'automate
• 5. Rappel : Affectation des variables
• 6. Le bloc fonctionnel ETDERNET_MODBUSMASTER_UDP
• 7. Intégration de l'adresse IP de l'automate esclave dans le bloc fonction
• 8. Liaison entre les adresses internes et les adresses Modbus
• 9. Quantité de données à lire ou écrire
• 10. Exemple de communication entre 2 automates
• 11. Exemple de sujet de travaux pratiques
1. Présentation du matériel :
L'objectif est de pouvoir faire communiquer des automates WAGO par une liaison Modbus UDP (port ETDernet de l'automate).
Nécessite :• Un ordinateur avec une carte réseau.• Le logiciel de programmation Codesys (la version utilisée pour le tuto est v2.3). • Deux automates (750-841 le maître et 750-842 l'esclave). • La bibiloTDèque ModbusETDernet_04.lib. • Un convertisseur (AC/DC : 230V AC / 24V DC ) pour alimenter les automates. • Un cordon RJ45 croisé pour les liaisons automate (750-841 ou 750-842) vers ordinateur ou la laison entre automates (750-841 ou 750-841). • Un cordon RJ45 droit si l'automate utilisé est 32 bit (exception du 750-841 qui nécessite un croisé). • Un switch (en option). |
|
2. Raccordement réseau ETDernet :
2.1. Pour les automates 750-841 et 750-842 :
L'automate 750-841 est un contrôleur ETDernet 32 bits mais ne dispose de la fonctionnalité Auto MDI/MDI-X ce qui signifie qu'il faut utiliser :• Un cordon croisé pour une liaison direct (API->API ou API->PC)
• Deux cordons droits avec un switch (API -> SWITCH -> PC ou API -> SWITCH -> API).
L'automate 750-842 quant à lui est un contrôleur ETDernet 16 bits est nécessite les précautions de câblage précédentes.
L'image ci-dessous présente comment raccorder les automates entre eux ou le raccordement automate vers un ordinateur.
2.2. Pour les autres automates 32 bits :
Ces automates contrôleur ETDernet 32 bits disposent de la fonctionnalité Auto MDI/MDI-X ce qui signifie que l'on peut utiliser un cordon droit ou croisé pour le raccordements réseau (API->PC ou API->API).3. Adressage IP de l'automate :
Pour pouvoir communiquer entre 2 automates il faut que les 2 automates soient sur le même réseau avec 2 adresses IP différentes mais sur la même plage d'adresse et même masque de sous réseau.• Automate maître : 192.168.1.2 - masque de sous réseau : 255.255.255.0
• Automate esclave : 192.168.1.3 - masque de sous réseau : 255.255.255.0
Vérifer que vos automates soient sur la classe d'adresse IP. Dans ce tutoriel on utilisera la classe C.
• L'automate maître (750-841) aura comme adresse IP : 192.168.1.2
• L'automate esclave (750-842) aura comme adresse IP : 192.168.1.3
Rappel :
Pour paramétrer l'adresse IP de l'automate il faut suivre la méTDode suivante (paramétrage par le logiciel WAGO ETDernet Settings).
4. Rappel : Adressage des variables de l'automate (CEI 61131-3) :
4.1. Les entrées digitales (TOR) - %IX :
Les entrées digitales sont de types TOR (Tout Ou Rien) : BOOL, elles peuvent avoir pour états :TRUE (Vrai, 1 ou active) ou FALSE (Fausse, 0 ou inactive).
Exemple d'adresse d'entrée digitale : %IX0.1
• % : Variable.
• I : Input (entrée).
• X : digital ou BOOL (TOR).
• 0 : 1er Mot de la variable.
• 1 : 2ème bit de la variable.
L'entrée %IX0.1 signifie donc entrée digitale ayant pour adresse le 2ème bit du 1er mot.
4.2. Les entrées analogiques - %IW :
Les entrées analogiques sont variables, elles peuvent prendre plusieurs valeurs :sur 16 bits cette valeur peut varier de 0 à 65535.
Exemple d'adresse d'entrée analogique 16 bits : %IW0
• % : Variable.
• I : Input (entrée).
• W : analogique ou WORD (Mot).
• 1 : 2ème Mot de la variable.
L'entrée %IW1 signifie donc entrée analogique ayant pour adresse le 2ème mot (espace mémoire 16 bits).
4.3. Les sorties digitales (TOR) - %QX :
Les sorties digitales sont de types TOR (Tout Ou Rien) : BOOL, elles peuvent avoir pour états :TRUE (Vrai, 1 ou active) ou FALSE (Fausse, 0 ou inactive).
Exemple d'adresse de sortie digitale : %QX1.2
• % : Variable.
• Q : Output (sortie).
• X : digital ou BOOL (TOR).
• 1 : 2ème Mot de la variable.
• 2 : 3ème bit de la variable.
L'entrée %QX1.2 signifie donc entrée digitale ayant pour adresse le 3ème bit du 2ème mot.
4.4. Les sorties analogiques - %QW :
Les sorties analogiques sont variables, elles peuvent prendre plusieurs valeurs :sur 16 bits cette valeur peut varier de 0 à 65535.
Exemple d'adresse d'entrée analogique 16 bits : %QW0
• % : Variable.
• Q : Input (entrée).
• W : analogique ou WORD (Mot).
• 0 : 1er Mot de la variable.
L'entrée %QW0 signifie donc sortie analogique ayant pour adresse le 1er mot (espace mémoire 16 bits).
4.5. Les mémoires booléennes (TOR) - %MX :
Les mémoires booléennes (bit) sont de types TOR (Tout Ou Rien) : BOOL, elles peuvent avoir pour états :TRUE (Vrai, 1 ou active) ou FALSE (Fausse, 0 ou inactive).
Exemple d'adresse de sortie digitale : %MX2.0
• % : Variable.
• M : Mémoire (interne).
• X : booléenne ou BOOL (TOR).
• 2 : 3ème Mot de la variable.
• 0 : 1er bit de la variable.
La mémoire booléenne (bit) %MX2.0 se trouve donc au 1er bit du 3ème mot.
4.6. Les mémoires mots - %MW :
Les mémoires mots sont variables, elles peuvent prendre plusieurs valeurs :sur 16 bits cette valeur peut varier de 0 à 65535.
Exemple d'adresse d'entrée analogique 16 bits : %IW0
• % : Variable.
• M : Input (entrée).
• W : analogique ou WORD (Mot).
• 4 : 1er Mot de la variable.
La mémoire mot %MW4 se trouve donc au 5ème mot.
4.7. Les entiers :
Les entiers occupent de 8 à 32 bits de mémoire. Le tableau ci-dessous regroupe une partie des types d’entiers :Type | Valeur minimale | Valeur maximale | Espace mémoire |
BYTE | 0 | 255 | 8 bits |
WORD | 0 | 65535 | 16 bits |
DWORD | 0 | 4294967295 | 32 bits |
5. Rappel : Affectation des variables :
Les valeurs entières peuvent être saisies en décimal, en hexadécimal ou en binaire.Pour saisir une valeur en hexadécimal, il faut d’ajouter 16# devant la valeur.
Exemple :
• 16#0010 (HEX) correspond à une valeur décimale de 16.
• 16#005B (HEX) correspond à une valeur décimale de 91.
Pour une valeur en binaire, ajouter 2# devant la valeur.
Exemple :
• 2#00010001 (BIN) correspond à une valeur décimale de 17.
• 2#0010_0000 (BIN) correspond à une valeur décimale de 32.
6. Le bloc fonctionnel ETDERNET_MODBUSMASTER_UDP :
Le bloc fonctionnel ETDERNET_MODBUSMASTER_UDP appartient à la biblioTDèque ModbusETDernet_04.lib. Elle doit être importée dans Codesys.L'emplacement de la biblioTDèque ModbusETDernet_04.lib est :
WAGO Software\CoDeSys V2.3\Targets\WAGO\Libraries\Application
Ce bloc permet de faire communiquer par le protocole UDP deux automates Wago.
Il nécessite un automate maître et un autre qui sera l'esclave.
Il se présente de la manière suivante :
7. Intégration de l'adresse IP de l'automate esclave dans le bloc fonction :
Le paramètre qui précise l'adresse IP de l'automa esclave est strIP_ADDRESSDans notre exemple pour préciser l'adresse IP de l'automate esclave il faut que strIP_ADDRESS = '192.168.1.3'
8. Correspondance entre les adresses internes et les adresses Modbus :
Les tableaux ci-après expliquent les correspondances entre les adresses internes de l'automate et les adresses Modbus.Pour pouvoir communiquer d'un automate à l'autre il faut savoir ou lire wREAD_ADDRESS et ou écrire wWRITE_ADDRESS.
L'automate maître doit pouvoir recevoir ou envoyer aux bonnes adresses sur l'automate esclave des informations.
Du point de vue automate maître il faut associer l'adresse physique ou interne de l'automate esclave en une adresse de lecture ou une adresse d'écriture.
8.1. Accès aux bits de l'esclave :
On peut accéder aux bits de l'esclave soit en lecture soit en écriture (sauf les entrées et sorties physiques sur lesquelles on peut seulement lire). Pour cela il faut préciser au paramètre d'entrée du bloc : bFUNCTION_CODE ce que l'on souhaite faire (01 ou 02 pour la lecture de bits - 05 ou 15 pour l'écriture de bits).L'adresse à lire sur l'esclave correspond au paramètre du bloc : wREAD_ADDRESS.
L'adresse à écrire sur l'esclave correspond au paramètre du bloc : wWRITE_ADDRESS.
8.1.1. Les entrées physiques de l'esclave (%IX0.0) :
Pour lire une entrée physique (bits) de l'esclave il faut que l'entrée bFUNCTION_CODE du bloc ait pour valeur soit :• 01 - Lecture de plusieurs bits
• 02 - Lecture de plusieurs bits internes
Il n'est pas possible d'écrire sur une entrée physique (bits) de l'esclave.
Adresse de l'entrée physique | Accès | Adresse au bit en HEX | Adresse au bit en DEC |
%IX0.0 | Lecture | 0000 soit 16#0000 | 0 |
%IX0.1 | Lecture | 0001 soit 16#0001 | 1 |
%IX0.2 | Lecture | 0002 soit 16#0002 | 2 |
... | ... | ... | ... |
8.1.2. Les sorties physiques de l'esclave (%QX0.0) :
Pour lire une sortie physique (bits) de l'esclave il faut que l'entrée bFUNCTION_CODE du bloc ait pour valeur soit :• 01 - Lecture de plusieurs bits
• 02 - Lecture de plusieurs bits internes
Pour écrire sur une sortie physique (bits) de l'esclave il faut que l'entrée bFUNCTION_CODE du bloc ait pour valeur soit :
• 05 - Ecriture d'un seul bit (ex : %QX0.0)
• 15 - Ecriture de plusieurs bits (ex : %QX0.0 à %QX0.3 soit 4 bits)
Adresse de l'entrée physique | Accès | Adresse au bit en HEX | Adresse au bit en DEC |
%QX0.0 | Lecture | 0200 soit 16#0200 | 512 |
%QX0.1 | Lecture | 0201 soit 16#0201 | 513 |
%QX0.2 | Lecture | 0202 soit 16#0202 | 514 |
... | ... | ... | ... |
8.1.3. Les mémoires internes de l'esclave (%MX0.0) :
Pour lire une mémoire interne (bits) de l'esclave il faut que l'entrée bFUNCTION_CODE du bloc ait pour valeur soit :• 01 - Lecture de plusieurs bits
• 02 - Lecture de plusieurs bits internes
Pour écrire sur une mémoire interne (bits) de l'esclave il faut que l'entrée bFUNCTION_CODE du bloc ait pour valeur soit :
• 05 - Ecriture d'un seul bit (ex : %MX0.0)
• 15 - Ecriture de plusieurs bits (ex : %MX0.0 à %MX0.3 soit 4 bits)
Adresse de l'entrée physique | Accès | Adresse au bit en HEX | Adresse au bit en DEC |
%MX0.0 | Lecture / écriture | 3000 soit 16#3000 | 12288 |
%MX0.1 | Lecture / écriture | 3001 soit 16#3001 | 12289 |
%MX0.2 | Lecture / écriture | 3002 soit 16#3002 | 12290 |
... | ... | ... | ... |
%MX2.0 | Lecture / écriture | 3020 soit 16#3020 | 12320 |
%MX2.1 | Lecture / écriture | 3021 soit 16#3021 | 12321 |
... | ... | ... | ... |
8.2. Accès aux mots de l'esclave :
On peut accéder aux mémoires de l'esclave soit en lecture soit en écriture (sauf les entrées et sorties physiques sur lesquelles on peut seulement lire). Pour cela il faut préciser au paramètre d'entrée du bloc : bFUNCTION_CODE ce que l'on souhaite faire (03 ou 04 pour la lecture de mémoires - 06 ou 16 pour l'écriture de mémoires).L'adresse à lire sur l'esclave correspond au paramètre du bloc : wREAD_ADDRESS.
L'adresse à écrire sur l'esclave correspond au paramètre du bloc : wWRITE_ADDRESS.
8.2.1. Les entrées physiques de l'esclave (%IW0) :
Pour lire une entrée physique (mots) de l'esclave il faut que l'entrée bFUNCTION_CODE du bloc ait pour valeur soit :• 03 - Lecture de plusieurs mots
• 04 - Lecture de plusieurs mots internes
Il n'est pas possible d'écrire sur une entrée physique (mots) de l'esclave.
Adresse de l'entrée physique | Accès | Adresse au mot en HEX | Adresse au mot en DEC |
%IW0 | Lecture | 0000 soit 16#0000 | 0 |
%IW1 | Lecture | 0001 soit 16#0001 | 1 |
%IW2 | Lecture | 0002 soit 16#0002 | 2 |
... | ... | ... | ... |
8.2.2. Les sorties physiques de l'esclave (%QW0) :
Pour lire une sortie physique (mots) de l'esclave il faut que l'entrée bFUNCTION_CODE du bloc ait pour valeur soit :• 03 - Lecture de plusieurs mots
• 04 - Lecture de plusieurs mots internes
Pour écrire sur une sortie physique (mots) de l'esclave il faut que l'entrée bFUNCTION_CODE du bloc ait pour valeur soit :
• 06 - Ecriture d'un seul mot (ex : %QW0)
• 16 - Ecriture de plusieurs mots (ex : %QW0 à %QW1 soit 2 mots de 16 bits)
Adresse de la sortie physique | Accès | Adresse au mot en HEX | Adresse au mot en DEC |
%QW0 | Lecture | 0200 soit 16#0200 | 512 |
%QW1 | Lecture | 0201 soit 16#0201 | 513 |
%QW2 | Lecture | 0202 soit 16#0202 | 514 |
... | ... | ... | ... |
8.2.3. Les mémoires internes de l'esclave (%MW0) :
Pour lire une mémoire interne (mot) de l'esclave il faut que l'entrée bFUNCTION_CODE du bloc ait pour valeur soit :• 03 - Lecture de plusieurs mots
• 04 - Lecture de plusieurs mots internes
Pour écrire sur une mémoire interne (mot) de l'esclave il faut que l'entrée bFUNCTION_CODE du bloc ait pour valeur soit :
• 06 - Ecriture d'un seul mot (ex : %MX0.0)
• 16 - Ecriture de plusieurs mots (ex : %MW2 à %MW3 soit 2 mots de 16 bits)
Adresse de la mémoire interne | Accès | Adresse au mot en HEX | Adresse au mot en DEC |
%MW0 | Lecture / écriture | 3000 soit 16#3000 | 12288 |
%MW1 | Lecture / écriture | 3001 soit 16#3001 | 12289 |
%MW2 | Lecture / écriture | 3002 soit 16#3002 | 12290 |
... | ... | ... | ... |
9. Quantité de données à lire ou écrire :
Les paramètres qui indiquent la quantité de données à lire ou à écrire sont :• Quantité de données à lire : wREAD_QUANTITY
• Quantité de données à écrire : wWRITE_QUANTITY
La valeur à entrer est un mot (WORD) en héxadécimal ou décimal.
Valeur héxadécimale :
Bit | Mot | |||
Valeur héxadécimale | Quantité de données | Valeur héxadécimale | Quantité de données | |
16#0001 | 1 bit | 16#0001 | 16 bits | |
16#0002 | 2 bits | 16#0002 | 2x16 bits | |
16#0003 | 3 bits | 16#0003 | 3x16 bits | |
... | ... | ... | ... |
Exemple n°1 :
bFUNCTION_CODE = 01 - Lecture de plusieurs bits
wREAD_ADDRESS = 16#0000 - On veut lire sur l'automate esclave à partir de l'adresse %IX0.0
wREAD_QUANTITY = 16#0003 - On veut lire 3 bits à partir de %IX0.0 soit %IX0.0, %IX0.1 et %IX0.2
Exemple n°2 :
bFUNCTION_CODE = 03 - Lecture de plusieurs mots
wREAD_ADDRESS = 16#0202 - On veut lire sur l'automate esclave à partir de l'adresse %QX0.2
wREAD_QUANTITY = 16#0001 - On veut lire 1 seul bit à partir de %QX0.2 soit %QX0.2
Exemple n°3 :
bFUNCTION_CODE = 15 - Ecriture de plusieurs bits
wREAD_ADDRESS = 16#3002 - On veut écrire sur l'automate esclave à partir de l'adresse %MX0.2
wREAD_QUANTITY = 16#0004 - On veut écire 4 bits à partir de %MX0.2 soit %MX0.3, %MX0.4 et %MX0.5
Exemple n°4 :
bFUNCTION_CODE = 06 - Ecriture d'un seul mot
wREAD_ADDRESS = 16#3000 - On veut écrire le seul mot %MW0
wREAD_QUANTITY = 16#0001 - On veut écrire sur les 16 bits de %MW0
10. Exemple de communication entre 2 automates :
Le cahier des charges est le suivant :Automate maître (192.168.1.2)
Il doit pouvoir lire et écrire sur un automate esclave (192.168.1.3).Sur la carte d'entrées digitales (TOR) sont relieés deux boutons poussoirs S1 et S2 (%IX0.0 et %IX0.1).
Sur la carte de sorties digitales (TOR) sont relieés deux voiyants H1 et H2 (%QX0.2 et %QX0.3).
Deux variables mémoires %MX0.2 et %MX0.3 sont utilisés dans le programme.
Automate esclave (192.168.1.3)
Sur la carte d'entrées digitales (TOR) sont relieés deux boutons poussoirs S3 et S4 (%IX0.2 et %IX0.3).Sur la carte de sorties digitales (TOR) sont relieés deux voiyants H3 et H4 (%QX0.2 et %QX0.3).
A partir de l'automate maître on souhaite pouvoir :
Lire les entrées physiques %IX0.2 et %IX0.3 de l'esclave.
Ecrire sur les mémoires %MX0.2 et %MX0.3 de l'esclave.
10.1. Etude du programme :
Un tableau "Memoire_Lecture" permet de stocker 2 bits à lire sur l'automate esclave (%IX0.2 et %IX0.3).• Memoire_Lecture[1].0 (16#0002) correspond à %IX0.2.
• Memoire_Lecture[1].1 (16#0003) correspond à %IX0.3.
Un tableau "Memoire_Ecriture" permet de stocker 2 bits à écrire sur l'automate esclave (%MX0.2 et %MX0.3).
• Memoire_Ecriture[1].0 (16#3002) correspond à %MX0.2.
• Memoire_Ecriture[1].1 (16#3003) correspond à %MX0.3.
Ci-dessous l'extrait du programme (interactif) en langage ladder permettant la communication des automates WAGO :
10.2. Etude du fonctionnement :
Sur l'animation ci-dessous est interactive appuyer sur les boutons poussoirs pour constater ce qu'il se passe au niveau des programmes et des automates.Les 2 programmes (automates maître et esclave) sont présents respectivement à gauche et à droite.