Ecriture Holding Register

je viens de vérifier et je n’ai pas non plus « write holding register ». Je n’arrive pas non plus à mettre à jour le plugin sur la dernière version c’est peut être ça

Mettre holding register sur une commande action c’est forcément write.

ah oui c’est vrai c’est ce que j’avais vu en lisant le code.

De mon côté je n’ai pas eu le temps d’approfondir la question.
De que j’ai le temps je refais des essais.
En tout cas, merci beaucoup pour l’aide.

Bonjour @Bebel27 et @Noyax37

Je me remet sur le sujet.
Ayant toujours le même souci alors que cela fonctionne sous Modbus Doctor, je me demande dans le log ci dessous si ce n’est pas la partie « 2>&1 » qui poserait un problème ?

Rappel : valeur que je veux envoyer avec le Plugin (ne fonctionne pas).

Voici ce que j’envoie sous ModbusDoctor (qui fonctionne).

A noter que le probleme est le meme en wrtie multiple ou write single.

Merci par avance pour l’aide :slight_smile:

Bonjour,

Tu as mis le registre 121 dans modbus doctor, on ne voit pas ?

Quoi qu’il en soit il faut te mettre en Holding Register, peux-tu refaire des captures et montrer les logs dans le mode là ?

Bonjour,
Oui 121 dans modbus doctor.

En holding register, voici le log en mode debug :

[2022-07-20 13:56:39][INFO] : Debut de l action /usr/bin/python3 /var/www/html/plugins/mymodbus/ressources/mymodbus_write.py --host=192.168.22.106 --protocol=tcpip --port=502 --baudrate=0 --unid=1 --whr=121 --value=2 2>&1
[2022-07-20 13:56:43][DEBUG] : Evenement : add=>192.168.22.106 unit=>1 eqid=>195 type=>holding_registers sortie=>4 inputs=>[121] values=>[0] 

Si l’équipement a bien recu le « 2 » il doit retourner un « 1 » ce qui n’est pas le cas ici (retourne « 0 ») alors que cela fonctionne avec Modbus Doctor.

Merci

Ok. As-tu regardé si l’équipement recevait l’instruction correctement ? Peut être que c’est juste le retour qui n’est pas donné ?

Ce n’est pas possible car cette commande permet d’activer une fonction non affichée par l’équipement.
Je ne peux donc pas voir s’il a bien reçu la commande.

La seule solution que j’envisage serait de faire un Wiresharck pour sniffer l’Ethernet pour voir si la commande est passée.
Mais vu que cela fonctionne avec ModbusDoctor depuis le même poste, je pensais plus à un problème du plugin.

Ok, à suivre par Bebel donc, pas plus d’idées de mon côté

1 « J'aime »

Merci en tout cas pour ton aide.

J’ai sniffé les paquets Ethernet par Wiresharck et j’observe quelque chose que je ne m’explique pas.

Si j’envoie la commande Write Single Register sur registre 121 avec Data « 2 », via le plugin, j’obtiens ceci :


On voit bien que la data est passée. Mais cela ne fonctionne pas.

Si je fais la meme chose avec ModbusDoctor :


Idem la data est passée, mais la ça fonctionne.

Ce qui est étrange , c’est que entre le paquet envoyé par le plugin et celui envoyé par ModbusDoctor il y a 12 bytes de plus dans le paquet envoyé par le plugin.
Je me demande si le problème ne viens pas de là.

@Bebel27 ou quelqu’un d’autre, je suis preneur si vous avez une idée.

C’est quoi comme équipement modbus

Il s’agit d’appareils de mesure (qui ne sont pas grand public, je ne vais donc pas citer la marque ici).
Le défaut se constate sur deux gammes d’appareils différents, une développée sous Windows et une sous linux.

Quelle version de pymodbus utilise le plugin ?
Est ce qu’il ets possible de mettre à jour ? Si oui comment ?
Histoire de voir si cela apporte quelque chose.

Merci encore pour l’aide

Pour la version regarde dans le. Log d’installation ça doit être noté, mais je pense pas que ça va changer grand chose.
L’identifiant de transaction est à 0 sur modbus doctor c’est tout le temps le cas, a chaque écriture ?

Bonjour @Bebel27,

Si on parle du Transaction Identifier, oui il est toujours à 0 avec Modbus Doctor.
Si je souhaite faire un essais avec le plugin, je peux modifier l’ID du plugin ou ?

Concernant les 12 bytes de différence entre le smessages du plugin et ceux de Modbus doctor, cela n’a pas d’impact ?

Pour la version de pimodbus :

echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
echo "Installation dependance  pypModbus 2.4.0"
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
sudo pip3 uninstall pyModbus==2.5.0
sudo pip3 install pyModbus==2.4.0

Merci par avance

Aucune idée pour le nombre de bits, le protocole est normé et bien reconnu par ton sniffer.

La version utilisée de pymodbus est donc la 2.4 de pymodbus.

Ok
Si je souhaite faire un essais avec un ID à 0, je peux modifier l’ID du plugin ou ?

Merci

As tu essayé le champ unit id dans le plugin ?

Non car pour moi cela correspond à l’unit ID de mon appareil et non du plugin.

Actuellement :

  • ModbusDoctor ID (0) et mon appareil (1)
  • PluginMyModbus (1) et mon appareil (1)