Questions fréquentes (FAQ)

Poser une question

Comment émettre une requête de lecture de N bits à partir d'un Twido vers un esclave Modbus ?

L'émission d'une requête est réalisée avec l'instruction EXCHx de TwidoSuite (ou TwidoSoft) :

     EXCHx %MWi:L

où x=numéro du port de communication du Twido (1 ou 2)
%MWi : 1er mot de la table d'échange
L : nombre de mots dans la table d'échange (commande + émission + réception) soit 7+ nombre de mots nécessaire pour recevoir les bits lus (1 mot pouvant contenir de 1 à 16 bits).

Le tableau ci-dessous donne, en fonction du nombre de bits à lire dans l'esclave, la longueur de la table d'échange et le nombre de mots nécessaire dans la table de réception pour  recevoir les bits lus.
 Nombre de bits à lire
dans l'esclave
Nombre de mots dans la table de
réception recevant les bits lus
Longeur de la table
d'échange L
1 à 16 1 8
17 à 32 2 9
33 à 48 3 10
49 à 64 4 11
... -- ...


Pour une requête de lecture de N bits (code requête 01 ou 02), la table d'échange est la suivante :

En noir : Valeurs fixes pour une requête de lecture de N bits (code requete 01 ou 02)
En vert : à ajuster ( @ esclave, @ du 1er bit à lire, Nb de bits à lire)
En bleu : valeurs disponibles après réponse de l'esclave (*) : Le poid faible de l'index 0 contient le nombre d'octets placés dans la table de réception.

Attention : les bits réceptionnés sont placés dans le mot de réception de la façon suivante (exemple pour 16 bits lus, la disposition restant identique pour les bits et mots suivants) :

 Bits du mot de réception 
 (index 7 de la table)
X16 X15 X14 X13 X12 X11 X10  X9  X8  X7  X6  X5  X4  X3  X2  X1
 Bits lus (1er, 2ème, ...) 8 7 6 5 4 3 2 1 16 15 14 13 12 11 10 9


Vérification des erreurs de communication :
  • Il est conseillé d'utiliser dans le programme le bloc fonction %MSGx, le bit %MSGx.E à 1 signalant une erreur.
  • Les mots systèmes %SW63 (code d’erreur du bloc EXCH1) et %SW64 (code d’erreur du bloc EXCH2) permettent de diagnostiquer des erreurs de communication (timeout par exemple) et des erreurs de gestion de la table.
  • Le code de réponse fourni par l'esclave lors d'une transaction correcte est l'écho du code requête soit  01 pour le code requête 01, soit 02 pour le code requête 02.
    Si l'esclave retourne un code d'exception, le code de réponse est alors 16#81 pour le code requête 01 ou 16#82 pour le code requête 02 (le bit de poid fort de l'octet code de réponse est positionné à 1).
    Le code d'exception figure alors dans l'octet de poid faible de l'index 6 de la table (à la place du nombre d'octets lus).
    Un code d'exception n'est pas signalé par le bloc fonction %MSGx.

Remarques :
  • Le port de communication du Twido doit être configuré en Modbus et avec un timeout.
  • Au port 1 est associé l'instruction EXCH1, le bloc fonction %MSG1 et le mot système %SW63.
  • Au port 2 est associé l'instruction EXCH2, le bloc fonction %MSG2 et le mot système %SW64.

Exemple :

Voici un exemple d'une requête de lecture de 30 bits dans un esclave d'adresse @1. Le code requête utilisé ici est le 01.
Pour recevoir 30 bits il est nécessaire de prévoir 2 mots de réceptions. La table d'échange d'une longueur de 9 mots ( 7 + 2 ) est la suivante :

  Mot Valeur
Table de contrôle %MW30 16#0106
  %MW31 16#0300
Table d' émission %MW32 16#0101
  %MW33 0
  %MW34 30
Table de réception %MW35  
  %MW36  
  %MW37  
  %MW38  

L'envoi de la requête via le port 2 s'écrit : EXCH2 %MW30:9

Après un échange correct, la table de réception sera :
Table de réception %MW35 16#0101
  %MW36 16#0004 (4 octets de lus)
  %MW37  état bits 0 à 15 esclave @1
  %MW38  état bits 16 à 29 esclave @1

L'esclave sera par exemple un automate M340 dans lequel le Twido vient lire les bits %M0 à %M29.

Cela vous a-t-il aidé ?
Que pouvons-nous faire pour améliorer l'information ?