Fonctions de Modbus
Description générale
Le protocole Modbus propose un certain nombre de fonctions permettant 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 registre 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 de l'identification du produit |
Lecture des données d'identification du serveur |
|
43 (0x2B) |
15 (0x0F) |
Obtention de la date et de l'heure |
Lecture de la date et de l'heure du serveur |
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 du serveur Modbus est 47 = 0x2F.
|
Requête du client |
Réponse du serveur |
||
|---|---|---|---|
|
Nom de champ |
Exemple |
Nom de champ |
Exemple |
|
Adresse du serveur Modbus |
0x2F |
Adresse du serveur 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) |
0x2B |
|
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 555 A.
Exemple d’obtention de date et d'heure
Le tableau suivant indique comment obtenir la date et l'heure d'un serveur Modbus. L'adresse Modbus du serveur Modbus est 47 = 0x2F.
|
Requête du client |
Réponse du serveur |
||
|---|---|---|---|
|
Nom de champ |
Exemple |
Nom de champ |
Exemple |
|
Adresse du serveur Modbus |
0x2F |
Adresse du serveur Modbus |
0x2F |
|
Code de fonction |
0x2B |
Code de fonction |
0x2B |
|
Code de sous-fonction |
0x0F |
Code de sous-fonction |
0x0F |
|
Réservé |
0x00 |
Réservé |
0x00 |
|
– |
– |
Date et heure |
Voir le type de données DATETIME |
Exemple de définition de la date et de l'heure
Le tableau suivant indique comment définir la date et l'heure d'un serveur Modbus. L'adresse Modbus du serveur Modbus est 47 = 0x2F, la nouvelle date est le 2 octobre 2014 et la nouvelle heure est 14:32:03:500.
|
Requête du client |
Réponse du serveur |
||
|---|---|---|---|
|
Nom de champ |
Exemple |
Nom de champ |
Exemple |
|
Adresse du serveur Modbus |
0x2F |
Adresse du serveur 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 d'horodatage n'est pas cohérente avec une date-heure réelle (horodatage invalide), la valeur renvoyée dans le champ Date / Heure est définie sur 0 par l'équipement.
En cas de perte d'alimentation 24 VCC, la date et l'heure des serveurs Modbus sans batterie ne sont plus actualisées. Il est donc obligatoire de régler la date et l'heure de tous les serveurs Modbus après avoir rétabli l'alimentation 24 VCC.
De plus, en raison de l'écart d'horloge de chaque serveur Modbus, il est impératif de régler périodiquementt la date et l'heure de tous les serveurs 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 de n est 100, mais avec un déclencheur MasterPacT MicroLogic A ou E, il est recommandé que n ne dépasse pas 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 serveur Modbus. L'adresse Modbus du serveur Modbus est 47 = 0x2F.
|
Requête du client |
Réponse du serveur |
||
|---|---|---|---|
|
Nom de champ |
Exemple |
Nom de champ |
Exemple |
|
Adresse du serveur Modbus |
0x2F |
Adresse du serveur 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 client indique le numéro de transmission dans la requête. Le serveur 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 (0x2B) |
16 (0x10) |
Set date and time |
Ecrire la date et l'heure du serveur |
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 de messages de bus corrects gérés par le serveur |
|
8 (0x08) |
12 (0x0C) |
Return bus communication error counter |
Lecture du compteur des messages de bus incorrects gérés par le serveur |
|
8 (0x08) |
13 (0x0D) |
Return bus exception error counter |
Lecture du compteur des réponses d'exception gérées par le serveur |
|
8 (0x08) |
14 (0x0E) |
Return server message counter |
Lecture du compteur des messages envoyés au serveur |
|
8 (0x08) |
15 (0x0F) |
Return server no response counter |
Lecture du compteur des messages de diffusion générale |
|
8 (0x08) |
16 (0x10) |
Return server negative acknowledge counter |
Lecture du compteur des messages envoyés au serveur mais restés sans réponse en raison du code d'exception 07 d'acquittement négatif |
|
8 (0x08) |
17 (0x11) |
Return server busy counter |
Lecture du compteur de messages envoyés au serveur mais restés sans réponse en raison du code d'exception 06 d'équipement serveur 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 permettre 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 de bus corrects gérés par le serveur |
|
2 |
Bus communication error counter |
Compteur des messages de bus incorrects gérés par le serveur |
|
3 |
Server exception error counter |
Compteur des réponses d'exception gérées par le serveur et des messages de diffusion générale incorrects |
|
4 |
Server message counter |
Compteur des messages envoyés au serveur |
|
5 |
Server no response counter |
Compteur des messages de diffusion générale |
|
6 |
Server negative acknowledge counter |
Compteur des messages envoyés au serveur mais restés sans réponse à cause du code d'exception 07 d'acquittement négatif |
|
7 |
Server busy count |
Compteur des messages envoyés au serveur mais restés sans réponse en raison du code d'exception 06 d'équipement serveur 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 ;
-
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.