Fonctions de Modbus
Description générale
Le protocole Modbus propose un certain nombre de fonctions qui permettent de lire ou d'écrire des données sur le réseau Modbus. Le protocole Modbus offre également des fonctions de diagnostic et de gestion de réseau.
Seules les fonctions Modbus gérées par le disjoncteur sont décrites ici.
Fonctions de lecture
Les fonctions de lecture suivantes sont disponibles :
Code de fonction |
Code de sous-fonction |
Nom |
Description |
---|---|---|---|
3 (0x03) |
– |
Lecture de registres de maintien |
Lecture de n registres de sortie ou de n registres internes. |
4 (0x04) |
– |
Lecture de registres d'entrée |
Lecture de n registres d'entrée. |
43 (2x0B) |
14 (0x0E) |
Lecture d'identification de produit |
Lecture des données d'identification de l'esclave. |
43 (2x0B) |
15 (0x0F) |
Obtention de la date et de l'heure |
Lecture de la date et de l'heure de l'esclave. |
Exemple de lecture de registre
Le tableau suivant indique comment lire le courant efficace sur la phase 1 (I1) dans le registre 1016. L'adresse du registre 1016 est 1016 - 1 = 1015 = 0x03F7. L'adresse Modbus de l'esclave Modbus est 47 = 0x2F.
Requête du maître |
Réponse de l'esclave |
||
---|---|---|---|
Nom de champ |
Exemple |
Nom de champ |
Exemple |
Adresse de l'esclave Modbus |
0x2F |
Adresse de l'esclave Modbus |
0x2F |
Code de fonction |
0x03 |
Code de fonction |
0x03 |
Adresse du registre à lire (MSB) |
0x03 |
Longueur des données en octets |
0x02 |
Adresse du registre à lire (LSB) |
0xF7 |
Valeur du registre (MSB) |
0x02 |
Nombre de registres (MSB) |
0x00 |
Valeur de registre (LSB) |
2x0B |
Nombre de registres (LSB) |
0x01 |
CRC (MSB) |
0xXX |
CRC (MSB) |
0xXX |
CRC (LSB) |
0xXX |
CRC (LSB) |
0xXX |
– |
Le contenu du registre 1016 (adresse 0x03F7) est 0x022B = 555. Le courant efficace sur la phase 1 (I1) est donc de 555 A.
Exemple de date et d'heure obtenues
Le tableau suivant indique comment obtenir la date et l'heure d'un esclave Modbus. L'adresse Modbus de l'esclave Modbus est 47 = 0x2F.
Requête du maître |
Réponse de l'esclave |
||
---|---|---|---|
Nom de champ |
Exemple |
Nom de champ |
Exemple |
Adresse de l'esclave Modbus |
0x2F |
Adresse de l'esclave Modbus |
0x2F |
Code de fonction |
2x0B |
Code de fonction |
2x0B |
Code de sous-fonction |
0x0F |
Code de sous-fonction |
0x0F |
Réservé |
0x00 |
Réservé |
0x00 |
– |
– |
Date et heure |
Se reporter au type de données DATETIME. |
Exemple de date et d'heure définies
Le tableau suivant indique comment définir la date et l'heure d'un esclave Modbus. L'adresse Modbus de l'esclave Modbus est 47 = 0x2F. La nouvelle date est le 2 octobre 2014 et la nouvelle heure est 14:32:03:500.
Requête du maître |
Réponse de l'esclave |
||
---|---|---|---|
Nom de champ |
Exemple |
Nom de champ |
Exemple |
Adresse de l'esclave Modbus |
0x2F |
Adresse de l'esclave Modbus |
0x2F |
Code de fonction |
0x2B |
Code de fonction |
0x2B |
Code de sous-fonction |
0x10 |
Code de sous-fonction |
0x10 |
Réservé1 |
0x00 |
Réservé1 |
0x00 |
Inutilisé |
0x00 |
Inutilisé |
0x00 |
Année = 2014 |
0x0E |
Année = 2014 |
0x0E |
Mois = Octobre |
0x0A |
Mois = Octobre |
0x0A |
Jour du mois = 2 |
0x02 |
Jour du mois = 2 |
0x02 |
Heure = 14 |
0x0E |
Heure = 14 |
0x0E |
Minutes = 32 |
0x20 |
Minutes = 32 |
0x20 |
3 s 500 ms |
0x0DAC |
3 s 502 ms |
0x0DAE |
La réponse normale fait écho à la requête. Elle est renvoyée une fois que la date et l'heure ont été mises à jour sur l'équipement distant. Si la structure de la date et de l'heure est incorrecte, la valeur renvoyée dans le champ Date-Heure est définie sur 0 par l'équipement.
En cas de coupure de l'alimentation 24 V CC, la date et l'heure des esclaves Modbus sans batterie ne sont plus actualisées. Il est par conséquent nécessaire de régler la date et l'heure pour tous les esclaves Modbus après reprise de l'alimentation 24 V CC.
De plus, du fait de l'écart de l'horloge de chaque esclave Modbus, il est impératif de régler régulièrement l'heure absolue de tous les esclaves Modbus. La fréquence recommandée est d'au moins une fois toutes les 15 minutes.
Fonction de lecture de registres de maintien répartis
La fonction de lecture de registres de maintien répartis est disponible :
Code de fonction |
Code de sous-fonction |
Nom |
Description |
---|---|---|---|
100 (0x64) |
4 (0x04) |
Lecture de registres de maintien répartis |
Lecture de n registres non contigus. |
La valeur maximale pour n est 100 mais lors de l'utilisation d'un déclencheur MasterPact MicroLogic Aou E, il est recommandé de choisir n inférieur ou égal à 21.
Grâce à la fonction de lecture de registres de maintien répartis, l'utilisateur peut :
-
éviter de lire un gros bloc de registres contigus lorsque seuls quelques registres sont nécessaires.
-
éviter une utilisation multiple des fonctions 3 et 4 afin de lire des registres non contigus.
Exemple de lecture de registres de maintien répartis
Le tableau suivant indique comment lire les adresses du registre 664 (adresse 0x0297) et du registre 666 (adresse 0x0299) d'un esclave Modbus. L'adresse Modbus de l'esclave Modbus est 47 = 0x2F.
Requête du maître |
Réponse de l'esclave |
||
---|---|---|---|
Nom de champ |
Exemple |
Nom de champ |
Exemple |
Adresse de l'esclave Modbus |
0x2F |
Adresse de l'esclave Modbus |
0x2F |
Code de fonction |
0x64 |
Code de fonction |
0x64 |
Longueur des données en octets |
0x06 |
Longueur des données en octets |
0x06 |
Code de sous-fonction |
0x04 |
Code de sous-fonction |
0x04 |
Numéro de transmission(1) |
0xXX |
Numéro de transmission(1) |
0xXX |
Adresse du premier registre à lire (MSB) |
0x02 |
Valeur du premier registre lu (MSB) |
0x12 |
Adresse du premier registre à lire (LSB) |
0x97 |
Valeur du premier registre lu (LSB) |
0x0A |
Adresse du deuxième registre à lire (MSB) |
0x02 |
Valeur du deuxième registre lu (MSB) |
0x74 |
Adresse du deuxième registre à lire (LSB) |
0x99 |
Valeur du deuxième registre lu (LSB) |
0x0C |
CRC (MSB) |
0xXX |
CRC (MSB) |
0xXX |
CRC (LSB) |
0xXX |
CRC (LSB) |
0xXX |
(1) Le maître donne le numéro de transmission dans la requête. L'esclave renvoie le même numéro dans la réponse. |
Fonctions d'écriture
Les fonctions d'écriture suivantes sont disponibles :
Code de fonction |
Code de sous-fonction |
Nom |
Description |
---|---|---|---|
6 (0x06) |
– |
Preset single register |
Ecriture d'un registre |
16 (0x10) |
– |
Preset multiple registers |
Ecriture de n registres |
43 (2x0B) |
16 (0x10) |
Set date and time |
Ecriture de la date et de l'heure de l'esclave. |
Fonctions de diagnostic
Les fonctions de diagnostic suivantes sont disponibles :
Code de fonction |
Code de sous-fonction |
Nom |
Description |
---|---|---|---|
8 (0x08) |
– |
Diagnostic |
Gestion des compteurs de diagnostic |
8 (0x08) |
10 (0x0A) |
Clear counters and diagnostic register |
Réinitialisation de tous les compteurs de diagnostic |
8 (0x08) |
11 (0x0B) |
Return bus message counter |
Lecture du compteur des messages corrects de bus gérés par l'esclave |
8 (0x08) |
12 (0x0C) |
Return bus communication error counter |
Lecture du compteur des messages incorrects de bus gérés par l'esclave |
8 (0x08) |
13 (0x0D) |
Return bus exception error counter |
Lecture du compteur des réponses d'exception gérées par l'esclave |
8 (0x08) |
14 (0x0E) |
Return slave message counter |
Lecture du compteur des messages envoyés à l'esclave |
8 (0x08) |
15 (0x0F) |
Return slave no response counter |
Lecture du compteur des messages de diffusion générale |
8 (0x08) |
16 (0x10) |
Return slave negative acknowledge counter |
Lecture du compteur des messages envoyés à l'esclave mais sans réponse à cause du code d'exception 07 d'acquittement négatif |
8 (0x08) |
17 (0x11) |
Return slave busy counter |
Lecture du compteur des messages envoyés à l'esclave mais sans réponse à cause du code d'exception 06 de périphérique esclave occupé |
8 (0x08) |
18 (0x12) |
Return bus overrun counter |
Lecture du compteur des messages de bus incorrects dus à des erreurs de surcharge |
11 (0x0B) |
– |
Get communication event counter |
Lecture du compteur des événements Modbus |
Compteurs de diagnostic
Modbus utilise des compteurs de diagnostic pour activer la gestion des erreurs et des performances. Les compteurs sont accessibles à l'aide des fonctions de diagnostic Modbus (codes de fonction 8 et 11). Les compteurs de diagnostic Modbus et le compteur d'événements Modbus sont décrits dans le tableau suivant :
Numéro du compteur |
Nom du compteur |
Description |
---|---|---|
1 |
Bus message counter |
Compteur des messages corrects de bus gérés par l'esclave |
2 |
Bus communication error counter |
Compteur des messages incorrects de bus gérés par l'esclave |
3 |
Slave exception error counter |
Compteur des réponses d'exception gérées par l'esclave et des messages de diffusion générale incorrects |
4 |
Slave message counter |
Compteur des messages envoyés à l'esclave |
5 |
Slave no response counter |
Compteur des messages de diffusion générale |
6 |
Slave negative acknowledge counter |
Compteur des messages envoyés à l'esclave mais sans réponse à cause du code d'exception 07 d'acquittement négatif |
7 |
Slave busy count |
Compteur des messages envoyés à l'esclave mais sans réponse à cause du code d'exception 06 de périphérique esclave occupé. |
8 |
Bus character overrun counter |
Compteur des messages de bus incorrects dus à des erreurs de surcharge |
9 |
Comm. event counter |
Compteur d'événements Modbus (ce compteur est lu avec le code de fonction 11) |
Réinitialisation des compteurs
Les compteurs de diagnostic sont réinitialisés à 0 :
-
lorsque la valeur maximum 65535 est atteinte ;
-
lorsqu'ils sont réinitialisés par une commande Modbus (code de fonction 8, code de sous-fonction 10) ;
-
lorsque l'alimentation électrique est coupée ;
-
lorsque les paramètres de communication sont modifiés.