MODBUS les variables

Partie du forum pour tout ce qui concerne la partie réseau de communication dans l'industrie. Forum, conseil, astuce et entraide sur le réseau industriel tel que la connexion modbus, ethernet, fipio .
Fredo
Asservi son premier moteur
Asservi son premier moteur
Messages : 23
Inscription : 18 août 2019, 11:18

MODBUS les variables

Message par Fredo »

Bonsoir à tous ,

Étant novice dans le domaine de l’automatisme j’aurais quelque question concernant ces différent langage concernant le modbus effectivement ayant approfondit mon apprentissage j’ai des difficultés avec ces termes :
Est-ce que ces termes utilisé en modbus sont les différentes variables type entrée / sortie TOR et oh Analogique ?
- Les coils
- Les Input Contact
- Les Input Register
- Les Holdind Register
Merci à vous d’avances !

Cordialement
jpratpsft
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 124
Inscription : 24 nov. 2015, 11:10
Localisation : Blagnac
Contact :

Re: MODBUS les variables

Message par jpratpsft »

Bonsoir Fredo,

Bienvenue dans le monde merveilleux de l'automatisme et de la communication industrielle...
Tu l'as presque...

Coils = sorties TOR équivalent à une bobine dans un schéma à relais.
Le type de données Modbus est 0.
On le note souvent 0x, ce qui facilite l'adressage.
Les données de type 0x sont disponibles en lecture et en écriture.
Pour la lecture, le code fonction 1 (01 en hexadécimal) est utilisé.
Pour l'écriture d'une donnée de ce type, le code fonction 5 (05h) est utilisé.
Pour l'écriture de plusieurs données consécutives, le code fonction 15 (0Fh) est utilisé.
Ce type de données est note de différentes façons:
%M1, 00001, 000001 (pour la première variable)...
Pour ma part, et d'après mon interprétation du standard, la notation devrait être 0x0000 (jusqu'à 0xFFFF), en hexadécimal donc.

Input Status = entrées TOR équivalent à un contact dans un schéma à relais.
Le type de données Modbus est 1.
On le note souvent 1x, ce qui facilite l'adressage.
Les données de type 1x sont disponibles en lecture seulement.
Pour la lecture, le code fonction 2 (02h) est utilisé.
Ce type de données est note de différentes façons:
%i1, 10001, 100001..,
Pour ma part, la notation devrait être 1x0000 (jusqu'à 1xFFFF).

Input Registers = entrées numériques équivalent a un registre (d'où le nom), ou une valeur non binaire (un mot de 16 bites).
A l'époque le choix n'étais pas comme de nos jours...
Le type de données Modbus est 3.
On le note souvent 3x, ce qui facilite l'adressage.
Les données de type 3x sont disponibles en lecture seulement.
Pour la lecture, le code fonction 4 (04h) est utilisé.
Ce type de données est note de différentes façons:
%IW1, 30001, 300001..,
Pour ma part, la notation devrait être 3x0000 (jusqu'à 3xFFFF).

Holding Registers = sorties numériques équivalent a un registre (d'où le nom), ou une valeur non binaire (un mot de 16 bits).
Le type de données Modbus est 4.
On le note souvent 4x, ce qui facilite l'adressage.
Les données de type 4x sont disponibles en lecture et en écriture
Pour la lecture, le code fonction 3 (03h) est utilisé.
Pour l'écriture d'une donnée de ce type, le code fonction 6 (06h) est utilisé.
Pour l'écriture de plusieurs données consécutives, le code fonction 16 (10h) est utilisé.
Ce type de données est note de différentes façons:
%MW1, 40001, 400001..,
Pour ma part, la notation devrait être 4x0000 (jusqu'à 4xFFFF).

Il y a souvent une confusion entre la notation (qui est virtuelle) et l'adresse.
Le fait d'utiliser l'adresse en hexadécimal, permet de s'affranchir des différentes notations comme décrit plus haut.
En effet, pour de petites application, il n'y aura pas de problème, la valeur décimale de l'adresse n'est pas supérieur a 9999.
Mais quand on passe a des bases de données plus importantes, c'est le foutoir

49999 est par exemple le 10000eme mot de type 4, qu'en est il si le 10001eme mot doit être utilisé ? En général, cela est note 410000 (mais on change d'échelle, ce n'est pas pratique), il est souvent e rit 50000 (mais ce n'est pas très logique, le type est 4, pas 5).
Certains le notent aussi 4x9999, puis 4x10000...
En notant en hexadécimal, on peut s'utiliser l'ensemble des adresses disponibles et la notation est plus lisible.
Le 10000eme mot est 4x2710, le suivant sera 4x2711... La conversion est aisée avec la calculatrice Windows, ou dans l'automate lui-même.

J'espère que ce laïus ne t'a pas trop saoulé ou perdu...

Bonne soirée,
--
Commissaire Bialès : Parlez-moi de vous plutôt…
Odile Deray : Odile. Moi, c'est Odile. Pluto, c'est l'ami de Mickey.
Commissaire Bialès : Ah non, Pluto c'est le chien de Mickey. L'ami de Mickey c'est Dingo.
La cité de la peur
MiGaNuTs
Dieu du process
Dieu du process
Messages : 981
Inscription : 12 nov. 2015, 21:02
Localisation : 45 - Loiret
Contact :

Re: MODBUS les variables

Message par MiGaNuTs »

jpratpsft a écrit : 13 févr. 2020, 21:44 Bonsoir Fredo,

Bienvenue dans le monde merveilleux de l'automatisme et de la communication industrielle...
Tu l'as presque...

Coils = sorties TOR équivalent à une bobine dans un schéma à relais.
Le type de données Modbus est 0.
On le note souvent 0x, ce qui facilite l'adressage.
Les données de type 0x sont disponibles en lecture et en écriture.
Pour la lecture, le code fonction 1 (01 en hexadécimal) est utilisé.
Pour l'écriture d'une donnée de ce type, le code fonction 5 (05h) est utilisé.
Pour l'écriture de plusieurs données consécutives, le code fonction 15 (0Fh) est utilisé.
Ce type de données est note de différentes façons:
%M1, 00001, 000001 (pour la première variable)...
Pour ma part, et d'après mon interprétation du standard, la notation devrait être 0x0000 (jusqu'à 0xFFFF), en hexadécimal donc.

Input Status = entrées TOR équivalent à un contact dans un schéma à relais.
Le type de données Modbus est 1.
On le note souvent 1x, ce qui facilite l'adressage.
Les données de type 1x sont disponibles en lecture seulement.
Pour la lecture, le code fonction 2 (02h) est utilisé.
Ce type de données est note de différentes façons:
%i1, 10001, 100001..,
Pour ma part, la notation devrait être 1x0000 (jusqu'à 1xFFFF).

Input Registers = entrées numériques équivalent a un registre (d'où le nom), ou une valeur non binaire (un mot de 16 bites).
A l'époque le choix n'étais pas comme de nos jours...
Le type de données Modbus est 3.
On le note souvent 3x, ce qui facilite l'adressage.
Les données de type 3x sont disponibles en lecture seulement.
Pour la lecture, le code fonction 4 (04h) est utilisé.
Ce type de données est note de différentes façons:
%IW1, 30001, 300001..,
Pour ma part, la notation devrait être 3x0000 (jusqu'à 3xFFFF).

Holding Registers = sorties numériques équivalent a un registre (d'où le nom), ou une valeur non binaire (un mot de 16 bits).
Le type de données Modbus est 4.
On le note souvent 4x, ce qui facilite l'adressage.
Les données de type 4x sont disponibles en lecture et en écriture
Pour la lecture, le code fonction 3 (03h) est utilisé.
Pour l'écriture d'une donnée de ce type, le code fonction 6 (06h) est utilisé.
Pour l'écriture de plusieurs données consécutives, le code fonction 16 (10h) est utilisé.
Ce type de données est note de différentes façons:
%MW1, 40001, 400001..,
Pour ma part, la notation devrait être 4x0000 (jusqu'à 4xFFFF).

Il y a souvent une confusion entre la notation (qui est virtuelle) et l'adresse.
Le fait d'utiliser l'adresse en hexadécimal, permet de s'affranchir des différentes notations comme décrit plus haut.
En effet, pour de petites application, il n'y aura pas de problème, la valeur décimale de l'adresse n'est pas supérieur a 9999.
Mais quand on passe a des bases de données plus importantes, c'est le foutoir

49999 est par exemple le 10000eme mot de type 4, qu'en est il si le 10001eme mot doit être utilisé ? En général, cela est note 410000 (mais on change d'échelle, ce n'est pas pratique), il est souvent e rit 50000 (mais ce n'est pas très logique, le type est 4, pas 5).
Certains le notent aussi 4x9999, puis 4x10000...
En notant en hexadécimal, on peut s'utiliser l'ensemble des adresses disponibles et la notation est plus lisible.
Le 10000eme mot est 4x2710, le suivant sera 4x2711... La conversion est aisée avec la calculatrice Windows, ou dans l'automate lui-même.

J'espère que ce laïus ne t'a pas trop saoulé ou perdu...

Bonne soirée,

Pas mieux !
très bon résumé.
Avatar de l’utilisateur
maxpeigne
Créateur de langage
Créateur de langage
Messages : 713
Inscription : 11 oct. 2015, 17:31
Localisation : Nord pas de calais

Re: MODBUS les variables

Message par maxpeigne »

Ca n'a jamais été aussi bien expliqué!
http://automacile.fr - Site et tutoriels sur l'arduino.
Fredo
Asservi son premier moteur
Asservi son premier moteur
Messages : 23
Inscription : 18 août 2019, 11:18

Re: MODBUS les variables

Message par Fredo »

Bonjour à tous ,

Désolée de la réponse tardive

Effectivement l’automatisme est un monde merveilleux j’aurais dû m’y mettre depuis longtemps :) mais je l’ai découvert au travers de mon métier de metteur au point frigoriste comme nous avons beaucoup de régulation GTC/GTB et certaine machine qui fonctionne avec du Siemens etc ..
Très bonne explication rien a dire 👍 au top par contre une chose les trame envoyé sont bien en hexadécimal pourquoi et non retransmise en binaire ?

Cordialement
jpratpsft
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 124
Inscription : 24 nov. 2015, 11:10
Localisation : Blagnac
Contact :

Re: MODBUS les variables

Message par jpratpsft »

Salut,

En fait, hexadécimal ou binaire, c'est pareil, c'est une question de point de vue...
0h = 0000
1h = 0001
2h = 0010
...
Eh = 1110
Fh = 1111

Sur le fil, dans tous les cas, c'est des bits... 11 bits par caractère, dont bit(s) de start, de stop et de parité.
Sur du 8 bit de données, on peut mettre 2 caractères hexadécimaux, c'est plus simple a voir que de simples bits mis bout a bout :
0101 1011 0111 1000 = 5B 78

J'espère que ça répond à ta question.

@+
--
Commissaire Bialès : Parlez-moi de vous plutôt…
Odile Deray : Odile. Moi, c'est Odile. Pluto, c'est l'ami de Mickey.
Commissaire Bialès : Ah non, Pluto c'est le chien de Mickey. L'ami de Mickey c'est Dingo.
La cité de la peur
MiGaNuTs
Dieu du process
Dieu du process
Messages : 981
Inscription : 12 nov. 2015, 21:02
Localisation : 45 - Loiret
Contact :

Re: MODBUS les variables

Message par MiGaNuTs »

Ça dépends ce que tu appelle hexa et binaire.
En modbus RTU (sur liaison RS485) tu a un mode modbus 'normal' ou les trames sont envoyées directement (en binaire donc, que tu peut ensuite visualiser en hexa)
et le mode "modbus ascii" ou les codes binaires sont converties en ascii avant d’être envoyés, ce qui fait que si tu scan la trame en mode caractère, effectivement tu voit des codes hexa, alors que si tu la scan en 'direct", il faut faire la conversion a l'envers pour retrouver leur contenu.

(Pas sur que mon explication soit très claire :D )
Avatar de l’utilisateur
Bernardo59
Dieu du process
Dieu du process
Messages : 957
Inscription : 20 oct. 2015, 05:48
Localisation : Nimes

Re: MODBUS les variables

Message par Bernardo59 »

Merci jpratpsft pour ses explications ! :)
Répondre