Questions fréquentes (FAQ)

Poser une question

Comment émettre une requête d'écriture de N mots à 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 (contrôle + émission + réception) soit 9 + nombre de mots N à écrire dans l'esclave.

Pour une requête d'écriture de N mots (code requête 16), la table d'échange est la suivante :

En noir : valeurs fixes pour une requête d'écriture de N mots (code requete 16)
En vert : à ajuster ( @ esclave, @ 1er mot à écrire, Nb de mots à écrire, ...)
En bleu : valeurs disponibles après réponse de l'esclave. (*) : Le poids faible de l'index 0 contient le nombre d'octets placés dans la table de réception.

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 fournit par l'esclave lors d'une transaction correcte est l'écho du code requête, ici 16 (ou 16#10 en héxa).
    Si l'esclave retourne un code d'exception le code de réponse est alors 16#90 (bit de poids fort de l'octet code de réponse à 1).
    Le code d'exception figure alors dans l'octet de poid fort de l'index N+7 de la table (à la place de l'@ du 1er mot écrit dans l'esclave).
    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 :
Cet exemple propose d'écrire 6 mots à partir du mot 0 dans l'esclave @1 via le port 2 du Twido.
L'esclave est par exemple un autre Twido dans lequel la requête vient écrire les mots %MW0 à %MW5.

La table d'échange d'une longueur de 15 mots ( 9 + 6 ) est la suivante :
Nombre de mots : N = 6 

  Index  Mot  Valeur Détail Poids fort Détail poids faible
Table de contrôle  0  %MW10  16#0114    8+(2*N)=20 (14 hexa) 
   1  %MW11  16#0007    
Table d'émission  2  %MW12  16#0110  @1  code req 16 (10 hexa)
   3  %MW13  0   @ 1er mot dans l'esclave
   4  %MW14  6   N : nombre de mots à écrire
   5  %MW15 12    N * 2 = 12
   6  %MW16  16#0064   valeur à écrire dans %MW0
   7  %MW17  16#0065   valeur à écrire dans %MW1
   8  %MW18  16#0066   valeur à écrire dans %MW2
   9  %MW19  16#0067   valeur à écrire dans %MW3
   10  %MW20  16#0068   valeur à écrire dans %MW4
   11  %MW21  16#0069   valeur à écrire dans %MW5
Table de réception  12  %MW22      
   13  %MW23      
   14  %MW24      

Attention : le nombre de mots N à écrire apparait à 3 endroits dans la table d'échange.

L'envoi de la requête s'écrit : EXCH2 %MW10:15

Après un échange correct, la table de réception sera :

Table de réception  %MW22 16#0110
   %MW23  0
   %MW24  6

Illustration :

Programme sous TwidoSuite V2.20.11 illustrant l'exemple ci-dessus avec une gestion simple de la communication


 
Table d'animation lors d'un échange correct :



Table d'animation du Twido esclave :


 
GEST1 : nombre de requêtes émises par le programme
GEST2 : nombre de requêtes avec erreur (MSG2.E=1)
GEST3 : valeur de %MW64 lors du dernier passage à 1 de MSG2.E
GEST4 : valeur du dernier code d'exception retourné par l'esclave

Ce programme reste un exemple dont le but est uniquement d'illustrer cette Faq.
Il est disponible en pièce jointe.

Voir également :
Guide de programmation TwidoSuite au chapitre Fonctions spéciales > Communications > Communications Modbus.

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