J’utilise le mode Crouzet_M3 (compatible avec Millenium 3, em4 et Millenium Evo).
Il faut bien renseigner l’adresse IP de ton automate (accessible depuis le menu Communication/Adresses/Adresse IPv4 de ton automate ou en utilisant un logiciel de scan réseau). Il faut en suite renseigner le port : 502 sur les automates Crouzet.
Voici ma configuration en exemple :
Pour la configuration des commandes je met en effet « Holding Register » « 16bits ».
Dans un premier temps, pour voir si tu arrive à récupérer une valeur, tu peux cliquer sur l’icone « Tester » à coté de la commande que tu veux essayer.
Je te laisse tester tout ça, dis moi si tu arrive à quelque-chose
Bonjour @Bebel27,
Il me semble que j’avais essayé sans résultat, je vérifie dans la semaine et je vous tiens au courant.
Pour ma part c’est le seul point qu’il me reste à solutionner et tout devrait rouler pour paramétrer et éventuellement faire une petite doc si ça intéresse quelqu’un.
J’utilise un convertisseur Ethernet/RS845 et je rencontre un souci (je rencontrais le même avec l’autre plugin).
Si quelqu’un voit une coquille dans la conf de mon convertisseur je suis preneur.
Dans les logs, je n’ai que des « None », sauf si je commente dans le fichier /usr/local/lib/python2.7/dist-packages/pyModbusTCP/client.py, cette partie :
# check rx_byte_count: buffer size must be consistent and have at least the requested number of registers
### A commenter pour les None
if not ((rx_byte_count >= 2 * reg_nb) and
(rx_byte_count == len(f_regs))):
self.__last_error = const.MB_RECV_ERR
self.__debug_msg('read_holding_registers(): rx byte count mismatch')
self.close()
return None
# allocate a reg_nb size list
registers = [None] * reg_nb
# fill registers list with register items
for i, item in enumerate(registers):
registers[i] = struct.unpack('>H', f_regs[i * 2:i * 2 + 2])[0]
# return registers list
return registers
Si quelqu’un a une idée…
@Rigolman69, tu avais le même souci. Est-ce toujours le cas?
C’était pour voir si tu arrivais bien à récupérer une information d’un registre parce que quand j’étais dans la découverte du modbus et donc dans la découverte de l’utilisation de modbus doctor, je n’avais pas eu de soucis en passant sur Mymodbus dès lors que j’avais enfin réussi à récupérer l’information sur Modbus docteur.
Après c’était un soucis de non prise en charge des mots inversés.
@Bebel27
Merci c’est noté, je suis donc passé en Beta avec registrefloat.
Par contre, je n’arrive toujours pas à lire les valeurs float.
Je pense que c’est lié au fait que l’équipement est codé en IEEE 754 qui implique d’inverser les octets des registres afin d’avoir un float correct
Par exemple pour un float :
le registre 42 m’envoie 3C9A
le registre 43 m’envoie DE41
La valeur 32 bits à transformer en float est 41DE9A3C (27.82530975°C la température de Equipement) et non DE413C9A.
Sous ModbusDoctor c’est la case inversion d’octet.
Est ce que le plugin gère cette subtilité ?
Deja un grand merci a Bebel, Freeddoo, et Johan pour tous vos conseils. Cependant ca ne marche toujours pas ! je veux bien etre debutant … enfin je commence a avoir touché pas mal de parametres !!!
je vais essayer de vous remettre le plus de details possible pour arriver a trouver ce grain de sable!
donc j’ai un em4 qui communique parfaitement avec Crouzet Soft (lecture, ecriture de programme, lecture de datalog, fonctionnement de la temperature en mode debug).
Dans Communication → Ethernet → Dynamic IP est coché
Communication → Modbus TCP/IP → Client Serveur est coché
Cet em4 est connecté a un switch qui est lui meme connecté a ma Freebox Delta.
Celle ci contient une VM que je viens de refaire. Une Jeedom Freebox toute fraiche a laquelle j’ai ajouté seulement le plugin MyModBus en version Beta (afin d’avoir le parametre 16bits).
Encore un énorme merci a @Bebel27 qui a résolu mon souci de communication … je dois avouer que je suis un peu honteux de dire qu’au final il a suffit d’un arret / redemarrage du module em4 !
et tout fonctionne (modbus Doctor, Jeedom) avec les parametres ci-dessus.
@Bebel27 ou aux autres utilisateurs de ce plugin
Toujours dans ma recherche de comment inverser les octets d’un float, j’ai essayé le mode eastron qui inverse les mots.
Voici ce que j’obtient en debug :
[2020-09-15 14:42:05][DEBUG] : Evenement : add=>192.168.0.170 unit=>1 eqid=>5 type=>holding_registers sortie=>1 inputs=>36 values=>[13089]
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python3.7/threading.py", line 917, in _bootstrap_inner
self.run()
File "/usr/lib/python3.7/threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "/var/www/html/plugins/mymodbus/ressources/mymodbus_demond.py", line 244, in polling_thread
decoder = BinaryPayloadDecoder.fromRegisters(rr.registers,byteorder=Endian.Big,wordorder=Endian.Big)
AttributeError: 'ExceptionResponse' object has no attribute 'registers'
Version de python ok
Traceback (most recent call last):
File "/var/www/html/plugins/mymodbus/ressources/mymodbus_demond.py", line 269, in <module>
raise ParameterException('Thread en défaut')
NameError: name 'ParameterException' is not defined
La valeur sur le registre 36 en int est OK.
Par contre cela bug sur le registre 38 qui est un float avec inversion des octets. (Sous Modbus Doctor, float 32 bits + inversion des octets).
Tu utilises Jeedom dans ton entreprise ? Tu n’as pas de dns Jeedom, car c’est sécurisé…
Non merci pour les logs ça ne m’apportera pas d’aide pour ton problème.
Je fais un essais qui n’a rien a voir avec la domotique mais Jeedom dans ce cas me sert juste pour le log de datas de différents appareils.
Le réseau est protégé par un firewall, les accès sont très restreints.
Je peux te faire un printscreen sous Modbus Doctor si ca aide