le 01-28-2022 11:44 AM
Bonjour à tous je me permets de créer ce sujet, je ne suis pas habitué à ce forum,
Automaticien depuis de nombreuses années,
Dernièrement lors d'un changement d'emploi (novembre 2021) j'ai découvert LabVIEW.
J'utilise très souvent les automates de la marque Siemens. J'ai donc voulu commencer avec LabVIEW avec une petite communication entre labview et un automate S7-1200. Mais ce que je pensais simple s'est très vite transformé en parcours du combattant ... Après de nombreuses recherches dont la plupart propose des librairies de communication TCP difficilement utilisable ou alors l'utilisation d'un serveur OPC, j'ai trouvé une solution beaucoup plus simple et efficace.
Siemens fourni un sous-programme très simple permettant de créer un serveur ou un client modbus TCP. Celui-ci est intégré à STEP 7 et tia-portal.
Je trouvais donc intéressant de poster un petit sujet sur la mise en place et l'utilisation de cette communication afin que peut-être ce sujet puisse aider quelqu'un d'autre.
Concernant la mise en place de ce client ou serveur sur les automates je ne m'attarderai pas dans les car de nombreux exemples très bien documenté existe sur le site Siemens, je vais néanmoins détailler quelques points importants concernant l'utilisation du protocole modbus avec un automate Siemens.
partie memoire siemens
L'adressage memoire Siemens est composé de
4 zones : input (entrées) / memento (memoire interne) / output (sorties) / datablock (DB ou bloc de données)
(y= numero de DB)
I0.0 / M0.0 / Q0.0 / DBy.dbx0.0 = bit 0 du byte 0
IB0 / MB0 / QB0 / DBy.dbb0 = byte(octet) 0
IW0 / MW0 / QW0 / DBy.dbw0 = mot (16bits) = entiers signés ou pas
ID0 / MD0 /QD0 / DBy.dbd0 = double mot (32bits) = real(nombre a virgule)
Ce qui peut etre sournoit c'est que contrairement à d'autres fabricants d'automate, les bits, mot s et double mots sont au même endroit. Je m'explique, chez siemens il ne faut pas raisonner variable mais memoire. donc par exemple, MW0 utilise 2 bytes, donc MB0 et MB1, donc MD0 utilise MB0,1,2 et 3. donc si on utilise M0.X par exemple, il ne faut pas utiliser MB0, ni MW0 ni MD0. mais cela est par fois moins visible par exemple, si on utilise MD50, il ne faut pas utiliser : MW50 ni MW52, MB50,51,52,53.
Ceci est valable dans tout l'environnement S7, pas seulement pour le modbus ou pour labview. Attention donc ! néanmoins cela peut également présenter des avantages significatif quand on en tire profit, si on veut récupérer les 16 entrées du byte 2 et 3 par exemple, une seule variable suffit IW16, or de nombreux logiciels utilisant des communications posséde des licences par nombre de variables échangées.
Ce choix est complétement différent de schneider par exemple.
voici pour la partie Siemens.
partie modbus TCP
Concernant le Modbus TCP, je ne détaille pas tout car de nombreuses documentations existes.
Principe :
communication encapsulée dans un paquet TCP, basée sur un echange unique requéte / réponse.
La requéte et la reponse sont composés d'une suite de nombres hexadecimales, il suffit donc de creer le message en connaissant sa structure, et de le transmettre dans une trame TCP. puis d'extraire la reponse reçu.
La requéte vise à accéder a un zone memoire du maitre :
discrets inputs (entrées logiques) lecture seulement
inputs register (entrées analogiques) lecture seulement
holding register (registre de maintien) lecture / écriture
coils (sorties logiques) lecture / écriture
Après avoir lu ces quelques explications, puis avoir crée le maitre modbus dans l'automate, nous pouvons lire les entrées TOR grâce aux (discrets inputs/lecture de bits), les sorties TOR(coils), c'est le parametrage du maitre dans l'automate qui définira quelle zone memoire est accessible lors de requétes concernant les registres de maintien(hold registers), on peut grâce a un pointeur utiliser un DB ou les Memento(M). Pour terminer, une dernière mise en garde, lors de l'utilisation du protocole modbus avec un automate siemens, l'adresse de la variable lorsque c'est un mot peut ne pas paraitre logique, pourquoi ? parce que dans l'envirronement de dévellopement siemens, lorsque l'on crée plusieurs variables de type mot ou double mot, le numéro de variable defini le premier byte utilisé. je m'explique si je crée 3 variables dans la zone memento, je vais crée MW0, MW2 et MW4, ainsi on connait la position de la variable, si on créait MW0, MW1, et MW2, dans ce cas les variables s'écraserait mutuellement, comme expliqué précédemment. Seulement lors de requête Modbus, quand le maitre reçois une demande de lecture du registres d'entrées(IW), si on demande la variable 0, il renvoi IW0, si on demande la variable 1, il renvoi IW2, IW1 n'existant pas. il faut donc le savoir, si vous voulez IW50 par exemple il faut demander la variable input register numéro 25. Et ceci peut importe la zone mémoire (input register ou holding register).
Voila j'espére avoir été claire et le plus concit possible, mais je tenais a expliquer un minimum le zonage mémoire particulier de siemens et le principe du modbus.
utilisant labview en community edition. je fourni un petit vi qui n'utilise que les bibliotheques de base, par consequent je crée moi même les requétes et n'utilise que le module (connection TCP standard), ce n'est pas parfait mais le but n'etais pas là, mais simplement de vérifier la communication possible avec l'univers S7 via le Modbus, qui possède l'avantage d'être normé, courant et simple. toute remarque est la bienvenue.
Au passage, c'est mon premier poste, si un habitué ou un modérateur peut me dire si il faut se présenter ou si j'ai commis des erreurs.
merci a tous pour la lecture, en espérant avoir été utile.
ps : je fournis en PJ le projet labview 2021, il permet de lire et écrire et posséde un vi de conversion de réponse hexa selon le format utilisé dans tia-portal
le 01-30-2022 01:44 AM
Bonjour je me permets d'ajouter une petite précision ce poste n'a pas vocation a se concentrer sur le protocole modbus où utiliser les vi que j'ai fourni en pièce jointe à la place de la librairie modbus .
Néanmoins j'ai fourni ces VI car je trouve que quand on débute dans une communication et qu'on a l'opportunité de communiquer en brut en créant soi-même ses trames d'échange, on comprend mieux les fondamentaux. Si quelqu'un par contre a des problématiques avec de la communication vers de l'automatisme Siemens qu'il n'hésite pas. Bonne journée à tous