Exemple 3 : Fonction SEND_REQ avec requête de lecture de bits
(Traduction du document original anglais)
Présentation
Cet exemple présente la lecture de deux bits de sortie à partir de l'adresse 0 par un équipement tiers dont l'adresse esclave est 5.
Question
La fonction de communication se présente sous la forme suivante :
SEND_REQ(ADDR('0.3.0.5'),16#9F,%MW300:50,%MW450:4,%MW400:50)
Avant d'envoyer la fonction, il est nécessaire d'initialiser les mots suivants :
Mots
Valeur des mots
Description
%MW300
:= 16#0001
Correspond à la fonction de lecture de n bits de sortie (octet 0 = 16#01, octet 1= 16#00)
%MW301
:= 16#0296
Correspond à l'identification de la fonction Modbus
%MW302
:= 0
Réservé
%MW303
:= 16#0000
Adresse du premier bit à lire (1)
%MW304
:= 16#0200
Nombre de bits à lire (1)
%MW453
:=10 (octets)
Longueur des données à transmettre en octets
Légende :
(1)
Les octets de poids fort et les octets de poids faible doivent être inversés.
Réponse
La réponse esclave, comprise dans le tampon de réception %MW400:50, se présente comme suit :
Mot
Valeur
Description
%MW400
:= 0 si une action est effectuée
:= 1 si aucune action n'est effectuée
%MW401
si %MW400:= 0
:= 16#0001
Correspond à la fonction de lecture de n bits de sortie (octet 0 = 16#01, octet 1= 16#00)
%MW401
si %MW400:= 1
:= 16#0007
Paramètres de requête incorrects
:= 16#0004
Paramètres de question incorrects
:= 16#0681
Octet 0 =16#80 + code fonction (16#01)
Octet 1 =
  • 16#06 code d'erreur Modbus (l'esclave est occupé)
  • 16#01 code d'erreur Modbus (la fonction est inconnue)
  • 16#03 code d'erreur Modbus (les données sont incorrectes)
%MW402
:= 16#xx01
Contient les données de réponse Modbus :
Octet 0 = 16#01 : longueur reçue en octets (1 octet)
Octet 1 = 16#xx : valeur des bits
Par exemple, si le bit 1 = 1 et le bit 2 = 1, alors l'octet 1 = 16#03