Protocoles et données

BACnet et Modbus pour intégrer un bâtiment

Comparez BACnet et Modbus pour les bâtiments : données, réseaux, découverte, unités, priorités, sécurité et choix d’une passerelle.

Un client BACnet qui lit analog-input 3 sur un contrôleur d’ambiance reçoit 21,5, l’unité degrees-Celsius et quatre indicateurs d’état. Un client Modbus qui lit le registre d’entrée 30012 sur un compteur reçoit 215 et rien d’autre. Ce nombre ne devient 21,5 °C qu’après application de la table de registres du fabricant. Cette différence explique une grande partie du travail nécessaire pour faire partager leurs données aux contrôleurs BACnet et aux compteurs Modbus d’un même site.

Comparaison

BACnetModbus
NormeANSI/ASHRAE 135, également ISO 16484-5Spécifications de la Modbus Organization
Modèle de donnéesObjets tels que analog-input, analog-value, binary-output, multi-state-value, schedule et trend-log, chacun avec des propriétésQuatre tables : bobines, entrées discrètes, registres d’entrée et registres de maintien ; chaque registre contient 16 bits
AdressageInstance d’appareil (0 à 4 194 302), unique dans tout l’interréseau, puis type et instance d’objetAdresse serveur (1 à 247 sur un bus série) ou adresse IP, puis numéro de registre
Signification d’une valeurDans l’objet : nom, unité et indicateurs d’étatDans une table de registres distincte pour chaque modèle
RéseauxBACnet/IP, MS/TP sur RS-485, BACnet/SC et autresModbus TCP ; Modbus RTU sur RS-485, ou RS-232 pour un seul appareil
Port par défautUDP 47808 (0xBAC0)TCP 502
Découverte des appareilsWho-Is et I-AmAucune ; l’adresse de chaque appareil doit être configurée
Réception des changementsInterrogation périodique ou abonnements aux changements de valeur (COV)Interrogation périodique uniquement
Lecture de nombreuses valeursReadPropertyMultiple, si l’appareil le prend en chargeJusqu’à 125 registres contigus par requête de fonction 03 ou 04
CommandesTableau de 16 niveaux de priorité sur les objets commandablesÉcritures directes ; la dernière l’emporte
Alarmes et horairesObjets et services normalisésRegistres propres à l’appareil, s’ils existent
SécuritéBACnet/SC (TLS sur WebSockets)Modbus Security (TLS) sur TCP 802, rarement mis en œuvre
Appareils courantsContrôleurs CVC, boîtes VAV, groupes frigorifiques, superviseurs BMSCompteurs électriques, onduleurs, variateurs, automates

Objets et registres

Un point de température BACnet est un objet, par exemple analog-input 3 sur l’appareil 12001. Ses propriétés comprennent Object_Name (« Température salle 2.14 »), Present_Value (21,5), Units (degrees-Celsius) et Status_Flags. Ce dernier contient quatre bits : alarme, défaut, valeur forcée et hors service. Le client peut lire la valeur et savoir s’il doit lui faire confiance.

Units est une énumération de la norme 135 ; un client peut donc la décoder sans document du fabricant. Sa valeur dépend néanmoins de la personne qui a configuré le contrôleur. Un objet analog-value défini avec no-units ou avec une unité erronée exige une liste de points autant qu’un registre Modbus. Les noms d’objets varient également selon les fabricants et les sites, et un contrôleur peut publier des centaines d’objets. Le guide des objets BACnet explique comment construire une liste de points exploitable par un autre système.

Une même température ambiante comme objet BACnet et registre Modbus À gauche, analog-input 3 de l’appareil BACnet 12001 renvoie son nom, la valeur 21,5, l’unité degrees-Celsius et quatre indicateurs d’état. À droite, le registre d’entrée Modbus 30012 renvoie seulement 215 ; la table du fabricant précise le type int16, l’échelle 0,1 et l’unité °C, que le client doit appliquer pour obtenir 21,5 °C. BACnet : valeur et contexte analog-input 3, appareil 12001 Object_Name "Temp. salle 2.14" Present_Value 21,5 Units degrees-Celsius Status_Flags 4 indic., tous à 0 Modbus : la table donne le sens registre d’entrée 30012 215 et rien d’autre table de registres (fabricant) int16, échelle 0,1, unité °C 215 × 0,1 = 21,5 °C Le client peut juger si la valeur est fiable Mauvaise échelle ou ordre des mots : nombre plausible
La même température ambiante lue par BACnet et Modbus. BACnet transmet la valeur avec son unité et son état ; Modbus transmet 215, que la table de registres permet de convertir en 21,5 °C.

Sur un appareil Modbus, la même température se trouve dans le registre d’entrée 30012, qui contient 215. La table de registres indique un type int16, un facteur d’échelle de 0,1 et une unité °C. Deux conventions provoquent la plupart des erreurs de correspondance Modbus.

D’abord, 30012 est une référence documentaire, pas l’adresse transmise. Le chiffre initial 3 désigne un registre d’entrée, et la numérotation commence à 30001 pour l’adresse de protocole 0. Le client lit donc l’adresse 11 avec la fonction 04. Configuré pour l’adresse 12, il lit le registre suivant et peut renvoyer une valeur plausible mais fausse. Le convertisseur d’adresses Modbus effectue cette conversion.

Ensuite, une valeur sur 32 bits occupe deux registres. La spécification Modbus place l’octet de poids fort en premier dans chaque registre, mais ne définit pas l’ordre des deux registres : les fabricants diffèrent. Un total d’énergie de 1 234,5 kWh en float32 correspond à 0x449A suivi de 0x5000. Avec les mots inversés, le décodage donne 8 607 918 080. Vérifiez chaque point sur 32 bits avec une valeur connue et non nulle affichée par le compteur. Le décodeur de registres Modbus montre chaque ordre des octets et des mots pour une paire de registres ; le guide des tables de registres Modbus détaille les types et les échelles.

Réseaux

BACnet/IP envoie les messages BACnet dans des datagrammes UDP, sur le port 47808 par défaut. La découverte utilise des diffusions que les routeurs IP ne relaient pas. Un réseau BACnet réparti sur plusieurs sous-réseaux IP a donc besoin d’un BACnet Broadcast Management Device (BBMD) sur chaque sous-réseau. Chaque BBMD possède une table de distribution des diffusions qui répertorie ses pairs. N’installez pas deux BBMD sur un même sous-réseau avec des entrées communes : ils relaieraient les mêmes diffusions. Un client seul sur un autre sous-réseau peut s’enregistrer auprès d’un BBMD comme appareil étranger pour une durée limitée et doit renouveler son enregistrement avant l’expiration. Le guide du routage et des BBMD explique les deux mécanismes.

MS/TP fonctionne sur RS-485. Les maîtres prennent des adresses MAC de 0 à 127 et se passent un jeton. Seul celui qui le détient peut lancer une requête. Les esclaves utilisent des adresses pouvant atteindre 254, répondent aux requêtes et ne détiennent jamais le jeton. Chaque appareil MS/TP doit prendre en charge 9 600 et 38 400 bit/s ; la norme prévoit aussi 19 200, 57 600, 76 800 et 115 200 bit/s en option. Réglez Max_Master sur la plus haute adresse de maître du bus, afin d’éviter l’interrogation d’adresses vides et de raccourcir le tour du jeton. Le guide BACnet/IP et MS/TP compare les deux réseaux.

BACnet/SC transporte BACnet par WebSocket protégé par TLS. Chaque nœud se connecte à un concentrateur. Les connexions directes entre nœuds sont facultatives.

Chaque appareil BACnet possède une instance de 0 à 4 194 302. L’instance 4 194 303 est réservée comme joker. L’instance doit être unique dans tout l’interréseau, y compris tous les réseaux derrière les routeurs. Chaque réseau BACnet possède aussi un numéro de 1 à 65 534 utilisé par les routeurs. Les instances d’appareil en double sont un défaut courant de mise en service. Deux contrôleurs répondent au même Who-Is ; un client qui s’associe par instance peut alors lire le mauvais. Recherchez les doublons avant de mettre en service un second client. Le guide de découverte explique la procédure.

Modbus TCP utilise TCP sur le port 502. Modbus RTU utilise RS-485 ou RS-232 pour un seul appareil. Un client interroge jusqu’à 247 adresses serveur, chacune ne répondant que lorsqu’elle est interrogée. Le guide Modbus TCP et RTU compare les deux.

Un bus MS/TP et un bus Modbus RTU peuvent employer le même type de câble, mais pas la même paire. Leurs trames diffèrent et les maîtres MS/TP transmettent des jetons sans y être invités, ce qui corromprait le trafic Modbus.

Commandes et priorités

Un objet BACnet commandable, comme une sortie binaire démarrant un ventilateur, possède un tableau de 16 priorités. Chaque système qui commande l’objet écrit dans son propre emplacement. L’objet suit l’emplacement occupé portant le plus petit numéro. La norme 135 nomme cinq niveaux : 1 pour la sécurité des personnes en commande manuelle, 2 en commande automatique, 5 pour les équipements critiques, 6 pour les durées minimales de marche et d’arrêt, et 8 pour l’opérateur en commande manuelle. Le site peut attribuer les autres. Si tous les emplacements sont vides, l’objet prend sa valeur Relinquish_Default.

Une commande reste dans son emplacement jusqu’à ce que le système qui l’a écrite libère celui-ci en écrivant NULL. L’erreur courante est une commande que personne ne libère. Si un système énergétique arrête un ventilateur à la priorité 12 pendant un événement de réponse à la demande puis s’interrompt sans libérer l’emplacement, le ventilateur reste arrêté après l’événement. Le programme horaire du BMS lui demande pourtant de redémarrer à la priorité 16, inférieure à 12. Convenez de la priorité et de la procédure de libération avec le responsable du BMS avant la première écriture. Après une écriture, lisez Priority_Array ainsi que Present_Value.

Une écriture Modbus remplace la valeur du registre. Si le BMS et un système énergétique écrivent tous deux la même consigne, la dernière écriture l’emporte sans que les systèmes le sachent. Le guide des priorités BACnet explique l’interaction entre priorité, libération et valeur par défaut.

Quel protocole utiliser ?

L’équipement détermine généralement le protocole. Le responsable du système décide du raccordement : celui du BMS détient la liste des points BACnet et approuve chaque écriture.

SituationApproche habituelle
Compteurs Modbus et BMS BACnetLire les compteurs en Modbus. Transmettre au BMS les données dont il a besoin par une passerelle ou le système énergétique, avec une correspondance pour chaque point
Installations CVC en BACnet/IP, analyse énergétique souhaitéeLire directement les objets BACnet comme second client. N’écrivez pas sans l’accord du responsable du BMS
Contrôleurs CVC uniquement en MS/TPPasser par le superviseur BMS, qui les interroge déjà, ou par un routeur BACnet vers BACnet/IP. Le routeur ajoute vos lectures au bus MS/TP, souvent à 38 400 ou 76 800 bit/s : convenez de la fréquence d’interrogation avec le responsable du BMS
Nouveaux sous-compteurs pour un BMS existantChoisir des compteurs avec l’interface que le BMS lit le mieux, ou ajouter une passerelle publiant des objets BACnet

Correspondance entre les deux

Une passerelle qui publie les lectures d’un compteur Modbus sous forme d’objets BACnet doit disposer d’une ligne de correspondance par point. Elle indique le registre et le code de fonction, le type de données et l’ordre des mots, le facteur d’échelle, le type et l’instance d’objet BACnet ainsi que la valeur Units.

Cette correspondance doit aussi prévoir un défaut si le compteur cesse de répondre. Une passerelle correctement configurée définit la propriété Reliability de l’objet sur communication-failure. Le bit de défaut de Status_Flags s’active alors et le BMS qui le vérifie sait que la valeur n’est plus actuelle. Une passerelle qui conserve la dernière valeur sans indiquer de défaut trace une ligne plate qui ressemble à une mesure réelle. Pour tester cette règle, déconnectez le compteur puis lisez Reliability et Status_Flags côté BACnet. Le guide des passerelles de protocole énumère les autres paramètres à définir, et le guide des données périmées explique le traitement en aval.

Sécurité

Ni BACnet/IP ni Modbus TCP n’authentifie les clients ni ne chiffre les données. Tout hôte qui peut joindre UDP 47808 peut écrire dans les objets pour lesquels le contrôleur autorise l’écriture. Tout hôte qui peut joindre TCP 502 peut écrire dans un registre de maintien. Placez les équipements de gestion du bâtiment sur leur propre VLAN. N’autorisez UDP 47808 que depuis les clients BACnet et les BBMD pairs. N’autorisez TCP 502 que depuis le Gateway ou le BMS qui interroge les compteurs. N’exposez aucun de ces ports à Internet. Vérifiez la table de distribution des diffusions de chaque BBMD : une entrée erronée relaie toutes les diffusions locales vers son adresse. BACnet/SC et Modbus Security ajoutent TLS, mais les deux extrémités doivent les prendre en charge ; la plupart des équipements installés ne le font pas.

BACnet et Modbus avec Edge

Edge sur le Gateway ZGW-20 lit les deux protocoles. Comme client BACnet/IP, il interroge Present_Value des objets analogiques, binaires et à états multiples de type entrée, sortie et valeur. Une configuration réseau accepte jusqu’à 16 contrôleurs et jusqu’à 64 points par contrôleur. Edge interroge les points chaque minute ou à un intervalle aligné sur la minute, par exemple toutes les 300 secondes. Comme client Modbus, il lit les équipements Modbus TCP et RTU en configurant le type de données et l’ordre des octets et des mots de chaque point. Les mesures des compteurs et capteurs Zigbee EpiSensor côtoient ces points, chacune avec son propre identifiant d’export, et partent vers les mêmes destinations.

Edge peut également transmettre des mesures à un BMS sous forme de registres Modbus TCP. Son Modbus Server écoute sur TCP 10502 et associe chaque mesure à une bobine ou à un ou deux registres de type int16, uint16, int32, uint32 ou float32. Si la source cesse de transmettre, le registre conserve sa dernière valeur. Le BMS doit donc prévoir son propre contrôle de fraîcheur, par exemple une alarme lorsqu’un compteur d’énergie cesse de progresser.

Le client BACnet a des limites. Il interroge les points sans s’abonner au COV ; le guide COV compare les deux méthodes. Il ne se connecte pas à un bus MS/TP : lisez les contrôleurs MS/TP par un routeur BACnet. Ses réglages ne prévoient pas l’enregistrement comme appareil étranger ; placez donc le Gateway sur le sous-réseau des contrôleurs ou demandez au responsable du BMS de prévoir le routage. Les écritures dans les objets de sortie et de valeur ne fonctionnent que sur les points qu’un administrateur a configurés pour la commande. Chaque écriture utilise une priorité de 1 à 16, ou 16 si aucune n’est définie. Edge ne peut pas libérer une commande, car il refuse l’écriture d’une valeur NULL. Convenez d’une procédure de libération avec le responsable de l’équipement avant toute écriture. L’application d’intégration de compteurs avec un BMS ou SCADA présente une architecture complète.

Questions fréquentes

Quelle est la différence principale entre BACnet et Modbus ?

BACnet transporte le sens avec les données : chaque point est un objet avec un nom, une valeur présente, une unité et des indicateurs d’état ; les appareils peuvent être découverts. Modbus transporte des nombres dans des registres dont le sens, l’unité et l’échelle proviennent d’une table distincte pour chaque modèle.

Quand un projet a-t-il besoin de BACnet plutôt que de Modbus ?

Lorsque le système récepteur a besoin de notifications de changement de valeur, d’objets normalisés pour les alarmes, horaires ou historiques, ou de commandes respectant les priorités des autres systèmes. Pour interroger des mesures énergétiques, Modbus suffit et c’est l’interface de la plupart des compteurs électriques.

Quel port utilise BACnet/IP ?

Le port UDP 47808 (0xBAC0) par défaut. Un site peut utiliser d’autres ports UDP pour séparer ses réseaux BACnet/IP. Modbus TCP utilise le port TCP 502.

Les appareils BACnet et Modbus peuvent-ils fonctionner ensemble ?

Oui, avec une passerelle ou un contrôleur prenant en charge les deux. Chaque point exige une correspondance entre registre Modbus et objet BACnet, comprenant le type de données, l’ordre des mots, l’échelle et l’unité. Il faut aussi une règle de défaut : si l’appareil Modbus cesse de répondre, l’objet BACnet doit signaler Reliability communication-failure plutôt que conserver la dernière valeur comme si elle était actuelle.