J’ai un souci de zone mémoire qui ne peut pas être lue en binaire mais bien en mot.
Débuté il y a 25 ans, je me suis fait un système de domotique avec un automate Wago et une supervision que j’ai entièrement
écrite en VB et qui tourne sur un PC en 24/7
J’ai découvert HA il y a peu et je voudrais m’en servir pour avoir une interface sur GSM/Tablette (pas envie de tout ré-écrire sous Android)
et pour avoir un accès de l’extérieur.
J’ai configuré HA pour faire une communication modbus avec l’automate.
D’une manière générale ca fonctionne, mais j’ai un souci pour lire une zone mémoire.
Je voudrais lire QX052.05 mais il s’affiche en Unavailable
En faisant des tests par tatonements j’ai identifié que HA peut lire que jusqu’à l’adresse 1023, après ça devient Unavailable
Ce qui est vraiment étrange, c’est que si je vais lire la mémoire 52 au format mot ça passe.
Est-ce que quelqu’un aurait une explication ?
Il y a des limitations dans HA avec la lecture de bits ?
Ou alors il faut y accéder autrement qu’a partir de 512 ?
J’espère que non, je n’ai pas envie de devoir modifier le programme automate juste pour HA.
J’ai essayé discrete_input, input et coil : même résultat
Je suis pas expert en modbus (loin de là ) mais QX052.05 ça veut pas dire le 5e bit de ta valeur QX052?
Est-ce que tu lis d’autres QX dans ton code?
Tu peux également utiliser python et essayer de lire ta valeur avec pymodbus et ensuite de voir ce que ça retourne et comment extraire juste l’information qui t’intéresse et comment la formatter:
Tikismoke : A partir de 12288 ce sont les mémoires persistantes. Mon problème c’est pour la mémoire volatile.
Et d’après la doc ci-dessous, 4096 c’est QX256 or j’ai besoin du QX52
Pyroaction : Tu vas lire des mots, et effectivement je n’ai pas de problème avec les mots.
Cloom : Je n’ai pas besoin des autres bits du mot dans HA, mais merci de l’info.
Je pense avoir trouvé la réponse dans la doc ci-dessous.
On y voit qu’effectivement, quand on va lire en bit, on est limité aux 512 premiers bits (soit seulement 32 mots)
Les sorties commencent à 512, donc 512+512=1024. Voila l’explication de mon problème pour lire 1349.
Par contre je ne comprend pas pourquoi cette limite dans le protocole, d’autant que la prochaine zone utilisable est à 4096.
On perd de 1024 à 4096 alors qu’on en aurait bien besoin.
Et donc en résumé, il y a moyen de lire et écrire des mots aussi bien en entrée qu’en sortie des adresses 0 à 511. Par contre pour les accès bits, on est limité aux adresses mots de 0 à 31 puis de 256 à 511. De 32 à 255…bin pas possible…mais pourquoi donc ?
J’ai revérifié comment j’avais fais dans la supervision que j’ai écrite en VB.
Et bien en fait j’avais fait un système d’optimisation des lectures de bits en lisant des mots dans l’automate et en masquant les bits dans le VB.
Donc d’un point de vue Modbus je ne fais que les lectures de mots.
C’est pour cela que je n’avais pas conscience de cette spécificité du protocole.
Bon, maintenant reste à savoir comment faire dans HA pour gérer un bit du mot 52…
Je voudrais afficher un statut binaire. Donc le mieux (surtout le plus adapté) est d’utiliser une carte ‹ bouton ›…j’ai bon ?
Il y a moyen de masquer une valeur numérique directement dans le bouton ?
Ou alors il faut passer par un template comme l’a proposé Cloom ?
Ou je dois faire ma propre carte ?
Quelle est la méthode la plus simple ?
Les joies de l’implémentation modbus de certains fabricants. Une fois de plus ne regarde pas chez soffrel c’est encore pire .
Sinon tu peux faire comme beaucoup d’intégrateur, ne jamais lire/écrire les e/s directement dans codesys. Tu passe tout par des variables Mw,Md,etc qui elles sont accessibles en permanence complétement et tu fais un bloc recopie des E/S.
Pour info chez Schneider les %I,%Q ne sont pas accessibles en modbus par exemple.
J’ai retrouvé cette notice en français, c’est les mêmes tables que ce que tu décris :