Mes débuts avec la V5 et MODBUS

Bonjour à tous,

Après la V3, la V4, je suis passé en V5 plus particulièrement pour le MODBUS.

Voilà plusieurs jours que je tente de faire quelques chose avec le MODBUS sans succès, malgré les nombreux sujets dans ce forum.
Je fais donc appel à votre aide.
Je tente d’interfacer un adaptateur DS18B20 vers MODBUS (longue distance)


Voici le peu d’information que je possède sur la carte :
Protocole MODBUS RTU, 03 commande de lecture, 06 commande d’écriture.
Débit en bauds du port série: 9600 (par défaut), N, 8, 1
Coté config de la V5 pas de soucis :

Mon but étant de récupérer la température pour la communiquer à JEEDOM
j’ai commencé avec un scénario, est ce la bonne méthode ?

image
Et la j’ai testé plusieurs paramètres, mais toujours des erreurs !

Merci d’avance pour votre aide

Bonjour @Arnaud67

Vous semblez bien parti, il y a seulement une petite erreur qui génére le crc error…
La reponse a la requete modbus se fait sur 2 octets. Il vous faut donc une autre ANA8 ou une ANA16 directement…
J’attire votre attention sur le bit de poids fort qui est a 1 si la température que vous souhaitez mesurer est négative… alors les choses se compliqueront…
D’autre part, pour des valeurs positives, il vous faudra convertir la valeur obtenue en décimale. Pour ce faire, utilisez un objet fonction qui divisera par 10 la valeur de l ANA modbus :wink:.
Donnez moi des retours sur l’avancement de votre projet

3 « J'aime »

Bonjour,
Merci pour votre réponse, j’avais continuer à chercher mais sans grand succès.
N’étant pas à l’aise avec les octets, les bits, … quelle est la solution la plus simple deux ANA8 ou un seul ANA16 ?

Je test cela dans la semaine et vous tiens informé.

Encore merci

Je vais essayer de vous expliquer un peu mieux le fonctionnement du modbus mais n ayant pas votre équipement, je ne pourrai pas tester ce que je vous écris:

Qd vous voulez lire une température en modbus (avec l objet modbus READ de la v5)

  1. vous emetez une requête (construction de l’objet READ)

Exemple :

  • Adresse de l’objet a lire sur la chaine modbus: ex 1 (codé sur 1 octet soit 8 bits) 01
  • la fonction utilisée danz notre exemple READ 03 (codé sur 1 octet soit 8 bits)03
  • l’adresse du registre que l’on veut interroger : ici 0 (codé sur 2 octets soit 16 bits) 00 00
  • la taille de ce qu’on veut lire ( codé sur 2 octets soit 16 bits)00 01
  • le CRC (codé sur 2 octets soit 16 bits) cette opération est effectuée automatiquement par la v5 (84 0A)
    La requete donne donc:
    01 03 00 00 00 01 84 0A
  1. La reponse de la carte modbus :
  • Adresse lu : ex 1 (codé sur 1 octet soit 8 bits) 01 (non visible sur la v5)
  • la fonction utilisée dans notre exemple READ 03 (codé sur 1 octet soit 8 bits)03 non visible sur la v5
  • nombre d octets lus (codé sur 1 octet) non visible sur la v5
  • les données lues ANA16 EN MODE RAW (2 octets VISIBLE SUR LA V5)
  • le CRC (codé sur 2 octets soit 16 bits) cette opération est effectuée automatiquement par la carte modbus interrogée (non visible sur la v5)

EXEMPLE 1 DE REPONSE pour la requête formulée ci-dessus:
01 03 02 00 DB F8 1F
Ainsi avec le decodage expliqué ci-dessus les données qui nous intéressent sont 00 DB qui sont converties dans l ANA16 en 219
Il faut alors diviser le résultat obtenu par 10 pour obtenir la température réelle… soit 219/10=21.9 °C

EXEMPLE 2 DE RÉPONSE pour la requête formulée ci-dessus :
01 03 02 FF 90 F2 3F
Les données qui nous intéresse sont : FF 90 converti en decimal 65424.
En binaire la représentation de 65424 commence par 1 ( bit de poids fort) ce qui signifie que la valeur recherchée est une valeur négative… pour obtenir la valeur négative il faut faire :
(65424-65536)/10 = -11.2°C

Notez que si la valeur de retour est 32768 cela signifie que la sonde n’est pas branchée ou est en erreur

Pour répondre, simplement à votre question (si ma longue explication -rédigée depuis mon tel portable :sweat_smile:- ne vous a pas fait fuir) : j’essaierai avec une ANA16 en mode raw puis y coller un objet fonction qui divise par 10 et le résultat de cet objet fonction devrait donner directement la température recherchée… mais ceci ne sera valable que pour des températures positives
Ne seront pas gérés les températures négatives et les cas d erreurs de sonde… pour gérer ces cas ce sera plus compliqué et je ne suis pas sur que vous en ayez besoin?

EDIT: pensez aussi à rajouter un mécanisme qui permet d’interroger de façon régulière la température pour que la valeur soit rafraîchie

5 « J'aime »

Waouh!! Je ne m’attendais pas à une réponse aussi complète ! Merci.

J’ai du la relire plusieurs fois, mais il me semble avoir compris le principe.

La configuration est à jour comme ci-dessous :


Il y a une incertitude sur l’adresse de début 0 ou 1 selon les différentes documentations trouvé sur unternet. Avec 0 j’ai un message d’erreur « Délais d’attente dépassé ». Avec 1 je vois la led du ma carte clignoter et l’IPX indique « trame envoyé » mais aucune valeur dans mon ANA16.
image

Visualision faite dans un widget sur le dashboard :

J’ai commandé une nouvelle carte, je pense à un problème hardware

Bonjour @Arnaud67

Votre ANA16 est en REAL, je l’aurais mise en RAW…
OK pour le test de l’adresse 0 ou 1… sur la doc que j’ai du chercher en ligne, cela indiquait 0x0000…

Vous ne précisez pas si la mesure de températures négatives vous intéresse ?

Merci encore pour les infos.
Modification de l’ANA16 en RAW, toujours aucune valeur d’affichée
image

Câblage vérifié RAS, essai avec un autre DS18B20, IPX V5 neuf en version 5.5.7…

J’attends un nouveau module MODBUS pour refaire les mêmes tests.
Concernant les températures négatives, je vais commencer par le plus simple et bien me familiariser avec la V5 et le MODBUS.

Merci

Bonjour @Arnaud67

Si vous pensez que la carte modbus a un pb de hardware… entre temps vous pouvez peut-être essayer un restore to factory settings en utilisant la commande write 06 avec une sequence comme celle-ci :
01 06 00 03 00 05 B9 C9

  • La donnée a mettre dans une ANA16 est 5 (00 05)
  • Adresse de registre 00 03
1 « J'aime »

Bonjour,

Nouvelle carte réceptionnée avec DS18B20 directement soudé dessus.
utilisation de l’alimentation 12V de l’IPX.


Cela fonctionne parfaitement.

L’adresse de debut est bien le 0.
image

Le restore to factory de l’ancienne carte n’a rien changé ! carte probablement HS
Il faudra que je teste avec mes deux DS18B20 utilisé.

Merci pour votre aide

1 « J'aime »

Jweb,

En appliquant tes conseils, j’ai testé une autre sonde de température et humidité en RS485.


Avec deux ANA16 en RAW, le premier pour l’humidité et le second pour la température.

Cela fonctionne parfaitement.
Je continue à enrichir mes connaissances sur le MODBUS.

Si je souhaite utiliser les deux capteurs en même temps, il faut changer l’adresse d’un des capteurs ?
Quel est la procédure ?

Merci

1 « J'aime »

Bonsoir @Arnaud67 ,

Pour cela il faut mettre uniquement sur la ligne modbus la carte dont vous souhaitez modifier l adresse (car elles ont toutes les 2 la meme adresse par defaut : 1)

Meme mecanisme que la fois dernière :

  1. constituer une requête coté v5 et l émettre.
  2. recevoir le code de réussite/ echec

DANS L OBJET MODBUS WRITE:

  1. constitution de la requete :

01 06 00 02 00 03 68 0B

01: adresse courante de la carte dont on veut changer l adresse (1 octet) à ecrire ds l’objet v5
06: commande WRITE (1 octet) à ecrire ds l’objet v5
00 02 : l adresse du registre (2 octets) à écrire dans l’objet v5
00 03: pour par ex. Mettre la carte à l’adresse 3 (2 octets) à constituer dans une ANA16 dont on fixe la valeur à l’adresse qu’on souhaite qu’il occupe ds la chaine modbus (NB: l’adresse d’un objet esclave dans la chaine modbus doit etre compris entre 1 et 247)
68 0B: le CRC (2 octets) calculé automatiquement par la v5

  1. recevoir la valeur de retour sous la forme:
    Ex: 01 06 00 02 00 03 68 0B

01: adresse courante de la carte
06: commande WRITE (1 octet)
00 02 : l adresse du registre (2 octets)
00 03: l’adresse 3 (2 octets) confirmée que l’on retrouve dans l ANA16
68 0B: le CRC (2 octets) retourné (non visible)

Tenez moi au courant :wink:

Bonjour,

Avec la carte R46CA01 cela à fonctionné.


Changement de l’ID de 1 à 3 avec un ANA16.
image

Par contre impossible de modifier l’ID de l’autre capteur, malgré les données de registres.

Je tente de le passer en ID 2 via le registre 0

bonne soirée

Bonsoir @Arnaud67

Super ! Vous avancez! Les données de températures fonctionnent et se refraichissent?

Votre 2eme carte modbus semble de marque différente de la 1ère… merci pour l’extrait de la doc ( :sweat_smile::sweat_smile::sweat_smile: j’en aurais bien voulu un peu plus pour vous guider…)
Dans cet extrait la ligne qui vous intéresse pour la lecture et le changement d’adresse est la ligne 3.

On note l’adresse de registre 0100 en hexadécimal (H) ce qui fait 256 en decimal donc ce n’est pas le registre 0 :wink:

Faute de documentation, j’ai du mal à comprendre la 2nd colonne :sweat_smile:

1 « J'aime »

Super, c’est bien 256 le registre pour changer l’ID.

Toutes les données se rafraichissent automatiquement via un lien avec un clignotant.

Pour continuer mon projet, je vais tenter de communiquer avec un Compteur d’énergie KWH DDS238-2 ZN/S .


Seul les registres suivant m’intéresse:
Tension : registre 12 (/10) V
Courant : Registre 13 (/100) A
Puissance Active : registre 14 W
Consommation : registre 10 & 11
Fréquence : Registre 17 (/100) Hz

Bonne soirée

1 « J'aime »

Voila, une nouvelle connexion réussi avec un compteur d’Energie en RTU.
Uniquement deux fils nécessaire (A+ et B-).
J’utilise trois ANA16 pour les registres 12, 13 et 14 comme suit :

Si cela peut aider pour vos projets.

Bonjour,

Tu peux nous donner la référence de ton compteur?

D 'avance merci

Bonjour,

C’est un DDS238-2 ZN/S monophasé avec MODBUS-RUT RS485

Rail de Din KWH Watt heure compteur d’énergie 220V 230V 50HZ 60HZ ions courant DDS238-2 ZN/S monophasé avec MODBUS-RUT RS485 (■■■■■■■■■■.com)

Bonjour,

J avais repéré ce modèle mais ce qui me chagrine c est la puissance qui passe dans le module.
Je vais essayer avec un qui a un tore séparé .

Merci

Bonjour Domoni,

bien d’accord… faire passer 65 ou même 100 A dans une chinoiserie à 20€ :dizzy_face:
Sécurité avant économies :wink:

Bonne journée

Bonsoir
Comme @grocrabe l’a dit, je vous recommande la plus grande prudence avec des compteurs d’énergie peu cher et probablement non conformes aux normes.
Je vous recommande des compteurs à la norme CE ET certifié MID.
Personnellement, j’utilise un EM112 modbus RTU .