Exemple de message explicite Modbus TCP : lecture des registres
(Traduction du document original anglais)
Présentation
L'exemple ci-après indique comment utiliser le bloc fonction SEND_REQ pour envoyer un message explicite générique qui va lire cinq registres à partir d'un équipement distant, à l'adresse 192.168.1.6, en commençant à l'adresse de registre 10 sur l'équipement distant.
Mise en œuvre du bloc SEND_REQ
Pour mettre en œuvre le bloc fonction SEND_REQ, vous devez créer des variables et les attribuer aux blocs suivants :
Configuration de la variable Address
La variable Address identifie l'équipement d'origine du message explicite (dans cet exemple, le module de communication TSX ETC 101) et l'équipement cible. Notez que cette variable n'inclut pas les éléments d'adresse Xway {Réseau.Station}, car nous n'établissons pas de pont à travers une autre station automate. Utilisez la fonction ADDR pour convertir la chaîne de caractères ci-dessous en adresse :
ADDR('0.3.0'), où :
Configuration de la variable ReqCode
La variable ReqCode identifie le type de fonction du bloc fonction SEND_REQ, dans ce cas, une requête générique Modbus :
Variable
Description
Valeur (hex.)
ReqCode
Ce code identifie une requête générique Modbus
16#0050
Configuration de la variable ManagParam
Le paramètre ManagParam[3] définit la longueur de la variable DataToSend pour le bloc fonction SEND_REQ. Dans cet exemple, 9 octets de données seront envoyés :
Variable
Description
Valeur (hex.)
ManagParam[3]
Longueur de la variable DataToSend
16#0009
Configuration de la variable DataToSend
La variable DataToSend identifie la requête générique Modbus :
Variable
Description
Valeur (hex.)
DataToSend[0]
Deux premiers octets de l'adresse IP (192.168.1.6) de l'équipement cible :
  • Octet de poids fort = octet 4 : 16#C0 (192, décimal)
  • Octet de poids faible = octet 3 : 16#A8 (168, décimal)
16#C0A8
DataToSend[1]
Deux derniers octets de l'adresse IP (192.168.1.6) de l'équipement cible :
  • Octet de poids fort = octet 2 : 16#01 (1, décimal)
  • Octet de poids faible = octet 1 : 16#06 (6, décimal)
16#0106
DataToSend[2]
  • Octet de poids fort = code fonction Modbus : 16#03 (3, décimal)
  • Octet de poids faible = octet de poids faible de l'adresse de début de lecture : 16#20 (0, décimal)
16#0300
DataToSend[3]
  • Octet de poids fort = octet de poids fort de l'adresse de début de lecture : 16#20 (10, décimal)
  • Octet de poids faible = nombre de registres à lire (MSB) : 16#20 (0, décimal)
16#0A00
DataToSend[4]
  • Octet de poids fort = inutilisé (remplissage)1 : 16#20 (0, décimal)
  • Octet de poids faible = nombre de registres à lire (LSB) : 16#20 (5, décimal)
16#0005
1. Lorsque la requête générique Modbus contient un nombre d'octets impair, le dernier octet de la requête est remplacé.