Les plugins Modbus (RTU et TCP)

merci de respecter les consignes de Community un sujet > un problème puis bouton résolu

Bonjour Dams,
Je suis pour le moment en test sur le plugin Modbus RTU. il y a effectivement encore certains problèmes.

Je constate qu’il y a pas mal de MàJ pour le moment, c’est donc que le développement avance… :+1:.

Ne devrions nous pas ouvrir un nouveau sujet un peu plus technique dédié au plugin RTU.
Pour que cela soit constructif, il est peut-être nécéssaire que les développeurs qui travaillent sur ce plugin soient conviés à suivre le fil… (mais j’ignore de qui il s’agit.)

JC

Bonjour jcb
Normalement il faut ouvrir un sujet par problèmes. Comme cela quand quelqu’un qui a le même problème trouve le sujet il y trouve aussi la solution.
Pour les développeur, il y a une section fil d’actualité, https://community.jeedom.com/c/fils-dactualites/121
Seulement les développeur peuvent écire mais tout le monde peu lire

Bonjour,

Je suis d’accord avec JCB, il faudrait faire un sujet que pour Modbus RTU. Ca devient un peu confus tous ces Modbus qui mélangent RTU, TCP, RTU over TCP !
Certaines personnes, dont je suis, veulent utiliser le RTU seulement.

Bonjour à tous,

Avant tout je tiens à préciser que ce qui suit n’est en rien négatif, c’est juste dans le but de faire avancer le « schmilblick », (je suis bien incapable d’écrire des plugin…)

Je viens de tester les trames envoyées par jeedom avec l’utilisation du plugin modbus RTU.

  1. Première constatation;
  • A la création d’une commande, si on veut faire une lecture (Type « Info ») le menu « Type E/S » propose 4 options qui sont « Coil, Discrete input, Holding register, Input register » qui correspondent respectivement aux fonctions modbus F1d, F2d, F3d, F4d. (d pour decimal)
  • Si on veut écrire vers le périphérique Modbus (Type 'Action"), le menu Type « E/S propose » les mêmes options. Or, on peut bien écrire un « coil F5d » (pour actionner une sortie ou un relais p.ex.) ou envoyer une valeur dans les « Holding Register F16d » mais on ne peut pas écrire vers un Discrete Input ni vers un Input register (logique, ce sont des registres en lecture seule. (on pourrait voir apparaitre les options « Single Holding register » et « Multiple coil » à la place).
  1. Deuxième constatation;
  • Lorsqu’on utilise d’une commande, de « type » Info, quel que soit le type E/S, la fonction envoyée dans la trame Modbus est invariablement F3d (Read Holding Register).
  • Lorsqu’on utilise d’une commande, de « type » Action, quel que soit le type E/S, la fonction envoyée dans la trame Modbus est invariablement F16d (Write Multiple Holding Registers).
    Il semble que le Type d’E/S ne soit pas pris en compte par le plugin (ou minimalmodbus…)

Donc pour le moment, le plugin Modbus RTU est juste utilisable pour les fonctions Modbus 3d et 16d. (3 et 10 en Hexa)

Pour moi, l’idéal serait que l’on puisse utiliser le modbus RTU et TCP en même temps car dans la topologie d’un réseau de capteurs/actionneurs, on peut être amené à utiliser les deux technologies. On pourrait évidemment utiliser des convertisseurs pour tout passer en TCP mais c’est encore ajouter des éléments, des sources de pannes, des consommations électrique…
A voir si l’utilisation des deux protocoles simultanément est possible car je crois qu’ils utilisent le même script…

Bonjour JCB,

J’ai essayé maintes fois la fonction 5, mais sans succès ! Vois-tu réellement passer 05 en tant que fonction dans les trames ?
Si c’est le cas, ça intéresserait d’avoir une impression d’écran de la commande.

Merci d’avance

Bonjour Rigolman,

En type action, j’ai beau mettre n’importe quel code fonction, c’est toujours 10 (Hex) dans la trame.

Il est à noter que depuis la mise à jours du 04/05/2020, je vois que le paramètre Funtioncode apparait dans la requête du plugin vers le script Modbus mais au niveau de la trame c’est toujours pareil. (donc il y a de l’évolution, c’est bien)

JCB

le 01 06 2020 . test avec 2020-02-13-raspbian-buster-lite.img sous RPI3A et RPI4B sous jeedom 4.0.54
Wiki => Utilisation du version plugin modbus RTU Développé par Jeedom SAS beta 2020-05-12 09:27:31 (5 euro :unamused: )
ghkljhjkle

Le Développeurs Bebel27 est entrain de mettre à jour sont plugin pour pouvoir faire le même travail . Cela permettra d’avoir qu’un seule plugin pour le TCP/IP et le RTU ! Merci à lui car contrairement a celui de jeedom, il est gratuit ! ( tu gagnes 5 € :smiley: )
MyModbus Développé par bebel27
https://bebel27a.github.io/jeedom-mymobdus.github.io/fr_FR/
sssqstre
avec
un compteur d énergie SDM230-Modbus-MID 100A Mono digitaler LCD Wechselstromzähler ( 35 € )

https://www.ebay.de/itm/digitaler-LCD-Wechselstromz%C3%A4hler-Stromz%C3%A4hler-S0-RS485-Modbus-RTU-MID2020-geeicht/362917300869?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649
Modbus-RTU-MID2020-geeicht/362917300869?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649

et une interface Zihatec Modbus Shield inteface Professional RS422/RS485 Shield for Raspberry Pi B+, 2B, 3B and 4B (37 €uro )

cela fonctionne aussi avec une clef usb à 0.8 € ( et il n’y a aucune configuration a faire , contrairement a l’interface Zihatec ) . Linux a déjà les drivers compatibles . Rien à faire, plug and play… . Par contre pour mon windows 7 pro ,je n ai jamais réussis à installé les drivers . J’ai du prendre mon portable avec windows 10 familly pour capter et comprendre les premiers signaux avec ModbusDoctorV2.Drivers pour Windows-CH340-Driver chipset CP210xVCPInstaller_x64.exe lien du fabriqaunt drivers
https://es.aliexpress.com/item/834970564.html?spm=a2g0s.9042311.0.0.274263c0lhCEGT

Cela fonctionne aussi avec la USB-RS485-WE-1800-BT Chipset FT232RL Product Type UART Convert Cable € 14,61 ( mais j ai payé 35 € à la post pour les frais de douane … ) http://www.ftdichip.com/FTDrivers.htm

iliule

1-Changer les switch de la carte Zihatec

sw1
1=off
2=on
3=on
4=off
sw2
1=off
2=off
3=on
4=on
sw3
1=off
2=off
3=off
4=off

connection a votre slave RTU ( EASTRON )
le connecteur A = le « + »
le connecteur B = « - »

F70LHJ3JDCMSWE1.LARGE

actives ton interface serial sur ton RPI avec la commande
sudo raspi-config
? goto ‹ 5 Interfacing Options ›
? goto ‹ P6 Serial ›
? ‹ Would you like a login shell to be accessible over serial? › → NO
? ‹ Would you like the serial port hardware to be enabled? › → YES

verifie avec la commande
ls -l /dev si
serial0 → ttyS0
oi^poe
Note: /dev/serial0 and /dev/serial1 are symbolic links which point to either /dev/ttyS0 or /dev/ttyAMA0.

nano /boot/config.txt => verifies si
enable_uart=1

/dev/bus/usb
/dev/ttyUSB0 ( clef usb ) 1a86 USB2.0-serial (/dev/ttyUSB0)
/dev/serial0 ( hat zihatec.de interface )

^

Avec une celf usb à 0.8€ comme interface Modbus RTU , je laisse sur " auto " , je ne choisi pas 1a86 USB2.0-serial (/dev/ttyUSB0) . et cela fonctionne . Avec la carte Zihatec , je choisi /dev/serial0 .
Pour la clef usb ca donne =>


Dans le EASTRON SDM230 j’ai personnellement choisis les parametres suivants :
bd 9600
databit X8
stopbits One
party none
DRT FALSE
RTS FALSE
Timeout 1000
N° escalve ID = 10
Attention :raised_hand: quand tu achetes le SMD230 , les parametres sont bizars . par exemple, la vitesse de communication à 1000 bauds et un stop bits sur « 2 » . IL FAUT LES CHANGERS :warning:
je mis une résistance électrique sur le sdm230 de 4k7 Pull-down Resistor car je fais des tests avec une celf usb également ( qui ne posséde pas le choix sur elle même avec un switch ) de choisir une resistance ou non . Même avec la resistance de 4700 ohms sur sdm230 , la carte Zihatec fonctionne avec le switch SW3 N° 1 sur OFF .

liens utiles

https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=141195

Log en fonctionnement :

[2020-06-01 12:15:33][DEBUG] : http://127.0.0.1:80 "POST 

/plugins/modbusrtu/core/php/jeeModbusrtu.php?apikey=BZyfVAsWTqaNtYTD7F13q0FKuFq2GkZ4 

HTTP/1.1" 200 0
[2020-06-01 12:15:36][DEBUG] : {"88": 0.0, "86": 0.0, "84": 0.0, "24": -443.5833435058594, "0": 

231.58041381835938, "344": 67.73200225830078, "288": 0.0, "342": 158.02099609375, "6": 

2.8238368034362793, "76": 0.07400000095367432, "74": 0.0, "72": 158.02099609375, "70": 

51.6129035949707, "90": 0.0, "92": 0.0, "94": 0.0, "78": 67.65799713134766, "12": 440.21246337890625, 

"18": 624.9713134765625, "30": 0.7043723464012146, "36": 314.7755126953125, "294": 0.0}
[2020-06-01 12:15:36][INFO] : Decode data : {"id": "1", "result": {"88": 0.0, "86": 0.0, "84": 0.0, "24": -

443.5833435058594, "0": 231.58041381835938, "344": 67.73200225830078, "288": 0.0, "342": 

158.02099609375, "6": 2.8238368034362793, "76": 0.07400000095367432, "74": 0.0, "72": 

158.02099609375, "70": 51.6129035949707, "90": 0.0, "92": 0.0, "94": 0.0, "78": 67.65799713134766, "12": 

440.21246337890625, "18": 624.9713134765625, "30": 0.7043723464012146, "36": 314.7755126953125, 

"294": 0.0}}
[2020-06-01 12:15:36][DEBUG] : Handling RTU for sdm230
[2020-06-01 12:15:36][DEBUG] : Handling local request read for sdm230
[2020-06-01 12:15:36][DEBUG] : Command to execute sudo /usr/bin/python 

/var/www/html/plugins/modbusrtu/resources/modbusrtud/modbus_rtu.py --slave 10 --device /dev/ttyS0 --baud 

9600 --byte 8 --parity none --stop 1 --register '{"listdevice":[{"datatype": "float", "nbregister": "2", 

"functioncode": "4", "location": "0"}, {"datatype": "float", "nbregister": "2", "functioncode": "4", "location": "6"}, 

{"datatype": "float", "nbregister": "2", "functioncode": "4", "location": "12"}, {"datatype": "float", "nbregister": 

"2", "functioncode": "4", "location": "18"}, {"datatype": "float", "nbregister": "2", "functioncode": "4", 

"location": "24"}, {"datatype": "float", "nbregister": "2", "functioncode": "4", "location": "30"}, {"datatype": 

"float", "nbregister": "2", "functioncode": "4", "location": "36"}, {"datatype": "float", "nbregister": "2", 

"functioncode": "4", "location": "70"}, {"datatype": "float", "nbregister": "2", "functioncode": "4", "location": 

"72"}, {"datatype": "float", "nbregister": "2", "functioncode": "4", "location": "74"}, {"datatype": "float", 

"nbregister": "2", "functioncode": "4", "location": "76"}, {"datatype": "float", "nbregister": "2", "functioncode": 

"4", "location": "78"}, {"datatype": "float", "nbregister": "2", "functioncode": "4", "location": "84"}, {"datatype": 

"float", "nbregister": "2", "functioncode": "4", "location": "86"}, {"datatype": "float", "nbregister": "2", 

"functioncode": "4", "location": "88"}, {"datatype": "float", "nbregister": "2", "functioncode": "4", "location": 

"90"}, {"datatype": "float", "nbregister": "2", "functioncode": "4", "location": "92"}, {"datatype": "float", 

"nbregister": "2", "functioncode": "4", "location": "94"}, {"datatype": "float", "nbregister": "2", "functioncode": 

"4", "location": "288"}, {"datatype": "float", "nbregister": "2", "functioncode": "4", "location": "294"}, 

{"datatype": "float", "nbregister": "2", "functioncode": "4", "location": "342"}, {"datatype": "float", "nbregister": 

"2", "functioncode": "4", "location": "344"}]}' --action read
[2020-06-01 12:15:36][DEBUG] : Send to jeedom :  {u'devices': {u'1': {'id': u'1', 'result': {u'88': 0.0, u'86': 0.0, 

u'84': 0.0, u'24': -443.5833435058594, u'0': 231.58041381835938, u'344': 67.73200225830078, u'288': 0.0, 

u'342': 158.02099609375, u'6': 2.8238368034362793, u'76': 0.07400000095367432, u'74': 0.0, u'72': 

158.02099609375, u'70': 51.6129035949707, u'90': 0.0, u'92': 0.0, u'94': 0.0, u'78': 67.65799713134766, u'12': 

440.21246337890625, u'18': 624.9713134765625, u'30': 0.7043723464012146, u'36': 314.7755126953125, 

u'294': 0.0}}}}

plugin_rtu
pour les finitions
mettre en KW/H => Formule de calcul (#value# pour la valeur) => #value#/1000
mettre que 2 chiffres après la virgule => Arrondi (chiffre après la virgule) => 2
Mode de lissage maximum ( pr avoir bcp de points enregistrés )
, voici mes parametres


Je suis Off Grid, donc la fréquence est correct ( entre 48 et 52 Hz selon mes panneaux solaires et le Sunny Island… ) . Comme sont nom l’indique, le SDM230-Modbus-MID est " MID 2020 " . Donc avec la [certification MID( The Measuring Instruments Directive 2014/32/EU) . Lien wikipedia ici
kkkkkkkkkkitre

Citation

=> Ca va être l’inverse . C est le plugin non officiel qui fonctionne bien en TCP/IP qui va reprendre la capacité en plus de faire du RTU . Comme Jeedom ne fait rien … ( pourtant annoncé par Thomas en mai 2020 ) .

Bonjour,

J’utilise le plugin en mode TCP-IP. Il marche parfaitement. Encore merci.

Bonjour,

J’ai essayé MyModbus en mode RTU mais ça ne m’a pas paru évident ! J’avoue ne pas y avoir passé beaucoup de temps non plus ( j’ai demandé à @Bebel27 mais il ne me répond pas) !
Quelqu’un a-t-il aussi fait des tests ? Je suis preneur de la moindre info.

Merci d’avance.

Le Développeurs Bebel27 est entrain de mettre à jour sont plugin pour pouvoir faire le même travail .
c’est malheureusement pas fini . certainement pour fin Août 2020 . Même si il y a l option RTU dans le plugin => il est ce jour ( 22 06 2020 ) non fonctionnel .
C est du travail benevol gratuit … et il a un vrai travail à cote … donc patience :crossed_fingers:

TEST : plugin ModbusRTU officiel de Jeedom avec une clef usb FTDI USB-RS485-WE-1800-BT to Embed Conv Wire open End 1.8m et un capteur de puissance électrique 16 entrées de 100€ capteurs compris (de 40A ou 80 A ).

  • je cherchais à mettre des capteurs de puissance low coast dans une armoire électrique avec jeedom, j’ai installé un AMI-1216.02 Switch Actuator 12-fold 12SU MDRC, 230VAC, 16/20A, C-Load 200µF, with current measurement qui fonctionne très bien sous KNX à 290 € sur eibmarkt ( se qui fait 24 € par cable de puissance ), je trouve cela coûteux pour en ajouter un deuxième car je n’avais pas besoins du relais et du cos phi,et… , j ai donc fait le test avec un Multiplex 16 Way AC Current Frequency Measurement Acquisition Module RS485 Sensor Transmitter MODBUS-RTU HDHK 16 inputs ( j ai demander 2X pour avoir le manuel d utilisation en Anglais … et le producteur chinois ne veut pas le faire ) à 70 € à se jour pour le 16X40A sur aliexpress ( se qui donne 4.3 € / cable de puissance ,moins coûteux que le capteur/relais de MDT à 24€/cable







    captor 100A type DL-CT20CL 2000/1
    HDHK captor / 72-2595 tenma / pince CM-2056 VICI
    4.32 / 3.46 / 4.10
    8.14 / 6.60 / 7.90
    200 ma en + que la valeur de ma pince ampèremétrique. je n ai pas respecté le sens du courant qui passe dans le capteur de courant … fait à la va vite…
    je suis à 80 W au dessus de mon energy meter MDT qui est du materiel pro . ( test avec une consommation de 2800w)
    pour une puissance de 1300w, je suis exactement à la meme valeur qu un SMA sunny island . Mais sous les 300w, j ai en general 100w de moins … donc pas terrible pour les petites valeurs ( normal mon TI DL-CT20CL 2000/1 est un de 100A … )

Test convertisseur RTU vers TCP IP $18.99
J ai eu peur de ne pas avoir choisi le bon model de convertisseur modbus ( comme ici expliquer dans le vieux forum ) . je pensait devoir acheter l’autre model " RS232/485 TO ETH "

"
https://forum.jeedom.com/viewtopic.php?f=133&t=1560&hilit=modbus+convertisseur&sid=10b1e910291ffc14cae56ee795f09d49&start=660

https://forum.jeedom.com/viewtopic.php?f=133&t=1560&hilit=modbus+convertisseur&sid=10b1e910291ffc14cae56ee795f09d49&start=700
"
Mais mon, mon convertisseur model RS485 to Ethernet Converter

fonctionne bien avec le plugin MyModbus (mymodbus) - beta Version2020-06-01 22:42:07 pour la reception d’un energy meter Eastron sdm230_rtu à € 24,71 avec les parametres suivants
mmme


(upload://6HHbserM4x9c6bkikBak13sw19y.jpeg) 4 5 7

Cela fonctionne aussi avec le convertisseur ZLAN5143D Din Rail Serial RS485 to Ethernet TCP IP Server Module Ethernet Converter Modbus RTU to Modbus TCP unit à 14 € sur aliexpress =>
IP par défaut : 192.168.98.1 Mot de passe par défaut : 888888 Après faut voir d’après moi dans « UART » Type : RS485 Netmode : server

1 « J'aime »

Sabeis donde puedo encontrar el manual ZLAN 5143D?

J’ai commandé le ZLAN 5143D. J’essaye de le configurer mais je ne peux pas communiquer avec le docteur modbus (par exemple) et les automates qui communiquent en modbus RTU.

J’ai essayé plusieurs configurations, je vous montre une capture d’écran:

Savez-vous que je peux me tromper? Je vous remercie

La configuration du ZLan me semble ok. Modbus Doctor ne peut pas du tout se connecter sur l’IP 192.168.1.99 port 502 ?
Ou bien c’est l’interrogation des périphériques modbus qui ne fonctionne pas ?

1 « J'aime »

Directement avec le docteur Modbus, il se connecte mais ne lit aucune donnée, explique Time out.

Je n’ai qu’un appareil Modbus connecté avec l’adresse 1 et avec cette IP.

Donc la communication avec le Zlan est ok.
Soit les valeurs de serial settings ne sont pas adaptées au matériel, soit l’adresse dans le holding register n’est pas bonne. Quel est le matériel Modbus que tu interroges ?

Hello @Bebel27,

Je viens de passer mon Jeedom d’un conteneur Docker vers un Odroid-C4.
J’ai migré la partie Modbus sur ton plugin.
J’ai dû effectuer les modifications ci-dessus pour ne pas avoir des valeurs vides.
As-tu une idée de la raison?

Salut, je vois par rapport au code que c’est liée à la taille du buffer en réception .
Tu te connecte à quel matériel, tu passes en direct ou par un convertisseur ?