Questions fréquentes (FAQ)

Poser une question

Comment émettre une requête d'écriture 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 9 + nombre de mots nécessaire pour recevoir les bits à écrire (1 mot  pouvant contenir de 1 à 16 bits).

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

En noir : valeurs fixes pour une requête d'écriture de N bits (code requete 15).
En vert : à ajuster ( @ esclave, @ 1er bit à écrire, Nb de bits à écrire, ...).
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.

N1 : Nombre de bits à écrire dans l'esclave.
N2 : Nombre d'octets nécessaire pour contenir l'état de chaque bit à envoyer vers l'esclave, 1 octet contenant de 1 à 8 bits.

Le tableau ci-dessous donne, en fonction du nombre N1 de bits à écrire dans l'esclave

  • le nombre d'octet N2,
  • la longueur de la table d'échange L,
  • l'index du 1er mot de la table de réception Ind_TR.
 Nombre de bits à écrire
dans l'esclave
N1
Nombre de mots dans la table d'émission contenant l'état des bits à écrire
 N2
Longeur de la table d'échange
L
 Index du 1er mot de la  table de réception
Ind_TR
1 à 8 1 1 10 7
9 à 16 1 2 10 7
17 à 24 2 3 11 8
25 à 32 2 4 11 8
33 à 40 3 5 12 9
41 à 48 3 6 12 9
49 à 56 4 7 13 10
57 à 64 4 8 13 10
etc etc   etc etc

Attention :
les bits à envoyer sont placés dans le mot d'émission de la façon suivante (exemple pour 16 bits écrits, la disposition restant identique pour les bits et mots suivants) :

 Bits du mot d'émission 
 (index 6 de la table)
X16 X15 X14 X13 X12 X11 X10  X9  X8  X7  X6  X5  X4  X3  X2  X1
 Bits écrits (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 16#0F (15 en décimal).
    Si l'esclave retourne un code d'exception le code de réponse est alors 16#8F (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 fort de l'index Ind_TR +1 de la table d'échange.
    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 d'écriture de 30 bits dans l'esclave d'adresse @1.
Pour envoyer 30 bits il est nécessaire de prévoir 4 octets soit 2 mots dans la table d'émission. La table d'échange d'une longueur L de 11 mots ( 9 + 2 ) est la suivante :


  Index  Mot  Valeur Détail Poid fort Détail poid faible
Table de contrôle  0  %MW10  16#010C    8+4=12 (0C hexa) 
   1  %MW11  16#0007    
Table d'émission  2  %MW12  16#010F  @1  code req 15 (0F hexa)
   3  %MW13  0   @ 1er bit dans l'esclave
   4  %MW14  30   N1 : nombre de bits à écrire = 30
   5  %MW15 4    N2=4
   6  %MW16  16#FFFF   %M0 to %M15 à 1
   7  %MW17  16#0020   %M16 to %M28 à 0; %M29 à 1
Table de réception  8  %MW18      
   9  %MW19      
   10  %MW20      

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

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

Table de réception  %MW18 16#010F
   %MW19  0
   %MW20  30

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