# 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,
joint 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,
débit, 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 | Défaut |
| --- | --- | --- |
| **Nom** | Le nom courant 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 en ce moment (avec un **Actualiser** pour la connexion à 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 les 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, les parités marque/espace et 1,5 bit d'arrêt ne sont pas pris en charge. | `8E1` |
| **Délai de réponse (ms)** | L'attente la plus longue pour la réponse d'une unité, de 100 à 60 000. Un délai plus long s'accommode d'un matériel lent, mais rend les unités absentes, et la découverte, plus lentes à identifier. | 1000 |
| **Intervalle minimal entre transactions (ms)** | Un cadencement de compatibilité pour toute la ligne, de 0 à 1000. Zéro conserve le seul silence automatique du protocole ; une valeur positive peut l'élever, 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'applique toujours :
à 19 200 bauds ou en dessous, le silence automatique vaut 3,5 temps caractère calculés
depuis le 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
affiche les deux valeurs. Élever 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 être configurés d'abord.
Chaque port physique appartient à une ligne au plus, comparé sans tenir compte de la casse et
même quand les lignes sont désactivées. Le nom et l'intervalle entre transactions restent
modifiables tant que la ligne tourne (une modification de temporisation prend effet sans faire cycler le
port) ; le port, le débit, le format et le délai de réponse sont verrouillés tant que la ligne est
activée : désactivez-la et enregistrez d'abord. Désactiver une ligne arrête les communications pour tous
ses équipements sans changer leurs choix Activé individuels.

La ligne rapporte 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 | Défaut |
| --- | --- | --- |
| **Ligne série** | Fixe : un équipement est créé sous sa ligne et hérite du tuple physique, affiché 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 interne du runtime 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 courant.

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

Le pilote ouvre **une session série par ligne** et sérialise chaque requête
de chaque équipement à travers 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 rapidement, mais une écriture soutenue ne peut pas affamer la scrutation. Les délais
dépassés de chaque unité sont isolés avec un retrait progressif, si bien qu'un équipement muet ne ralentit
que lui-même. Une exception Modbus au CRC valide est une erreur par requête sur ce tag :
la ligne reste saine. Seul un défaut d'entrée-sortie physique (le port qui disparaît, l'adaptateur
débranché) invalide la session partagée et lance une réouverture coordonnée pour toute la ligne.
Le dernier équipement libéré ferme le port.

## Adressage des tags {#tag-addressing}

L'adressage des tags 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)** déduite du type (Boolean, Int16 et UInt16
1 registre, Int32 et Float 2, String 4 ; la zone n'est dessinée que sur les tags String,
parce que toutes les autres largeurs sont fixes), et les deux cases 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 (Boolean, Int16, UInt16, Int32, Float et String) :
Int16 et UInt16 lisent un seul registre de 16 bits, signé ou non, et seul l'ordre des octets
s'y applique (la case de l'ordre des mots n'y est pas dessinée). Les codes de fonction de lecture et d'écriture ainsi que 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'ID d'unité sur une ligne existante et vit dans le volet de cette
ligne :

| Champ | Sens | Défaut |
| --- | --- | --- |
| **ID d'unité de début** | Le premier ID d'unité à sonder, de 1 à 247. | 1 |
| **ID d'unité de fin** | Le dernier ID 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 juste prouve qu'une unité est présente, une trame dont le LRC est faux 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 registres. Une
exception Modbus au CRC valide prouve qu'une unité est présente sans prétendre à son identité ; un
délai dépassé ou une trame non valide, non.

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. L'annulation ferme la session
série et laisse les résultats déjà affichés en candidats passagers
jusqu'à ce que vous les ajoutiez explicitement. Un ID 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 de la ligne partagent une réservation par port physique qui échoue
tout de suite, si bien qu'un balayage et un changement de réglages ne peuvent pas se disputer le port : le
perdant apprend quelle opération le retient.

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

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