Communication Modbus TCP - Modicon M221

Forum traitant des automates industriels de marque Schneider - Telemecanique
Répondre
leal
Apprend le binaire
Apprend le binaire
Messages : 6
Enregistré le : 07 mai 2024, 09:10

Communication Modbus TCP - Modicon M221

Message par leal »

Bonjour,

J'avais déjà posté sur ce sujet il y a quelques temps, j'ai un peu avancé mais je me trouve confronté à un problème qui dépasse ma compréhension.

En résumé, j'ai d'un côté mon Modicon M221 qui est configuré comme client modbus TCP, et de l'autre un PC qui me sert à faire des tests. J'ai configuré un bloc modbus TCP, et de ce côté tout semble fonctionner correctement :

Image

De l'autre côté, j'ai programmé en Python un petit utilitaire me permettant de créer un serveur Modbus TCP, de récupérer les trames et de les afficher dans l'invité de commande, dans un but de test (à terme les trames seront inscrites dans une base de données et exploitées depuis l'ERP de mon entreprise).

Voici le code du programme :
from pyModbusTCP.server import ModbusServer
import threading
import time

# Créer et démarrer le serveur
server = ModbusServer("0.0.0.0", 502, no_block=True)
server.start()

previous_values = []
current_values = []

def log_activity():
____previous_values = server.data_bank.get_holding_registers(620, 657)
____while True:
________current_values = server.data_bank.get_holding_registers(620, 657)
________if current_values != previous_values:
____________print(f"Valeurs mises à jour : {current_values}")
____________previous_values = current_values
________time.sleep(0.1) # Pause très courte pour éviter une surcharge CPU

# Créer un thread pour lire les registres
activity_thread = threading.Thread(target=log_activity)
activity_thread.daemon = True # Arrête le thread quand le programme principal se termine
activity_thread.start()

try:
____while True:
________time.sleep(1) # Le thread de lecture des registres fonctionne en arrière-plan
except KeyboardInterrupt:
____print("Arrêt du serveur Modbus TCP...")
____server.stop()
Mon programme semble fonctionner, le PLC ne me renvoie pas d'erreur, et lorsque je regarde avec Wireshark mes trames sont effectivement bien reçues par mon serveur :

Image

Cependant, le contenu des trames, les mots, ne semblent pas correspondre entre les valeurs enregistrées dans l'automate et celles reçues par mon PC :

Image

Voilà ce que j'ai du côté de mon automate.

Image

Et voilà les valeurs avec lesquelles je me retrouve sur Wireshark.

A chaque fois que j'ai un changement de valeur, mes valeurs s'affichent dans l'invité de commande. Elles correspondent à celles que j'obtiens sur Wireshark, par contre j'ai plein de valeurs "parasites", toutes égales à 0, alors que je suis censé avoir seulement 38 mots :
Valeurs mises à jour : [0, 0, 1000, 0, 39322, 16837, 0, 17530, 0, 17530, 0, 16288, 0, 17116, 0, 49024, 0, 0, 0, 16928, 0, 17530, 0, 17530, 0, 0, 0, 0, 1, 0, 0, 0, 1000, 0, 0, 0, 1100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Voilà ce que j'obtiens dans mon invité de commande, je ne comprends d'ou viennent ces centaines de 0.

Si quelqu'un a déjà mené un projet similaire et/ou est un expert en Python je veux bien de l'aide parce que je sèche, je ne suis pas développeur, c'est dans le cadre d'un projet étudiant, et là on sort clairement de mon domaine de compétences :/

Merci d'avance :)

Léal
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7805
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Communication Modbus TCP - Modicon M221

Message par itasoft »

tu ne dispose pas d'un autre M221 pour le mettre en Serveur ?
Automaticien privé (de tout)
itasoft@free.fr
leal
Apprend le binaire
Apprend le binaire
Messages : 6
Enregistré le : 07 mai 2024, 09:10

Re: Communication Modbus TCP - Modicon M221

Message par leal »

Je vais tester ça, voir si les données acquises par le 2eme m221 sont bonnes, merci de l'idée :)
MiGaNuTs
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1573
Enregistré le : 12 nov. 2015, 21:02
Localisation : 45 - Loiret
Contact :

Re: Communication Modbus TCP - Modicon M221

Message par MiGaNuTs »

Sinon y'a Ananas (32 ou 64) et modbus doctor qui sont bien pour faire des tests aussi.

https://forum-automatisme.net/viewtopic.php?t=839
leal
Apprend le binaire
Apprend le binaire
Messages : 6
Enregistré le : 07 mai 2024, 09:10

Re: Communication Modbus TCP - Modicon M221

Message par leal »

MiGaNuTs a écrit : 12 août 2024, 13:36 Sinon y'a Ananas (32 ou 64) et modbus doctor qui sont bien pour faire des tests aussi.

https://forum-automatisme.net/viewtopic.php?t=839
Lorsque je vais intégrer mes données obtenues en Modbus à l'ERP de l'entreprise (Odoo) ce sera programmé en Python (Odoo fonctionne principalement avec du Python + leur framework et en XML, avec un peu de Javascript en plus) donc mes tests visent à créer un module Python fonctionnel pour intégrer les données obtenus à la BDD de l'entreprise et les rendre ensuite exploitables sous formes de graphiques sur Odoo.

C'est pour ça que j'utilise du Python plutôt que d'utiliser une application tierce (j'avais déjà essayé avec Simply Modbus TCP par exemple pour mes 1ers tests)
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7805
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Communication Modbus TCP - Modicon M221

Message par itasoft »

Pour info, pour tester on peut aussi faire la requête sur soi même,
Mettre en @IP du destinataire @IP de l’automate
Automaticien privé (de tout)
itasoft@free.fr
Répondre