irrigation_system/docs/modbus-registers.fr.md

6.6 KiB

🇩🇪 Deutsch | 🇬🇧 English | 🇫🇷 Français | 🇪🇸 Español

Définition de la carte des registres MODBUS v1.0

1. Introduction

Ce document définit les registres MODBUS pour les nœuds esclaves universels du système d'irrigation.

1.1. Philosophie d'adressage

Tous les registres sont définis dans une seule liste continue par type de registre (Input ou Holding). Une colonne "Catégorie" attribue logiquement la fonction. Les adresses sont regroupées en blocs pour laisser de la place à de futures extensions et pour améliorer la lisibilité.

  • 0x0000 - 0x000F : Commande et état de la vanne
  • 0x0010 - 0x001F : Sorties numériques (LEDs / relais)
  • 0x0020 - 0x002F : Entrées numériques (boutons / capteurs)
  • 0x00F0 - 0x00FF : Configuration et état général de l'appareil
  • 0x0100 - 0x01FF : Mécanisme de mise à jour du firmware

1.2. Codes de fonction utilisés

  • 0x03 (Read Holding Registers) : Pour lire les registres 4xxxx.
  • 0x04 (Read Input Registers) : Pour lire les registres 3xxxx.
  • 0x06 (Write Single Register) : Pour écrire un seul registre 4xxxx.
  • 0x10 (Write Multiple Registers) : Pour écrire plusieurs registres 4xxxx à la fois.

2. Registres d'entrée (3xxxx, Lecture seule)

Adresse (hex) Nom Catégorie Description
0x0000 VALVE_STATE_MOVEMENT Vanne Registre d'état combiné. Octet haut : Mouvement (0=Inactif, 1=Ouverture, 2=Fermeture, 3=Erreur). Octet bas : État (0=Fermé, 1=Ouvert).
0x0001 MOTOR_CURRENT_MA Vanne Courant moteur actuel en milliampères (mA).
0x0020 DIGITAL_INPUTS_STATE Entrées Masque de bits des entrées numériques. Bit 0 : Entrée 1, Bit 1 : Entrée 2. 1=Actif.
0x0021 BUTTON_EVENTS Entrées Indicateurs d'événements pour les boutons (Effacement à la lecture). Bit 0 : Bouton 1 pressé. Bit 1 : Bouton 2 pressé.
0x00F0 FIRMWARE_VERSION_MAJOR_MINOR Système ex. 0x0102 pour v1.2.
0x00F1 FIRMWARE_VERSION_PATCH Système ex. 3 pour v1.2.3.
0x00F2 DEVICE_STATUS Système 0=OK, 1=Erreur générale.
0x00F3 UPTIME_SECONDS_LOW Système 16 bits inférieurs du temps de fonctionnement en secondes.
0x00F4 UPTIME_SECONDS_HIGH Système 16 bits supérieurs du temps de fonctionnement.
0x0100 FWU_LAST_CHUNK_CRC Mise à jour FW Contient le CRC16 du dernier bloc de données reçu dans le tampon.

3. Registres de maintien (4xxxx, Lecture/Écriture)

Adresse (hex) Nom Catégorie Description
0x0000 VALVE_COMMAND Vanne 1=Ouvrir, 2=Fermer, 0=Arrêter le mouvement.
0x0001 MAX_OPENING_TIME_S Vanne Temporisation de sécurité en secondes pour le processus d'ouverture.
0x0002 MAX_CLOSING_TIME_S Vanne Temporisation de sécurité en secondes pour le processus de fermeture.
0x0010 DIGITAL_OUTPUTS_STATE Sorties Masque de bits pour lire et écrire les sorties. Bit 0 : Sortie 1, Bit 1 : Sortie 2. 1=ON, 0=OFF.
0x00F0 WATCHDOG_TIMEOUT_S Système Temporisation du watchdog de sécurité en secondes. 0=Désactivé.
0x0100 FWU_COMMAND Mise à jour FW 1 : Vérifier le bloc : Le dernier bloc transmis a été jugé valide par le client. L'esclave doit maintenant l'écrire en flash. 2 : Finaliser la mise à jour : Tous les blocs ont été transmis. Finaliser l'installation et redémarrer.
0x0101 FWU_CHUNK_OFFSET_LOW Mise à jour FW 16 bits inférieurs de l'offset 32 bits où le prochain bloc doit être écrit.
0x0102 FWU_CHUNK_OFFSET_HIGH Mise à jour FW 16 bits supérieurs de l'offset 32 bits.
0x0103 FWU_CHUNK_SIZE Mise à jour FW Taille du prochain bloc en octets (max. 256).
0x0180 FWU_DATA_BUFFER Mise à jour FW Adresse de début d'un tampon de 128x16 bits (256 octets). Correspond aux registres 40384 à 40511.

4. Processus détaillé de mise à jour du firmware

Ce processus est sans état et robuste aux erreurs de transmission.

  1. Client : Sélectionne un bloc (max. 256 octets) dans le fichier de firmware et calcule son CRC16.
  2. Client : Écrit l'offset cible (par ex. 0) dans FWU_CHUNK_OFFSET_... et la taille dans FWU_CHUNK_SIZE.
  3. Client : Écrit les données du bloc dans le FWU_DATA_BUFFER (à partir de l'adresse 0x0180).
  4. Esclave : Reçoit les données, les place dans le tampon RAM et calcule le CRC. Le résultat est fourni dans FWU_LAST_CHUNK_CRC (30256).
  5. Client : Lit FWU_LAST_CHUNK_CRC et compare la valeur avec le CRC auto-calculé.
    • Erreur : Retourner à l'étape 3 pour renvoyer le même bloc.
    • Succès : Continue à l'étape suivante.
  6. Client : Écrit la commande 1 ("Vérifier le bloc") dans FWU_COMMAND (40256).
  7. Esclave : Reçoit la commande, prend le bloc vérifié du tampon RAM et l'écrit à l'emplacement correct dans la mémoire flash.
  8. Client : Continue avec le bloc suivant (retour à l'étape 1 avec un nouvel offset et de nouvelles données).
  9. Dernier bloc : Après que le dernier bloc a été transféré et écrit en flash avec la commande 1, le client écrit la commande 2 ("Finaliser la mise à jour") dans FWU_COMMAND.
  10. Esclave : Effectue les vérifications finales et redémarre pour que MCUBoot puisse effectuer l'installation.

Annexe : Registres du capteur de niveau QDY30A

Ces registres appartiennent au capteur de niveau externe et peuvent également être adressés sur le bus. Selon le fabricant, il s'agit de registres de maintien (4xxxx) qui sont lus avec le code de fonction 0x03.

Adresse (hex) Nom L/E Description
0x0000 NODE_ADDRESS L/E Adresse de l'appareil du capteur (1-255).
0x0001 BAUDRATE L/E 0=1200, 1=2400, 2=4800, 3=9600, 4=19200, 5=38400, 6=57600, 7=115200.
0x0002 UNIT L/E 0=Aucun, 1=cm, 2=mm, 3=MPa, 4=Pa, 5=kPa.
0x0003 DECIMAL_PLACES L/E Nombre de décimales pour la valeur mesurée (0-3).
0x0004 CURRENT_MEASUREMENT L La valeur mesurée mise à l'échelle sous forme d'entier signé de 16 bits.
0x0005 MEASURING_RANGE_ZERO_POINT L/E Valeur brute pour le point zéro de l'échelle.
0x0006 MEASURING_RANGE_END_POINT L/E Valeur brute pour le point final de l'échelle.