Mais la trame envoyée est la suivante (je lis la trame sur un UART)
1;15;0;0;0;1;1;164;
ou lieu de
1;15;0;0;0;8;1;164
Conclusion la trame MODBUS code un message 8 bits comme si sa longueur était un bit (1 register au lieu de 8 register).
Donc je ne peux piloter que le dernier bit de mon message (il s’agit d’un relais), et cela fonctionne bien dernier bit =0 le relais s’ouvre =1 il se ferme
Je pense qu’il s’agit d’un bug (confusion entre bits et bytes (octets) dans le message MODBUS et je ne sais pas comment y remédier il m’est en fait impossible de créer le message modbus 1;15;0;0;0;8;1;164
et la communication fonctionne bien puisque j’arrive a actionner le premier relais.
D’autre part il s’agit bien de bits et pas d’octets à écrire même si la doc. constructeur peut prêter à confusion. Il ne s’agit pas de « register » mais de « coils »
Tout a fait d’accord pour la valeur binaire 10100100 (c’est une erreur de conversion qui s’est glissée dans mon email, il s’agit bien de 164 - A4)
Donc pour résumer la commande que je veux envoyer est la suivante
Code fonction (Taille 1 octet) 15ecriture n bits
Adresse de départ (Taille 2 octets) 0000 Nombre de bits à écrire (Taille 2 octets) 0008
Nombre d’octets à écrire (1 byte = 8bits) 1
Valeur(s) à écrire 164 (valleur binaire a ecrire 10100100)
CRC check code for all data
Donc la trame voulue est la suivante (decimal): 1(adresse); + 15;0;0;0;8;1;164;
Mais la trame envoyée par l’IPX est 1;15;0;0;0;1;1;164;
De plus si l’on considère le retour d’info du périphérique
→ TRAME ENVOYEE 1;15;0;0;0;1;1;164;47;44;
→ RETOUR PERIF 1;15;0;0;0;1;148;11;
Le périphérique nous indique qu’il a écrit un bit et pas les 8 bits demandés.
Je crois que la fonction « Write multiple bit » de l’IPX est mal codée.
Lorsqu’il s’agit d’écrire 8 bits, Le registre Nombre de bits à écrire devrait contenir la valeur 8 or l’IPX code la valeur 1.
Peut-être qu’il s’agit d’un bug, ou alors je n’ai pas bien compris l’utilisation de cet Objet MODBUS.
Bonne journée
Denis
Oui peut-être, je n’ai pas de matériel pour tester .
Je vous conseille d’essayer à nouveau avec le mode write multiple register … et nous poster la réponse de la v5.
Si cela ne fonctionne pas, alors il vous faudra ouvrir un ticket au helpdesk, l’équipe GCE est très réactive
Bon courage pour la suite et merci de poster votre retour d’expérience qui pourra servir à toute la communauté une fois la difficulté dépassée
J’ai essayé avec Write multiple register (code 16 = second octet du message) et cela ne fonctionne pas.
En effet le message envoyé est le suivant
1;16;0;0;0;1;1;164;193;237;
Pas de réponse du périphérique qui ne comprend pas parce que cette commande n’est pas répertoriée dans cette configuration.
Par contre avec Write multiple bits le perif répond mais il écrit 1 bit au lieu de 8 bits suite à la demande de l’IPX. Le 0;1 devrait être 0;8 puisque j’envoi 8 bits et pas 1 bit mais je n’ai pas de prise sur cela, c’est l’IPX qui décide …
1;15;0;0;**0;1;**1;164;47;44; ---- 1;15;0;0;0;1;148;11;
Je vais attendre un peu pour voir si il y a d’autre interventions sinon j’envoi un message au Helpdesk
Cette fonction MODBUS est fantastique mais elle nécessite peut-être quelques ajustements.
Pour info. je peux lire les messages échangés grâce à un Convertisseur RS485 → (socket) TCP et un programme en python qui se connecte au socket et me revoie les trames RS485. C’est pratique pour comprendre les échanges MODBUS.
Je viens d’installer la version 5.4.0 et la commande MODBUS en question a été mise à jour. Mon périphérique fonctionne donc parfaitement et je remercie GCE pour leur réactivité.
→ TRAME ENVOYEE 1;15;0;0;0;8;1;164;255;46;
→ REPONSE PERIF 1;15;0;0;0;8;84;13;
Bonne journée