e!COCKPIT : Exemple de gestion Modbus - MA2ID - Modbus e!COCKPIT - Les bibliothèques

Les bibliothèques

Où plutôt, la bibliothèque, car il n'y en a qu'une seule.

Cette bibliothèque est, lors de la rédaction de cet article, à sa version 1.1.3.0 et elle comporte les blocs fonctionnels nécessaires à la gestion d'une communication Modbus, que ce soit en mode série ou en mode Ethernet.

Coté Master

Les deux blocs fonctionnels à utiliser seront  donc :

  • Pour une communication série 
  • Pour une communication Ethernet TCP

En dehors de tous les paramètres qui sont liés à la communication, nous pouvons remarquer que les deux blocs fonctionnels travaillent avec les mêmes informations, à savoir :

  • xTrigger : déclenchement de l'envoi de la requête (cette variable est mise à FALSE par le bloc lui-même lorsque la requête a été exécutée)
  • utQuery : une structure contenant les informations de la requête.
  • utResponse : une structure contenant les informations renvoyées par l'esclave / serveur

En travaillant avec ces deux blocs fonctionnels, nous pourrons donc arriver à réaliser un programme gérant une communication modbus. Cette communication sera rapidement modifiable au niveau de la couche physique puisqu'il suffira de changer de bloc fonctionnel, sans toucher ni à la génération des requêtes ni au traitement des réponses.

 

 Coté Slave 

Les deux blocs fonctionnels à utiliser seront  donc :

  • Pour une communication série
  • Pour une communication Ethernet TCP

Les mêmes constatations que pour les blocs Master peuvent être faites.

En dehors des informations liées à la connexion, les deux blocs fonctionnels travaillent avec 4 tableaux :

Ces quatre tableaux contiennent les informations qui seront utilisées pour les échanges de données et utilisés en fonction des codes fonctions reçus par le Master :

No Description Data Type Access Access by Functioncodes
1 Discrete Input Area ARRAY[..] OF BOOL Read only FC02
2 Discrete Output Area ARRAY[..] OF BOOL Read / Write FC01 FC05 FC15
3 Input Register Area ARRAY[..] OF WORD Read only FC04
4 Holding Register Area ARRAY[..] OF WORD Read / Write FC03 FC06 FC16 FC22 FC23

Les bornes mini et maxi des tableaux donneront les adresses mini et maxi des registres modbus utilisables.

Par exemple, un tableau défini pour les Holding Register Area allant de 150 à 7500 défini comme suit :

VAR
 awHoldingRegisters:ARRAY[150..7500] OF WORD;
END_VAR

permettra un accès en lecture / écriture aux adresses des registres modbus allant de 150 à 7500.