Exemple 2 : fonction SEND_REQ avec la requête Lecture de mots
(Traduction du document original anglais)
Présentation
L’exemple traite de la lecture de 4 mots d’entrée à l’adresse 10 d’un équipement tiers. Ces mots sont ensuite recopiés dans %MW52:5.
Question
La fonction de communication est la suivante :
SEND_REQ(ADDR('0.0.1.x'),16#9F,%MW10:10,%MW100:4,%MW50:30)
Avant d’émettre la fonction, il est nécessaire d’initialiser les mots suivant :
Mots
Valeur des mots
Description
%MW10
:= 16#0004
correspond à la fonction lecture de n mots d’entrée (octet 0 = 16#04, octet 1 =16#00)
%MW11
:= 16#0296
correspond à l’identification de la fonction Modbus
%MW12
:= 0
réservé
%MW13
:= 16#0A00
adresse du premier mot à lire (1)
%MW14
:= 16#0400
nombre de mots à lire (1)
%MW103
:= 10 (octets)
longueur des données à transmettre en octets
Légende :
(1)
il faut inverser les octets de poids fort et de poids faible
Réponse
La réponse de l’esclave, contenue dans la mémoire tampon de réception %MW50:30, est de type :
Valeur de %MW50
Valeur de %MW51
Description
:= 0 si action réalisée
:= 16#0004
correspond à la fonction de lecture de n mots d’entrée (octet 0 = 16#04, octet 1 = 16#00)
%MW52 à %MW79 contiennent les données de la réponse Modbus:
  • %MW52:= PF0 0A
    • octet 0 = 16#0A: longueur reçue en octets (10 octets)
    • octet 1 = PF0: octet de poids fort du premier mot
  • %MW53:= PF1 pf0
    • octet 0 =pf0: octet de poids faible du premier mot
    • octet 1 = PF1: octet de poids fort du second mot
  • %MW54:= PF2 pf1
    • octet 0 =pf1: octet de poids faible du second mot
    • octet 1 = PF2: octet de poids fort du troisième mot
:= 1 si action non réalisée
:= 16#0007
paramètres de la requête incorrects
:= 16#0004
paramètres de la question incorrects
:= 16#0688
octet 0 =16#80 + code fonction (16#08 pour Echo)
octet 1 = 16#06 code d’erreur Modbus (l’esclave est occupé)
:= 16#0188
octet 0 =16#80 + code fonction (16#08 pour Echo)
octet 1 = 16#01 code d’erreur Modbus (la fonction est inconnue)
:= 16#0388
octet 0 =16#80 + code fonction (16#08 pour Echo)
octet 1 = 16#03 code d’erreur Modbus (les données sont invalides)
NOTE : Pour récupérer les mots lus, on utilisera l’instruction ROR1_ARB.