# Modbus RTU

> Modbus sur un bus série, avec la ligne physique modélisée explicitement et partagée par ses équipements adressés par unité.

Le pilote Modbus RTU parle à des équipements Modbus sur un bus série, RS-485 ou RS-232,
atteint par un port COM physique, un adaptateur USB ou un port virtuel ou redirigé.
Comme le bus est physiquement partagé, la topologie est
**Pilote → Ligne → Équipement → Tag** : la **ligne** possède tout ce qui est électrique (port,
vitesse, format, temporisation), et chaque **équipement** qui s'y trouve ne possède que son
adresse d'unité, sa scrutation et ses tags.

## Ligne série {#serial-line}

| Champ | Sens | Par défaut |
| --- | --- | --- |
| **Nom** | Le nom convivial du bus. Modifiable à tout moment. | obligatoire |
| **Port série** | Le port du système d'exploitation, par exemple `COM3`. Le champ est en texte libre (les ports physiques, virtuels et redirigés fonctionnent tous) et la flèche à côté propose les ports que Windows détecte à cet instant (avec un **Actualiser** pour le branchement à chaud d'un adaptateur); la liste détectée est une commodité, jamais une liste blanche. | `COM1` |
| **Débit (bauds)** | Le débit binaire partagé par chaque équipement du bus. | 9600 |
| **Mode de transmission** | Comment chaque équipement du bus forme ses messages : **RTU**, des trames binaires contrôlées par un CRC, ou **ASCII**, des trames écrites en texte d'un deux-points à un saut de ligne et contrôlées par un LRC, que parlent les équipements anciens. Un bus parle un seul mode, qui appartient donc à la ligne. | RTU |
| **Format série** | Un choix fermé entre `8N1`, `8N2`, `8E1`, `8E2`, `8O1`, `8O2`, et sur une ligne ASCII aussi `7N2`, `7E1`, `7E2`, `7O1` : le chiffre est le nombre de bits de données, la lettre la parité (`N` aucune, `E` paire, `O` impaire), le dernier chiffre le nombre de bits d'arrêt. Une trame RTU demande 8 bits de données : une ligne RTU ne propose donc que les formats à 8 bits, et un format à 7 bits resté d'une ligne ASCII s'affiche vide et est refusé tant qu'un autre n'est pas choisi. Les autres largeurs, la parité marque et espace et les 1,5 bit d'arrêt ne sont pas pris en charge. | `8E1` |
| **Délai de réponse (ms)** | La plus longue attente de la réponse d'une unité, de 100 à 60 000. Un délai plus long accommode un équipement lent mais rend une unité absente, et la découverte, plus lentes à identifier. | 1000 |
| **Intervalle minimal entre transactions (ms)** | Une cadence de compatibilité pour toute la ligne, de 0 à 1000. Zéro ne garde que le silence automatique du protocole; une valeur positive peut le relever, jamais le réduire. | 0 |

Sur une ligne ASCII, le silence décrit ci-dessous ne s'applique pas : une trame ASCII se termine à son saut de ligne, le silence automatique affiche donc 0 ms et l'**Intervalle minimal entre transactions (ms)** est la seule pause entre les trames, comme le dit la carte en dessous : « Les trames ASCII se terminent par un saut de ligne, la ligne n'ajoute donc aucun silence propre : cet intervalle est la seule pause entre les trames. » Le mode de transmission est un réglage physique, verrouillé avec le port, le débit, le format et le délai de réponse tant que la ligne est activée; l'adresse d'exécution d'un équipement sur une ligne ASCII se termine par `/ascii`.

Le protocole lui-même exige un silence entre les trames, et la ligne l'impose toujours : à
19 200 bauds ou en dessous, le silence automatique vaut 3,5 temps de caractère calculés à partir
du format configuré; au-dessus de 19 200 bauds, c'est le 1,75 ms fixe que la spécification
recommande. Le silence effectif est le **plus grand** de ce plancher automatique et de
l'intervalle configuré, jamais leur somme, et le volet montre les deux valeurs. Relever
l'intervalle ralentit délibérément chaque unité de la ligne; c'est une aide à la compatibilité,
pas une réparation du câblage, de la terminaison, de la mise à la terre ou du bruit.

Une nouvelle ligne démarre **désactivée** pour que ses réglages physiques puissent se configurer
d'abord. Chaque port physique appartient à une ligne au plus, comparé sans tenir compte de la
casse et même pendant que les lignes sont désactivées. Le nom et l'intervalle entre transactions
restent modifiables pendant que la ligne fonctionne (une modification de temporisation prend
effet sans refermer le port); le port, la vitesse, le format et le délai de réponse sont
verrouillés pendant que la ligne est activée : désactivez-la et enregistrez d'abord. Désactiver
une ligne arrête la communication pour tous ses équipements sans changer leur choix Activé
individuel.

La ligne signale le transport physique séparément de ses équipements : **Arrêt**,
**Au repos** (aucun équipement activé), **Connexion**, **En ligne**, ou **Défaut de port**
avec un diagnostic. Supprimer une ligne vide ne retire que la ligne; en supprimer une qui
contient des équipements demande une confirmation explicite et supprime aussi ces équipements et
leurs tags.

## Équipement {#device}

| Champ | Sens | Par défaut |
| --- | --- | --- |
| **Ligne série** | Fixe : un équipement est créé sous sa ligne et hérite du tuple physique, montré en lecture seule dans le volet. Ajoutez l'équipement sous la ligne voulue. | la ligne sous laquelle il est ajouté |
| **ID d'unité** | L'adresse Modbus de l'équipement sur le bus, de 1 à 247, unique dans la ligne (équipements désactivés compris). | 1 |
| **Intervalle de scrutation (ms)** | La cadence de scrutation par défaut des tags qui ne la remplacent pas. | 1000 |

L'adresse d'exécution interne est
`modbus+rtu://<line-id>/<port>/<baud>/<format>/<timeout>/<unitId>/<interval>` :
elle porte l'identité stable de la ligne et ses réglages physiques complets, jamais son nom
convivial.

## Le comportement d'une ligne partagée {#shared-line-behavior}

Le pilote ouvre **une seule session série par ligne** et sérialise chaque requête de chaque
équipement par un unique répartiteur, si bien que les lectures et les écritures ne se
chevauchent jamais sur le bus. Une écriture en attente prend le prochain tour libre avec une
priorité bornée : les écritures sont servies promptement, mais écrire sans arrêt ne peut pas
affamer la scrutation. Les délais de chaque unité sont isolés avec un recul progressif, si bien
qu'un équipement muet ne ralentit que lui-même. Une exception Modbus au CRC valide est une
erreur de requête sur ce tag : la ligne reste saine. Seule une panne d'entrée-sortie physique
(le port qui disparaît, l'adaptateur débranché) invalide la session partagée et lance une seule
réouverture coordonnée pour toute la ligne. Le dernier équipement à se libérer ferme le port.

## Adressage d'un tag {#tag-addressing}

L'adressage d'un tag est identique à celui de [Modbus TCP](driver-modbus-tcp) : une **Classe de
registre** (Bobine (0xxxx), Entrée discrète (1xxxx), Registre d'entrée (3xxxx), Registre de
maintien (4xxxx), déduite par défaut du type et de l'accès du tag), un **numéro de registre** à partir de 0, une
**Quantité (registres, vide = automatique)** remplie d'office (booléen, Int16 et UInt16
1 registre, Int32 et Float 2, texte 4; la zone n'est dessinée que sur les tags de texte,
parce que toute autre largeur est fixe), et les deux zones d'ordre :
**Octet de poids fort en premier (MSB first, gros-boutiste)** pour l'ordre des octets et **Mot de
poids fort en premier (mot haut en premier)** pour l'ordre des mots (dessinée seulement sur les
types à deux registres, Int32 et Float), toutes deux cochées par défaut. La carte Source de la
valeur se termine par **Adresse dans le manuel**, l'adresse du tag telle que le manuel de
l'équipement l'imprime (le registre d'entrée 0 est 30001). Les types de valeur pris en charge sont les mêmes
six (booléen, Int16, UInt16, Int32, Float et texte) : Int16 et UInt16 lisent un seul
registre de 16 bits, signé ou non, et seul l'ordre des octets s'y applique (la zone de l'ordre des mots n'y est pas dessinée). Les codes de
fonction de lecture et d'écriture et les dispositions sur le bus sont documentés sur la page
[Modbus TCP](driver-modbus-tcp) et s'appliquent ici sans changement.

## Découverte {#discovery}

La découverte sonde une plage d'identifiants d'unité sur une ligne existante et vit dans le
volet de cette ligne :

| Champ | Sens | Par défaut |
| --- | --- | --- |
| **ID d'unité de début** | Le premier identifiant d'unité à sonder, de 1 à 247. | 1 |
| **ID d'unité de fin** | Le dernier identifiant d'unité, croissant depuis le début. | 32 |

Sur une ligne ASCII, le sondage est la même requête dans une trame ASCII et le LRC tient la place du CRC : une exception dont le LRC est valide prouve qu'une unité est présente, une trame dont le LRC est invalide ne prouve rien.

Le balayage recharge les réglages physiques enregistrés de la ligne, ouvre le port une fois, et
sonde la plage **séquentiellement** avec Read Basic Device Identification
(fonction 43/14), en cadençant chaque sondage avec le silence inter-trames effectif de la ligne.
Il n'essaie jamais de combinaisons de réglages et ne lit jamais de registre. Une exception
Modbus au CRC valide prouve qu'une unité est présente sans en revendiquer l'identité; un délai
dépassé ou une trame invalide ne le prouvent pas.

Une ligne en service n'est jamais interrompue ni basculée automatiquement : désactivez-la
avant de balayer, et réactivez-la vous-même ensuite. Annuler ferme la session série et laisse
les résultats déjà montrés comme des candidats passagers, jusqu'à ce que vous les ajoutiez
explicitement. Un identifiant d'unité déjà configuré est marqué comme tel et ouvre l'équipement
existant au lieu de créer un doublon; les résultats ne portent aucun tag : les registres se
configurent après **Ajouter**.

La découverte et la configuration d'une ligne partagent une seule réservation par port physique,
qui échoue tout de suite : un balayage et un changement de réglages ne peuvent donc pas se
disputer le port, et le perdant apprend quelle opération le tient.

## Des limites bonnes à connaître {#limits-worth-knowing}

- Les six types de valeur sont tout le vocabulaire du codec du bus; les autres largeurs
  d'entier et Double ne sont pas offerts.
- Le débit est une propriété du bus : chaque équipement de la ligne partage un unique flux de
  requêtes, cadencé par le silence inter-trames effectif, si bien que beaucoup d'équipements ou
  un intervalle relevé allongent chaque cycle de scrutation.
