Protocoles et données

Routage BACnet, BBMD et appareils étrangers

Routage BACnet entre réseaux : numéros de réseau, BBMD, tables de diffusion, appareils étrangers et découverte entre sous-réseaux IP.

Quand une requête Who-Is du système de gestion du bâtiment (BMS) ne trouve que les appareils de son propre sous-réseau, ou en trouve certains deux fois, le routage est presque toujours en cause. Les messages BACnet franchissent les frontières de réseau de deux façons. Un routeur BACnet relie un bus MS/TP à BACnet/IP. Un BBMD (BACnet Broadcast Management Device) relaie les diffusions entre les sous-réseaux IP d’un même réseau BACnet/IP, car les routeurs IP les bloquent. Un appareil situé hors de ces sous-réseaux peut s’enregistrer auprès d’un BBMD comme appareil étranger.

Ce guide fait partie de la série BACnet et protocoles du bâtiment. Lisez d’abord le guide de découverte pour comprendre les instances d’appareil et les numéros de réseau.

Routeurs BACnet

Un routeur BACnet possède un port sur chaque réseau qu’il relie, par exemple un port BACnet/IP et deux ports MS/TP. La clause 6 d’ASHRAE 135 définit la couche réseau utilisée. Chaque port possède un numéro de réseau de 1 à 65 534. Le numéro 65 535 signifie « tous les réseaux » et sert aux diffusions globales.

L’adresse complète d’un appareil MS/TP comprend son numéro de réseau et son adresse MAC sur un octet. Les maîtres utilisent les adresses MAC de 0 à 127 ; les esclaves peuvent aller jusqu’à 254 et 255 désigne la diffusion MS/TP. Un client BACnet/IP envoie une requête destinée à cet appareil vers l’adresse IP du routeur, en plaçant le numéro du bus et l’adresse MAC dans les champs de destination de la NPDU (DNET et DADR). Le routeur relaie la requête sur le bus. Le guide BACnet/IP et MS/TP explique le passage du jeton et la durée accrue d’une lecture routée vers un bus lent.

Un client apprend quel routeur dessert un réseau de deux façons. Il peut envoyer Who-Is-Router-To-Network ; le routeur répond par I-Am-Router-To-Network avec la liste des réseaux situés derrière lui. Il peut aussi relever le réseau et l’adresse source (SNET et SADR) d’une réponse routée, telle que I-Am, et mémoriser l’adresse IP du routeur comme chemin. Un routeur diffuse également I-Am-Router-To-Network sur chaque port au démarrage. Si le sous-réseau du client ne reçoit jamais ces diffusions, il ne peut pas trouver les bus situés derrière le routeur.

La norme n’autorise qu’un seul chemin actif entre deux appareils. Chaque bus MS/TP doit avoir son propre numéro de réseau, distinct de celui du réseau BACnet/IP. Deux routeurs qui annoncent le même réseau divisent son trafic ou le font boucler. Le nombre maximal de sauts de la NPDU démarre à 255 et diminue d’un à chaque routeur : un message qui boucle est finalement supprimé, mais seulement après de nombreux passages. Pour un BMS, un numéro de réseau en double donne l’impression que les appareils se déplacent d’un bus à l’autre. Pour le repérer, envoyez Who-Is-Router-To-Network sans numéro de réseau et capturez les réponses. Deux réponses I-Am-Router-To-Network annonçant le même numéro désignent les deux routeurs. Un message Reject-Message-To-Network avec la raison 1 (le routeur n’a pas de chemin vers ce réseau) indique également un problème de numérotation.

Sur beaucoup de sites, le routeur est un port du contrôleur de supervision BMS : les réglages de numéro de réseau de ce contrôleur sont donc ceux du routeur. Lisez-les avant d’ajouter un second routeur.

Pourquoi les diffusions s’arrêtent aux routeurs IP

BACnet utilise les diffusions pour l’association dynamique (Who-Is, I-Am, Who-Has, I-Have), pour TimeSynchronization et UTCTimeSynchronization, ainsi que pour les notifications non confirmées envoyées à une adresse de diffusion, comme UnconfirmedCOVNotification et UnconfirmedEventNotification. Le compte rendu de Newman sur le campus de Cornell cite deux autres usages sur site : une commande de réduction d’urgence de charge et une valeur partagée par de nombreux processus de commande.

En BACnet/IP, chaque diffusion est un datagramme UDP vers l’adresse de diffusion du sous-réseau, par exemple 10.1.10.255, sur le port 47808 (0xBAC0). Les routeurs IP ne le relaient pas. Depuis la RFC 2644 (1999), ils bloquent aussi par défaut les diffusions dirigées vers un sous-réseau distant. Un client d’un sous-réseau ne peut donc pas découvrir les appareils d’un autre, même si le trafic unicast fonctionne entre eux.

BBMD

L’annexe J d’ASHRAE 135 définit le BBMD. Sur la plupart des sites, c’est une fonction intégrée à un contrôleur de supervision ou à un routeur, plutôt qu’un appareil séparé. Chaque BBMD conserve une table de distribution des diffusions (BDT). Elle contient une entrée pour le BBMD local et une pour chaque BBMD distant devant recevoir les diffusions du sous-réseau. Chaque entrée comprend l’adresse IP et le port UDP du BBMD, ainsi qu’un masque de distribution sur 4 octets.

Lorsqu’un appareil de son sous-réseau diffuse un message, le BBMD l’encapsule dans un Forwarded-NPDU, qui contient l’adresse IP et le port de l’émetteur d’origine. Le masque de chaque entrée BDT détermine comment le message atteint le sous-réseau distant. Avec le masque 255.255.255.255 (deux sauts), le BBMD envoie le Forwarded-NPDU en unicast au BBMD distant. Celui-ci le diffuse sur son propre sous-réseau et l’envoie aux appareils étrangers enregistrés auprès de lui. Avec le masque du sous-réseau, par exemple 255.255.255.0 (un saut), le BBMD envoie une diffusion dirigée directement vers le sous-réseau distant. Cette méthode échoue là où les routeurs IP bloquent les diffusions dirigées, leur comportement par défaut, et ne traverse pas le NAT. Utilisez deux sauts, sauf si l’équipe informatique du site a accepté de relayer les diffusions dirigées.

L’addendum 135-2008o (2009) a modifié certaines règles initiales de l’annexe J. Les règles actuelles sont les suivantes :

ÉlémentRègle
BBMD par sous-réseauAu moins un sur chaque sous-réseau participant. Deux sur le même sous-réseau seulement si leurs BDT n’ont aucune entrée commune ; sinon les diffusions bouclent entre eux
MasquesLe masque d’un sous-réseau donné est le même dans toutes les BDT qui le mentionnent
Trafic entre BBMDUDP en unicast, généralement sur le port 47808. Les pare-feu entre sous-réseaux doivent l’autoriser dans les deux sens
Lectures après la découverteUnicast du client directement vers l’appareil, sans passer par les BBMD. Les pare-feu doivent aussi autoriser ce trafic

L’annexe J initiale exigeait des BDT identiques sur tout un réseau BACnet/IP afin que chaque appareil reçoive chaque diffusion globale. Newman explique pourquoi Cornell n’a pas suivi cette règle : la plupart des diffusions n’intéressent qu’un bâtiment. Chaque BDT du campus ne répertorie que le BBMD local et celui du centre d’exploitation. Newman appelle cela un horizon partagé, car les autres réseaux sont « sous l’horizon ». Les opérateurs du centre voient tout le trafic de diffusion. Un contrôleur mal configuré ne perturbe que son bâtiment, par exemple s’il envoie des alarmes à un destinataire inexistant ou un flot de notifications COV parce que son seuil est trop faible. L’addendum 135-2008o a supprimé l’obligation de BDT identiques ; une BDT peut désormais ne relayer les diffusions qu’aux sous-réseaux qui en ont besoin.

Cet horizon partagé a un coût. Un poste de travail hors du centre d’exploitation ne peut pas trouver les appareils des autres bâtiments au moyen d’un Who-Is global. Il lui faut une association statique entre l’instance d’appareil et l’adresse IP, ou un enregistrement comme appareil étranger auprès du BBMD du bâtiment visé.

Exemple sur deux bâtiments

Un site possède un seul réseau BACnet/IP, numéro 10, réparti sur deux bâtiments. Chaque bâtiment a son propre sous-réseau IP et un contrôleur de supervision qui sert à la fois de BBMD et de routeur vers les bus MS/TP du bâtiment.

Bâtiment 1Bâtiment 2
Sous-réseau IP10.1.10.0/2410.2.10.0/24
BBMD et routeur10.1.10.2:4780810.2.10.2:47808
Bus MS/TPRéseaux 101 et 102Réseau 201
Poste de travail BMS10.1.10.50Aucun

Les deux BBMD possèdent la même BDT :

Table de distribution des diffusions
10.1.10.2:47808   mask 255.255.255.255
10.2.10.2:47808   mask 255.255.255.255

Voici le déroulement d’une découverte lancée depuis le BMS :

  1. Le BMS diffuse un Who-Is global à 10.1.10.255 sous forme d’Original-Broadcast-NPDU.
  2. Le BBMD 10.1.10.2 envoie par unicast à 10.2.10.2 un Forwarded-NPDU indiquant 10.1.10.50:47808 comme origine.
  3. Le BBMD 10.2.10.2 diffuse le Forwarded-NPDU sur 10.2.10.255. Sa fonction de routeur envoie aussi Who-Is sur le bus 201.
  4. Le contrôleur 10.2.10.37 diffuse I-Am ; la réponse revient vers 10.1.10.0/24 par les deux BBMD selon le même trajet.
  5. Le BMS relève 10.2.10.37:47808 dans l’adresse d’origine du Forwarded-NPDU et envoie les requêtes ReadProperty directement à cette adresse par unicast. Les BBMD ne participent pas à la lecture.
  6. L’appareil MS/TP d’adresse 5 sur le bus 201 répond par le routeur. Son I-Am porte SNET 201 et SADR 5 ; le BMS envoie donc les lectures suivantes à 10.2.10.2 avec DNET 201 et DADR 5.

Un ordinateur portable de mise en service connecté au VPN du site à l’adresse 10.50.0.23 s’enregistre auprès de 10.1.10.2 comme appareil étranger, avec une durée de vie de 300 s. Le BBMD conserve l’entrée pendant 330 s. Réglez le portable pour qu’il se réenregistre toutes les 150 s ; un enregistrement perdu ne coupera ainsi pas sa connexion.

Appareils étrangers

Un appareil étranger est un appareil BACnet/IP dont le sous-réseau IP ne fait pas partie du réseau BACnet/IP auquel il veut participer. Un ordinateur portable de mise en service ou un poste de travail distant en sont des exemples. Il doit pouvoir joindre un BBMD par IP et utilise les messages BVLC de l’annexe J :

  1. L’appareil envoie Register-Foreign-Device au BBMD, avec une durée de vie (TTL) en secondes. Le champ occupe deux octets : sa valeur maximale est donc 65 535 s.
  2. Le BBMD répond par BVLC-Result. Le code 0x0000 indique une réussite. Le code 0x0030 est un refus de Register-Foreign-Device : enregistrement désactivé, table pleine ou adresse refusée par une liste d’autorisation du fabricant.
  3. Le BBMD ajoute l’appareil à sa table des appareils étrangers (FDT). Il conserve l’entrée pendant la TTL plus une période de grâce fixe de 30 secondes (clause J.5.2.1).
  4. Le BBMD envoie à l’appareil, sous forme de Forwarded-NPDU, les diffusions de son sous-réseau et celles des BBMD répertoriés dans sa BDT.
  5. L’appareil envoie ses propres diffusions au BBMD sous forme de Distribute-Broadcast-To-Network. Le BBMD les diffuse localement, les relaie aux BBMD de sa BDT et les envoie à ses autres appareils étrangers. Si l’appareil n’est pas enregistré, le BBMD répond par le code 0x0060.
  6. L’appareil se réenregistre avant l’expiration de l’entrée. Sinon, le BBMD la supprime : l’appareil cesse de recevoir les diffusions sans obtenir de message d’erreur.

La capacité de la FDT dépend du fabricant du BBMD. Consultez sa documentation si plusieurs outils doivent s’enregistrer en même temps. N’acceptez les enregistrements que depuis les plages d’adresses nécessaires : un appareil enregistré reçoit toutes les diffusions du réseau.

La traduction d’adresses réseau (NAT) entre un appareil étranger et le BBMD provoque deux types de défaut. Le premier concerne le côté appareil. Le BBMD enregistre l’adresse et le port UDP source de l’enregistrement, donc l’adresse publique et le port du routeur NAT. Les diffusions relayées n’atteignent l’appareil que tant que le routeur conserve cette association. L’addendum 135-2008o précise qu’un appareil étranger derrière un NAT devrait se réenregistrer souvent ; l’intervalle dépend du routeur et peut être de 30 secondes ou moins.

Le second défaut concerne le côté BBMD. Un Forwarded-NPDU contient l’adresse privée de l’appareil qui a émis la diffusion ; un client situé de l’autre côté du routeur NAT ne peut pas joindre cette adresse. Un BBMD prenant en charge le NAT place à la place l’adresse globale et le port du routeur NAT dans ce champ, et chaque entrée de BDT contient l’adresse globale du BBMD pair. Cette prise en charge est facultative et déclarée dans le PICS du BBMD. Derrière un même routeur NAT, un seul appareil d’un réseau BACnet/IP peut être joint depuis le côté global. Cet appareil route les messages vers les autres, qui doivent porter d’autres numéros de réseau BACnet. La distribution à un saut ne traverse pas le NAT : ces réseaux utilisent deux sauts.

Concevoir la découverte sur un site

Établissez un plan écrit avec le responsable du BMS et l’équipe informatique du site avant l’installation :

  1. Définissez une convention unique de numéros de réseau et d’instances d’appareil pour tout le site. Consignez-la avant l’installation.
  2. Répertoriez les sous-réseaux IP qui transportent BACnet et le port UDP de chacun.
  3. Indiquez le BBMD de chaque sous-réseau participant, son adresse et sa BDT, avec le masque de chaque entrée.
  4. Autorisez UDP 47808 entre les BBMD, ainsi qu’entre chaque client et les appareils ou routeurs qu’il lit.
  5. Désignez le BBMD qui accepte les appareils étrangers et les plages d’adresses autorisées.
  6. Décidez quelles diffusions chaque sous-réseau doit recevoir et configurez les BDT en conséquence.

La convention de Cornell décrite par Newman rend les numéros lisibles. Le numéro de réseau associe le code à quatre chiffres du bâtiment à un chiffre désignant le réseau dans ce bâtiment : les réseaux du bâtiment de code 2000 portent ainsi les numéros 20000 à 20009. L’instance d’appareil ajoute deux chiffres, FFFFNDD, ce qui permet jusqu’à 100 appareils par réseau. Un technicien peut lire le bâtiment dans toute adresse d’une capture. Les instances d’appareil attribuables vont de 0 à 4 194 302 ; 4 194 303 est réservé. Vérifiez chaque instance calculée : le code de bâtiment 4194 ne permet que les suffixes 000 à 302, et les codes supérieurs ne conviennent pas. Pour un site plus petit, on peut choisir un numéro de réseau égal à 100 × bâtiment + bus, et une instance d’appareil égale à 1000 × numéro de réseau + adresse MAC. L’appareil MS/TP d’adresse 12 sur le bus 2 du bâtiment 1 devient ainsi l’appareil 102012. Choisissez la convention dès le départ : renuméroter après la réception rompt les associations de points BMS, les historiques et les graphiques qui mémorisent l’ancienne instance.

Évaluez la charge de diffusion avant de configurer les BDT. Un Who-Is global sans plage d’instances reçoit un I-Am de chaque appareil. Avec une distribution à deux sauts entre n BBMD, chaque I-Am traverse n − 1 liaisons entre sous-réseaux et est diffusé sur n sous-réseaux. Sur un site de 2 000 appareils et 10 BBMD, un seul Who-Is global déclenche 18 000 Forwarded-NPDU entre BBMD et 20 000 diffusions locales, plus les copies envoyées à chaque appareil étranger. Un Who-Is limité à une plage d’instances atteint toujours chaque sous-réseau ; seules les réponses sont moins nombreuses. Un Who-Is adressé à un seul numéro de réseau (diffusion distante) n’atteint que ce réseau. Utilisez-le si vous savez où se trouve l’appareil.

Si l’équipe informatique refuse de relayer les diffusions BACnet entre sous-réseaux ou sur un réseau étendu, utilisez BACnet Secure Connect (BACnet/SC). L’addendum 135-2016bj l’a ajouté en 2019. Chaque nœud se connecte à un concentrateur par WebSocket protégé par TLS ; le concentrateur distribue les diffusions et le réseau n’a plus besoin de BBMD. Chaque appareil, ou un routeur placé devant lui, doit prendre en charge BACnet/SC.

Défauts et diagnostic

Lisez la BDT et la FDT de chaque BBMD avec un outil BACnet (Read-BDT et Read-FDT), puis comparez-les. Capturez ensuite UDP 47808 des deux côtés du pare-feu. Dans Wireshark, bvlc.function == 0x04 affiche les Forwarded-NPDU, bvlc.result les codes de refus et bvlc.reg_ttl la TTL de chaque enregistrement.

SymptômeCause probableVérification
Les appareils du sous-réseau local apparaissent, pas ceux des autresBBMD absent d’un sous-réseau, entrée BDT manquante ou pare-feu bloquant UDP 47808 entre BBMDLisez la BDT de chaque BBMD ; capturez les Forwarded-NPDU sur le sous-réseau distant
Les appareils distants apparaissent, mais les lectures expirentLe pare-feu autorise le trafic BBMD, mais bloque l’unicast du client à l’appareilCapturez la requête ReadProperty et recherchez la réponse des deux côtés
Chaque I-Am arrive deux foisDeux BBMD sur le même sous-réseau partagent une entrée BDT, ou le masque d’un sous-réseau diffère entre BDTLisez et comparez les BDT de tous les BBMD de ce sous-réseau
Un appareil étranger découvre les appareils, puis cesse de recevoir des messagesL’enregistrement a expiré ou une association NAT s’est ferméeLisez la FDT et le temps restant de l’entrée ; comparez l’intervalle de réenregistrement à la TTL
Le Who-Is d’un appareil étranger reçoit le code 0x0060L’appareil n’est pas enregistré auprès de ce BBMDCherchez Register-Foreign-Device et son BVLC-Result
L’enregistrement reçoit le code 0x0030Enregistrement désactivé, FDT pleine ou adresse non autoriséeVérifiez les réglages d’appareils étrangers du BBMD
Les appareils d’un bus semblent changer d’identitéDeux routeurs utilisent le même numéro de réseauEnvoyez Who-Is-Router-To-Network et repérez deux routeurs annonçant le même réseau

Routage avec Edge

Edge sur le Gateway ZGW-20 est un client BACnet/IP. Il découvre les appareils en envoyant un Who-Is global à l’adresse de diffusion indiquée dans ses réglages BACnet, 255.255.255.255 par défaut, sur le port UDP 47808 par défaut. Il mémorise les appareils situés derrière un routeur BACnet par leur numéro de réseau et leur adresse MAC, puis les lit par ce routeur. Il ne se connecte pas directement à un bus MS/TP.

Edge ne s’enregistre pas comme appareil étranger et ne joue pas le rôle de BBMD. Il ne trouve les appareils d’un autre sous-réseau que si les BBMD du site acheminent leurs diffusions jusqu’au sous-réseau du Gateway. Placez celui-ci sur le sous-réseau des contrôleurs ou sur un sous-réseau dont le BBMD figure dans les BDT du site. Dans une configuration à horizon partagé, le BBMD du sous-réseau du Gateway et celui de chaque bâtiment à lire doivent se répertorier mutuellement. Après la découverte, Edge lit chaque contrôleur en unicast : le pare-feu doit donc autoriser UDP 47808 entre le Gateway et chaque contrôleur ou routeur.

Le bouton Test Connection des réglages BACnet d’Edge envoie un ping à l’adresse locale configurée. Il n’envoie aucune requête BACnet et ne prouve rien sur UDP 47808 ni sur les BBMD. Confirmez chaque contrôleur par son instance d’appareil dans les résultats de découverte, puis par un test de capteur lisant un point, avant de vous fier à ses données.

Questions fréquentes

Qu’est-ce qu’un BBMD en BACnet ?

Un BACnet Broadcast Management Device, défini par l’annexe J d’ASHRAE 135. Cette fonction est généralement intégrée à un contrôleur de supervision ou à un routeur. Elle reçoit les diffusions BACnet de son sous-réseau IP et les envoie sous forme de Forwarded-NPDU aux BBMD de sa table de distribution, qui les diffusent à nouveau sur leurs sous-réseaux.

Ai-je besoin d’un BBMD ?

Seulement si des appareils BACnet/IP qui doivent se découvrir sont sur des sous-réseaux IP distincts. Sur un seul sous-réseau, ils voient les diffusions sans BBMD. Chaque sous-réseau participant en a besoin d’un. Deux BBMD sur un même sous-réseau ne sont permis que si leurs tables n’ont aucune entrée commune ; sinon les diffusions bouclent.

Qu’est-ce que l’enregistrement d’un appareil étranger BACnet ?

Il permet à un appareil situé hors des sous-réseaux d’un réseau BACnet/IP de participer à ses diffusions. L’appareil envoie Register-Foreign-Device à un BBMD avec une durée de vie en secondes. Le BBMD lui relaie les diffusions et accepte les siennes sous forme de Distribute-Broadcast-To-Network. L’entrée expire 30 secondes après la durée de vie si l’appareil ne se réenregistre pas.

Quelle différence entre un routeur BACnet et un BBMD ?

Le routeur relie deux réseaux BACnet distincts, chacun doté de son propre numéro, par exemple MS/TP et BACnet/IP. Le BBMD relie des sous-réseaux IP appartenant au même réseau BACnet/IP, donc partageant un numéro de réseau, en relayant les diffusions entre eux.

Le Gateway ZGW-20 peut-il s’enregistrer comme appareil étranger ?

Non. Edge est un client BACnet/IP. Il ne s’enregistre pas comme appareil étranger et ne joue pas le rôle de BBMD. Placez le Gateway sur le sous-réseau des contrôleurs ou sur un sous-réseau dont le BBMD figure dans les tables de distribution du site.