Questions fréquentes (FAQ)

Poser une question

Comment émettre une requête de lecture 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 (commande+émission+réception) soit 7+ nombre de mots à lire dans l'esclave.

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

En noir : Valeurs fixes pour une requête de lecture de N mots (code requete 03)
En vert : à ajuster ( @ esclave, @ du 1er mot à lire, Nb de mot à 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.

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 03.
    Si l'esclave retourne un code d'exception le code de réponse est alors 16#83 (bit de poid fort de l'octet code de réponse à 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 :
Cet exemple propose de lire 2 mots à partir du mot 100 dans l'esclave @1 via le port 2 du Twido.
L'esclave est par exemple un autre Twido dans lequel est lu les mots %MW100 et %MW101.

La table 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#0103
  %MW33 100
  %MW34 2
Table de réception %MW35  
  %MW36  
  %MW37  
  %MW38  

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

Après un échange correct, la table de réception sera :
Table de réception %MW35 16#0103
  %MW36 16#0004 (4 octets de lus)
  %MW37 valeur mot 100 esclave @1
  %MW38 valeur mot 101 esclave @1

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 :



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 Fonction spéciales > Communications > Communications Modbus.

A noter :
Il est également possible d'utiliser les macros COMM pour émettre des requêtes de communication via les ports de communication du Twido

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