Skip to content

Registres Modbus — cahier/DABUS vs INIS-E16 ​

Lecture de bits FC 0x01, écriture de mots FC 0x10. Le cahier des charges décrit l'INIS-E16 sur la table de base AVISS : la DABUS la suit, l'INIS-E16 s'en écarte sur le hors service point et enrichit la table d'échange de quatre tables de zones et de deux informations de synthèse qui lui sont propres.

1. Zone/DI « IHM » ​

INIS-E16 : une zone « IHM » et une ligne « DI IHM » propres à la centrale, en plus des seize zones physiques. DABUS : 128 zones, pas d'IHM.

Ces entités n'occupent pas la tête de toutes les tables — voir §2.1. Là où elles le font, l'adresse de base de la table est la même sur les deux types : sur INIS-E16 elle porte l'entité système, sur DABUS/AVISS la première unité physique.

2. Tables de lecture (FC 0x01) ​

Les adresses ci-dessous sont celles du premier bit de chaque table, telles que le cahier les porte.

TableDABUS/AVISSINIS-E16
Paramètres généraux1 (23 bits)1 (25 bits)
Hors service point1001953
Feu point20012001
Défaut point30013001
Hors service zone40014001
Feu zone50015001
Défaut zone60016001
Essai zone70017001
Évacuation80018001
Émission80218021
DM / extinction80418041
Zones en neutralisation—8061
Zones en mode manuel seul—8081
Zones en arrêt d'urgence—8101
Zones en inhibition—8121

Un écart et une extension :

  • Hors service point : le cahier porte deux valeurs contradictoires — décimal 1001, hexadécimal 0x03B9 = 953. DABUS répond à 1001, INIS-E16 à 953.
  • Tables d'exploitation étendues : neutralisation, mode manuel seul, arrêt d'urgence et inhibition n'existent que sur INIS-E16. Le profil AVISS laisse ces adresses nulles ; aucune région n'est alors lue et les états correspondants restent inactifs.

2.1. Position de tête, table par table ​

L'unité système n'occupe pas la tête de toutes les tables. Le cahier dimensionne les quatre tables de zones de base pour 999 zones — une entrée de tête y trouve sa place — mais les tables d'exploitation pour 16, soit exactement les seize zones physiques de l'INIS-E16. La position de la zone n° 1 se déclare donc par table, sur chaque incident du profil (IncidentDefinition.ZoneBitOffset / PointBitOffset), et non par un drapeau unique de profil. HasIhmZone / HasInisPoint disent seulement que la centrale expose ces entités, non quelles tables leur réservent une place.

L'adresse déclarée au profil est celle de la table, telle que le cahier la donne. L'unité physique n° 1 se trouve à adresse de table + décalage de tête — l'onglet Contrôle de l'éditeur affiche les deux.

TableAdresse de tableTêteZone / point n° 1
HS / feu / défaut / essai zone4001 / 5001 / 6001 / 7001zone IHM4002 / 5002 / 6002 / 7002
Évacuation / émission / DM8001 / 8021 / 8041aucune8001 / 8021 / 8041
Neutralisation / manuel seul / arrêt d'urgence / inhibition8061 / 8081 / 8101 / 8121aucuneidem
HS point953DI IHM954
Feu / défaut point2002 / 3002DI IHM2003 / 3003

Reste à trancher au banc : feu et défaut point. Le scan du 07/07/2026 a relevé 2002 et 3002 sur centrale réelle, sans distinguer la tête de table de la DI 1. L'essai E1 de la campagne de validation JBUS est fait pour cela : un bit levé à l'adresse de table donne le modèle du cahier, un bit levé à l'adresse suivante l'alignement actuel. L'essai E2 couvre de même les quatre tables étendues, dont aucune source documentaire ne donne l'adresse.

Les valeurs qui font foi sont celles de StandardPanelProfiles (dotnet/shared/Profiles/), relevées sur centrales réelles : le cahier décrit l'AVISS, dont l'INIS-E16 s'écarte. Toute confrontation au cahier passe par la campagne de validation JBUS (PLAN-ETATS-EXPLOITATION.md), pas par une réécriture des profils.

3. Écriture des commandes (FC 0x10, registre 500) ​

Trame [code] [table] [cible]. Codes identiques.

CommandeCodeCible DABUS/AVISSCible INIS-E16
Hors service point1nn + 1
En service point2nn + 1
Hors service zone3nn + 1
En service zone4nn + 1
Essai zone5nn + 1
Mode manuel6—n
Silence signaux10——
Réarmement11——

Sur INIS-E16, la cible n + 1 vise la zone/point physique n (cible 1 = IHM). Le mode manuel (6) fait exception : cible directe (n = zone physique n).

La cible 1 — l'entité d'interface — n'est pas offerte pour la mise hors service et la remise en service de zone : mesuré sur centrale réelle, le firmware accepte la trame et n'en fait rien. Les mêmes commandes de ligne agissent en revanche bien sur la ligne DI IHM, et lui restent ouvertes. Ce choix se déclare par commande dans le profil (TargetsSystemEntity) : une centrale d'une autre génération qui répondrait à ces trames se paramètre sans toucher au code. Le serveur refuse la cible lorsque le profil ne la déclare pas — le verrou n'est pas seulement d'affichage.

4. Paramètres généraux (adresse 1) ​

La table compte 23 bits sur DABUS/AVISS, 25 sur INIS-E16.

AdresseInformationDABUS/AVISSINIS-E16
1 à 8Synthèses maître (feu, dérangement, réseau, secteur, batteries, points HS, essai, système)ActivesActives
9 à 16Défaut communication esclave 01 à 08ActivesNon utilisées
17Dérangement liaison (unité de commande)ActiveNon utilisée
18Diffuseur hors service (unité de commande)ActiveNon utilisée
19Veille restreinte (unité de commande)ActiveNon utilisée
20Alarme UGA (unité de commande)ActiveNon utilisée
21Alarme restreinte (unité de commande)ActiveNon utilisée
22Évacuation générale (unité de commande)ActiveNon utilisée
23Défaut communication inter-coffretActiveActive
24Synthèse générale neutralisation—Active
25Synthèse générale mode manuel seul—Active

Les défauts esclaves (9 à 16) et les états d'unité de commande (17 à 22) sont décodés d'après le cahier ; leur position n'est confrontée à aucune centrale AVISS réelle. Le simulateur les injecte bit à bit, ce qui éprouve la chaîne de supervision sans lever ce doute.

Chaque centrale déclare les bits qu'elle sert dans la carte GlobalBits de son profil, qui reprend les colonnes ✔ du tableau ci-dessus : un bit non déclaré n'est ni lu, ni journalisé, ni affiché, et le simulateur ne l'expose pas non plus. Le nombre de bobines lues vient de TestConnectionCount.

Une centrale au firmware antérieur ne sert que les 23 bobines de base et répond « adresse illégale » au-delà. GlobalCoilReader lit de façon optimiste, mémorise la dégradation par centrale et se replie sur la table de base : la centrale reste connectée en mode dégradé, ses états de zone restent fiables, seules les deux synthèses générales deviennent indisponibles — ce qui se distingue d'un état inactif. Une exception esclave ne ferme jamais la connexion : c'est une réponse protocolaire, pas une panne de transport. L'essai E5 de la campagne de validation JBUS porte ce verdict : il lit la table de base puis l'extension, cette dernière étant autorisée à échouer.

5. Identité des états système ​

L'adresse d'un bit n'identifie pas l'état qu'il porte : deux centrales servent le même état à des bits différents, ou ne le servent pas. L'identité est la clé, déclarée une fois dans SystemFlagKeys (dotnet/shared/Profiles/) et reprise de bout en bout :

GlobalBits (clé → bit, par centrale)
  → SystemFlagDefinition (libellé, icône, son, priorité, index d'acquittement)
    → SystemFlagState (état lu d'une centrale)
      → supervision temps réel, indexée par clé

Une définition dépourvue de décalage de bit décrit un état que la centrale ne sert pas : il n'est ni lu, ni journalisé, ni acquittable, ni exposé au frontend. C'est ce qui distingue « indisponible sur ce firmware » de « inactif ». La procédure d'ajout d'un état est décrite dans PLAN-ETATS-EXPLOITATION.md.

Documentation Technique