BACnet

Le BACnet est un protocole spécifié par l'organisation ASHRAE (association de constructeurs et d'utilisateurs dans le domaine du chauffage, de la ventilation et de la climatisation (CVC ou HVAC)).

La spécification de ce protocole est devenue un standard international normalisé par l'ANSI et l'ISO.

Description 

La spécification BACnet intègre plusieurs aspects indépendants les uns des autres :

 La spécification des supports physiques utilisables (ARCnet, MS/TP, Ethernet, …) et leurs conditions d'utilisation ;
 La spécification des données et des messages échangés entre des éléments clients et des éléments serveurs ;
 La spécification, sur une base objet, des principes des échanges entre les clients et les serveurs ;
 La spécification des services (accès aux objets, alarmes et événements, …) utilisables au travers du protocole BACnet.

Un réseau BACnet et une application de supervision sont tous deux des systèmes intégralement orientés objet. Du fait de cette logique objet intrinsèque, il est alors possible de les intégrer (les faire communiquer) nativement, sans passer par une conversion entre les objets BACnet et des variables de supervision.

Architecture réseau de BACnet 

L'architecture réseau du protocole BACnet peut être mise en relation avec le modèle d'architecture OSI (Open System Interconnection) de l'ISO. Il s'agit cependant d'une architecture simplifiée qui fait référence uniquement aux couches : physique, liaison, réseau, application. 

Les couches : transport, session et présentation ne sont pas utilisées dans le cas présent.

Les couches réseau et application font l'objet de spécifications propres au protocole BACnet. Les couches : physique et liaison font référence à des spécifications existantes indépendantes de BACnet :
 LLC:IEEE 802.2 + (Ethernet:IEEE 802.3 ou Arcnet)
 MS/TP + EIA-485
 PTP + EIA-232
 Lontalk
 UDP/IP
 Websocket sur TCP/IP avec TLS1.3

Topologies des réseaux 

Un système BACnet est constitué d'un ensemble d'appareils interconnectés. Cette interconnexion s'appuie sur plusieurs concepts :

 Le segment BACnet 

Un segment BACnet est constitué d'un ensemble d'équipements (devices) connectés sur un ou plusieurs segments physiques (reliés par des répéteurs) de même nature. Un segment BACnet est homogène du point de vue de la couche physique.

 Le réseau BACnet 

Un réseau BACnet est constitué d'un ensemble de segments interconnectés par des ponts. Les devices d'un réseau BACnet sont homogènes du point de vue de la couche liaison.

 L'inter-réseau BACnet 

L'inter-réseau BACnet est constitué d'un ensemble de réseaux BACnet interconnectés par des routeurs. Les technologies réseau (couche liaison et couche physique) peuvent être différentes pour chacun des réseaux BACnet.

 Adressage BACnet 

Le protocole BACnet fait appel à plusieurs mécanismes pour l'adressage des devices BACnet en fonction de la couche à laquelle on s'intéresse :
 Couche physique :

Pour la couche physique, l'adressage des devices n'est pas spécifique à BACnet et se fait en fonction de la technologie utilisée. Cette adresse est identifiée (vu de la couche réseau) comme la MAC address. Pour la technologie IP par exemple il s'agit de l'ensemble port UDP + adresse IP.
 Couche réseau  :

Pour la couche réseau, l'adressage des devices fait appel à l'ensemble numéro de réseau + MAC address. Tous les devices d'un même réseau BACnet doivent appartenir au même domaine (ou espace) d'adressage. Si un système BACnet comporte des devices de même technologie (par exemple BACnet IP) mais répartis dans des domaines d'adressage distincts (par exemple 192.168.10.X et 192.168.20.X), ils doivent alors être répartis dans plusieurs réseaux BACnet comportant un numéro de réseau distinct pour former un inter-réseau BACnet.
 Couche application :

Pour la couche application, l'adressage des devices s'appuie sur le mécanisme général d'adressage des objets BACnet (le device est représenté sur le réseau au travers d'un objet BACnet). L'adressage d'un objet BACnet fait appel à l'ensemble type d'objet + numéro d'instance. Cette adresse est référencée sous le nom BACnetObjectIdentifier.

Des règles unicité doivent être respectées pour permettre un adressage non ambigu des objets (et donc des devices) :
 Chaque objet BACnet d'un même device doit avoir un BACnetObjectIdentifier unique au sein du device ;
 Chaque device BACnet doit avoir un BACnetObjectIdentifier (ou Device ID) unique au sein d'un inter-réseau (ou système) BACnet.

Utilisation sur réseau IP 

Les travaux de spécifications du protocole BACnet ont débuté en 1987 à une époque où la technologie IP n'était pas encore la technologie réseau universelle (au moins dans la majorité des domaines) qu'elle est devenue à ce jour.

L'intégration de cette technologie dans les spécifications du protocole BACnet a fait l'objet d'une annexe (annexe J) qui précise les conditions de son utilisation pour ce protocole. L'utilisation du protocole BACnet sur IP est généralement mentionnée sous l'appellation BACnet/IP.

Le choix du protocole IP utilisé pour BACnet s'est porté sur UDP. Le choix de ce protocole, sans garantie d'acheminement, est basé sur le fait que la messagerie BACnet intègre elle-même les mécanismes de garantie d'acheminement (timeout d'acquittement de réception et tentatives multiples).

Un problème propre au protocole BACnet est posé pour son utilisation sur des réseaux IP publics ou d'entreprise. Ce problème est lié à l'utilisation du principe de broadcast inhérent à certains services du protocole BACnet. Les messages broadcast étant généralement filtrés par les équipements des réseaux non strictement locaux, une réponse spécifique a été apportée à ce problème. Cette réponse est basée sur la notion de BBMD (BACnet/IP Broadcast Management Device).

La notion de BBMD correspond à une fonction de propagation dirigée des messages broadcast. Une fonction BBMD doit être présente sur chacun des segments de réseau qui doit être relié à un autre segment au travers d'un dispositif qui filtre les messages broadcast. Cette fonction, de la couche réseau, se base sur des tables de configuration (BDT et FDT) pour retransmettre, aux réseaux distants, les messages broadcast émis par les devices locaux, et générer sur le réseau local les demandes de broadcast transmis par les réseaux distants.

Fonctionnement de la couche application de BACnet 

La couche application de BACnet repose essentiellement sur la définition d'un ensemble d'objets manipulés, au travers du réseau, par un ensemble de services.

Les objets de BACnet 

La notion d'objet est une notion fondamentale du protocole BACnet. Les objets sont utilisés d'une part pour représenter les informations gérées par les devices et échangées au travers du protocole, et d'autre part pour une gestion optimale de certains services ou de fonctions applicatives.

Généralités 

Pour le protocole BACnet, un objet est caractérisé par une liste de propriétés et par les valeurs de ces dernières. Les spécifications de BACnet définissent un certain nombre de types d'objets (classes) en indiquant la liste et les caractéristiques des propriétés de chacun des types. Certaines propriétés sont obligatoires pour qu'un objet soit conforme à la définition d'un type, d'autres sont optionnelles. Un constructeur d'équipements BACnet peut ajouter des propriétés qui lui sont propres aux objets standards, et il peut également définir ses propres types d'objets.

L'identification d'un objet (son adresse) au sein d'un système BACnet fait intervenir deux propriétés obligatoires (indépendantes) :
 Object_Identifier

Cette propriété est constituée de la concaténation du type de l'objet et d'un numéro d'instance. La valeur de cette propriété doit être unique pour le système s'il s'agit d'un objet device, ou doit être unique au sein du device qui le gère pour les autres objets.

 Object_Name

Cette propriété est une chaîne de caractères qui doit obéir aux mêmes règles d'unicité que la propriété Object_Identifier.
	
La définition du type d'un objet est indiquée par la propriété obligatoire Object_Type.

Objets de données 

Dans l'ensemble des types d'objets standards de BACnet un certain nombre d'entre eux sont utilisés pour gérer une donnée élémentaire du système. Ces objets sont les suivants : Accumulator, Analog Input, Analog Output, Analog Value, Binary Input, Binary Output, Binary Value, Multi-state Input, Multi-state Output, Multi-state Value.

D'une façon générale, ces objets ont pour fonction de représenter la valeur d'une donnée au travers de leur propriété Present_Value. Ils peuvent comporter des conditions d'alarme et être couplés à un objet de notification (Notification_Class) pour générer des alarmes ou des événements lors du franchissement de ces conditions.

Objets fonctionnels 

Les objets fonctionnels réalisent la prise en charge d'une fonction destinée à piloter des propriétés d'autres objets ou à élaborer des résultats localement. Les objets fonctionnels définis par les spécifications BACnet sont les suivants :
 Averaging : calcul d'indicateurs statistiques sur une donnée (minimum, maximum, moyenne, variance)
 Calendar : définition d'une liste de plages calendaires (est généralement utilisé par référence par les objets Schedule)
 Command : objet utilisé pour déclencher un ensemble d'actions préconfigurées au travers d'une seule écriture de la Present_Value de l'objet Command
 Event Enrollment : permet de définir des conditions de génération d'événements en dehors des conditions intrinsèques aux objets
 Group : est utilisé pour donner accès simplement à un ensemble de données
 Loop : permet de représenter, de façon standardisée, une boucle de régulation
 Program : permet de représenter, de façon standardisée, un programme exécuté dans un device BACnet
 Pulse Converter : élaboration d'une grandeur physique à partir d'un comptage d'impulsions
 Schedule : objet de commande de propriétés d'autres objets sur la base d'une programmation horaire
 Trend Log : réalise l'historisation de la valeur de propriétés d'autres objets
 Event Log : réalise l'historisation d'événements
 Structured View : permet de décrire une organisation (qui peut être hiérarchique) entre des objets d'un système BACnet
 Trend Log Multiple : réalise l'historisation d'un ensemble de propriétés d'autres objets.
	
Certains objets fonctionnels sont plus particulièrement adaptés pour un métier particulier (contrôle d'accès, détection incendie, …) :
 Life Safety Point :  point de détection incendie
 Life Safety Zone : permet de définir des zones de détection incendie constituées d'une liste de détecteurs et de zones
 Access Door : permet de représenter, de façon standardisée, une porte de contrôle d'accès
 Load Control : permet de représenter, de façon standardisée, une fonction de délestage
	
D'autres objets fonctionnels sont utilisés en liaison avec les services proposés par le protocole BACnet :
 Device : l'objet Device représente l'ensemble des caractéristiques d'un équipement BACnet présent sur le réseau
 Notification Class : cet objet est utilisé pour définir les conditions de diffusion des notifications pour tout ou partie des alarmes et des événements

Gestion des propriétés commandables 

Il existe deux types de propriétés du point de vue des opérations d'écriture : commandable ou non commandable.

Pour les propriétés commandables, une notion de priorité permet de gérer des forçages de valeur en fonction du niveau de priorité utilisé lors de la demande d'écriture. Un tableau de priorités est géré par les objets qui disposent d'une propriété commandable. Ce tableau dispose d'un emplacement pour chacun des 16 niveaux de priorité possibles. Ce tableau contient la dernière valeur éventuellement écrite pour un niveau donné. La valeur prise par la propriété concernée est alors la valeur associée à la priorité la plus élevée. La priorité d'écriture est spécifiée à chaque demande d'écriture. Une demande d'écriture avec la valeur NULL libère le niveau de priorité spécifié.

Les services de BACnet 

La couche application du protocole BACnet spécifie également un ensemble de services qui permettent de gérer les devices et les objets des devices qui constituent un système BACnet. Ces services couvrent divers aspects, en particulier :
 les services d'accès aux objets : ces services permettent de manipuler les objets
 lecture (unitaire, multiple, plage) et écriture (unitaire, multiple) des propriétés
 création, suppression d'objets
 ajout, suppression d'éléments dans les propriétés de type liste
 Les services de gestion des alarmes et événements : sont utilisés pour la gestion des notifications. Ces notifications peuvent concerner l'évolution des valeurs d'une propriété (COV) ou l'occurrence d'une condition d'alarme ou d'événement (intrinsèque ou algorithmique).
 L'échange de fichiers : lecture ou écriture de fichiers dans un device.
 La gestion à distance des devices : sont principalement utilisés pour des fonctions d'administration des devices (contrôle des échanges sur le réseau, réinitialisation, synchronisation horaire, exploration du réseau (Who-Is, Who-Has, ...))
 L'accès au travers d'un terminal virtuel.

Utilisation pour la supervision 

Le protocole BACnet est utilisé pour assurer la communication entre les différents équipements d'un système BACnet en vue de satisfaire les exigences du fonctionnement global d'une installation. Il est également, voire principalement, utilisé pour les besoins de la supervision de ces installations.

Pour les besoins de la supervision, les services utiles sont essentiellement l'accès aux objets et à leurs propriétés, et la gestion des alarmes.

La mise en œuvre d'un réseau BACnet pour la supervision pose des problèmes spécifiques à cette technologie pour les logiciels de supervision traditionnels.

Ces problèmes sont essentiellement liés à :
 L'approche objet : les logiciels de supervision traditionnels gèrent des données unitaires qui diffèrent profondément de la notion de propriété associée à une instance d'objet.
 L'utilisation de propriétés complexes : certaines propriétés d'objets (la propriété Weekly_Schedule de l'objet Schedule par exemple) sont accessibles uniquement sous forme d'une structure complexe qui n'est pas manipulable comme une donnée élémentaire d'un superviseur traditionnel.
 L'optimisation des échanges sur le réseau : d'une façon générale, une supervision peut être intéressée par la totalité des propriétés d'un objet pour afficher les valeurs de ces propriétés ou les modifier. Cependant, toutes les propriétés, selon leur nature, n'évoluent pas de la même manière. Certaines évoluent en permanence (Present_Value), d'autres évoluent occasionnellement à l'initiative du device (Status_Flags), d'autres encore évoluent occasionnellement à l'initiative d'un device extérieur (High_Limit), enfin certaines propriétés sont pratiquement statiques (Description).
Les superviseurs traditionnels ne sont généralement pas capable de distinguer la nature des informations échangées et ne peuvent donc pas adapter la logique des échanges sur le réseau en fonction de cette nature. Lorsqu'il n'est pas possible de prendre en compte ces caractéristiques, il faut alors renoncer à récupérer les propriétés statiques ou quasi statiques sous peine de surcharger inutilement le réseau.Il est à noter qu'il existe un service de notification qui permet à un device client de s'abonner à des notifications sur changement de valeur. Ce service ne s'applique cependant qu'à certaines propriétés.
 L'utilisation d'objets d'historisation locale : certains objets (Trend Log par exemple) réalisent une mémorisation locale au device de l'évolution des valeurs de propriétés. La prise en compte de ces valeurs historisées nécessitent une implémentation spécifique à BACnet de la gestion de ces objets
 L'utilisation d'un service de gestion d'alarmes le couplage entre un logiciel de supervision et un service externe de gestion des alarmes n'est pas habituel et les mécanismes utilisés par le protocole BACnet lui sont spécifiques. Ici aussi, il est nécessaire de disposer d'une implémentation native de la gestion des alarmes BACnet dans la supervision pour pouvoir disposer de l'ensemble des fonctions nécessaires : synchronisation de l'état, propagation des acquittements, …
 La notion de propriété commandable : traditionnellement, la commande des installations supervisées est réalisée au travers d'une simple écriture dans les données qui représentent les actionneurs (ou les consignes). Le protocole BACnet a introduit la notion de propriété commandable qui permet, à un device client, de prendre la main sur une commande. L'utilisation d'un niveau de priorité adéquat permet alors à ce device d'empêcher toute action par un device moins prioritaire. Ce mécanisme, propre à BACnet, nécessite également une implémentation spécifique à ce protocole au sein de la supervision.

La façon d'apporter une réponse à ces problèmes doit être un critère de choix de premier niveau pour le logiciel de supervision d'un système BACnet.

Notes et références

Liens externes 
 Site web de BACnet

Protocole de communication