Protocoles et données

BACnet : COV, interrogation et fraîcheur des données

Comparez COV et interrogation BACnet : variation, durée et renouvellement des abonnements, charge réseau et vérification des valeurs récentes.

Un client BACnet obtient une valeur de deux façons. L’interrogation périodique la lit selon le calendrier du client, avec ReadProperty ou ReadPropertyMultiple. Le changement de valeur (COV) demande à l’appareil d’envoyer une notification lorsque la valeur varie d’au moins un seuil donné. Ce choix détermine la charge réseau, le délai de réception d’un changement et la signification d’une absence de message.

Ce guide fait partie de la série BACnet et protocoles du bâtiment.

Fonctionnement du COV

Le client envoie SubscribeCOV pour un objet de l’appareil. La requête indique un identifiant de processus abonné, choisit les notifications confirmées ou non confirmées et fixe une durée de validité en secondes. L’appareil envoie ensuite une notification contenant Present_Value et Status_Flags :

  • dès l’acceptation de l’abonnement, pour donner une première valeur au client ;
  • pour un objet analogique, lorsque Present_Value a varié d’au moins COV_Increment depuis la dernière notification ;
  • pour un objet binaire ou à états multiples, à chaque changement d’état ;
  • lorsque Status_Flags change, par exemple à l’entrée en alarme ou à la mise hors service du point.

Prenons un seuil de 0,5 °C et une dernière valeur notifiée de 20,0 °C. Des lectures de 20,2 °C et 20,4 °C n’envoient rien. Une lecture de 20,6 °C déclenche une notification, bien que chaque étape n’ait été que de 0,2 °C : l’appareil compare avec la dernière valeur notifiée, et non avec la lecture précédente. Une dérive lente est donc signalée lorsqu’elle atteint le seuil. Un écart inférieur au seuil n’est jamais signalé ; le client peut ainsi conserver indéfiniment une valeur éloignée de presque 0,5 °C de la valeur réelle si la pièce reste dans cet état.

SubscribeCOVProperty permet de s’abonner à une seule propriété et de définir son propre seuil. Il sert à surveiller une propriété autre que Present_Value, comme High_Limit, ou à remplacer le COV_Increment de l’objet sans écrire dans le contrôleur.

Le seuil détermine aussi la charge. Si un contrôleur échantillonne chaque seconde une entrée analogique bruitée et que le seuil est de 0,01, il peut envoyer une notification par seconde à chaque abonné : 3 600 par heure pour un seul point. Le compte rendu de Newman sur le réseau du campus de Cornell cite un seuil trop petit parmi les défauts de contrôleur que l’université limite en isolant le trafic de chaque bâtiment de celui des autres et du système central.

Notifications confirmées et non confirmées

Une notification confirmée exige un accusé de réception du client. Si celui-ci n’arrive pas avant l’expiration du délai APDU de l’appareil, celui-ci renvoie la notification, jusqu’à sa limite de tentatives. Une notification non confirmée n’est envoyée qu’une fois. Si un routeur la perd ou si le client est occupé, le changement est perdu sans que l’une ou l’autre extrémité le sache.

Utilisez des notifications confirmées pour les alarmes et les états d’installation. Les accusés de réception ajoutent un court message par changement. Les notifications non confirmées peuvent convenir à des points analogiques à forte fréquence, où le changement suivant remplace celui qui a été perdu, mais seulement avec une lecture de contrôle (voir Interpréter le silence).

Durée de validité et renouvellement

La durée de validité est le temps pendant lequel l’appareil conserve l’abonnement sans renouvellement. Le client le renouvelle en envoyant de nouveau le même SubscribeCOV avant l’échéance. Côté client, cette durée est généralement un réglage. Dans Beckhoff TF8020, elle apparaît comme Subscriptions Lifetime dans la fenêtre Settings.

Tentez le renouvellement à mi-durée et réessayez avant l’expiration si la tentative échoue. Pour un abonnement de 600 s, une tentative à 300 s laisse le temps de réessayer ; attendre 600 s après une tentative perdue atteint la limite d’expiration. Les directives des BACnet Testing Laboratories (BTL) exigent que tout serveur COV accepte une durée de 1 à 28 800 s (8 heures) ; les valeurs de cette plage ne sont donc pas rejetées pour ce motif (clauses 7.24 et 7.25).

Une durée de 0 signifie un abonnement sans échéance. Évitez-la. La clause 7.6 des directives BTL en donne les raisons : l’appareil n’a pas à conserver la liste des abonnements après une réinitialisation ou une coupure d’alimentation, un contrôleur de remplacement démarre avec une liste vide et l’abonnement d’un client retiré occupe indéfiniment une place. SubscribeCOVProperty n’autorise pas une durée de 0.

Le nombre de places est limité. La norme n’exige d’un serveur COV que cinq abonnements simultanés (clause BTL 7.7, citant les clauses K.1.12 et K.1.13 d’ASHRAE 135). Le projet BACnet Stack en réserve 128 par défaut. Quand la table est pleine, une demande d’abonnement échoue ; BACnet Stack renvoie la classe d’erreur RESOURCES et le code NO_SPACE_TO_ADD_LIST_ELEMENT. La propriété Active_COV_Subscriptions de l’objet Device énumère les abonnements détenus par l’appareil. Lisez-la pendant la mise en service pour voir les places déjà occupées par le superviseur et d’autres clients.

Un échec d’abonnement ne doit pas rester invisible. La clause BTL 7.7 demande de revenir à l’interrogation périodique pour ce point, d’alerter l’opérateur, ou les deux.

Comparaison de l’interrogation et du COV

Interrogation périodiqueCOV
Qui lance chaque messageLe client, selon son calendrierL’appareil, lorsque la valeur change
Trafic pour une valeur stableUne requête et une réponse à chaque intervalleSeulement les renouvellements, par exemple un échange toutes les 300 s
Délai de réception d’un changementJusqu’à un intervalle d’interrogation, plus la lectureCycle de détection COV de l’appareil et transmission ; en MS/TP, attente du jeton en plus
Petits changementsVisibles à chaque lectureMasqués jusqu’à ce que leur cumul atteigne le seuil
Fonction nécessaireReadProperty, que tout appareil BACnet doit exécuterSubscribeCOV sur l’appareil et sur le client
Ressources occupées sur l’appareilAucune conservéeUne place d’abonnement par point et par client ; cinq au minimum exigé
Après le redémarrage de l’appareilLa lecture suivante fonctionneLes abonnements peuvent être perdus ; ils reviennent au prochain renouvellement
Preuve de la fraîcheur des donnéesHorodatage de chaque lecture réussieDernier renouvellement, dernière notification et lecture de contrôle

Budget d’interrogation sur MS/TP

Sur BACnet/IP, interroger quelques centaines de points une fois par minute impose une faible charge. Sur MS/TP, il faut calculer. MS/TP transmet 10 bits par octet. Une requête ReadProperty pour Present_Value d’une entrée analogique occupe environ 23 octets dans sa trame MS/TP ; la réponse qui contient un nombre REAL en occupe environ 29. À 38 400 bit/s, cela représente environ 14 ms par point, avant les intervalles de changement de sens, le délai de réponse du contrôleur et le tour de jeton entre les autres maîtres.

Calculez les lectures par seconde avant de choisir l’intervalle. Pour 300 points toutes les 60 s, cela fait 5 lectures par seconde, soit environ 70 ms de transmission chaque seconde. Pour 300 points toutes les 5 s, cela fait 60 lectures par seconde, soit environ 0,8 s de transmission par seconde, sans place pour le trafic propre des contrôleurs. ReadPropertyMultiple regroupe plusieurs points dans un échange si l’appareil le prend en charge et réduit la surcharge par point. Le guide BACnet/IP et MS/TP explique le cycle du jeton et les débits.

Interpréter le silence

Avec l’interrogation, un échec de lecture se voit : la requête expire. Avec le COV, le silence peut signifier deux choses. Soit la valeur n’a pas changé, soit l’abonnement a disparu après un redémarrage, une expiration ou la perte d’une notification. Une valeur stable et un abonnement mort se ressemblent.

Consignez trois horodatages pour chaque point COV :

  1. Dernier changement : date à laquelle la valeur a changé pour la dernière fois.
  2. Dernier message : date de réception de la dernière notification ou lecture réussie.
  3. Dernier renouvellement : date du dernier SubscribeCOV accusé pour ce point.

Lisez chaque point COV toutes les 15 minutes pour le contrôler. Si cette lecture diffère de la dernière valeur notifiée d’au moins le seuil, une notification a été perdue : réabonnez-vous et signalez un défaut. Marquez le point comme périmé si le dernier renouvellement est plus ancien que la durée de validité ou si le dernier message est plus ancien que l’intervalle de contrôle augmenté d’une minute. Avec une durée de 600 s et un contrôle à 15 minutes, les limites sont donc de 600 s et 960 s. Le guide des données périmées explique comment présenter et traiter les valeurs qui ne sont plus fraîches.

L’interrogation demande la même attention sous une autre forme. Un ordonnanceur lancé chaque minute ne prouve pas qu’une valeur valide arrive chaque minute. Mesurez le temps entre les lectures réussies.

Choisir selon le point

PointChoix habituel
Énergie et puissance pour analyse, toutes les 1 à 15 minutesInterroger à l’intervalle d’analyse, aligné sur l’horloge
Températures ambiantes pour le suivi du confortInterroger toutes les 5 minutes ou utiliser le COV avec un seuil de 0,2 à 0,5 °C
États d’installation et alarmes à recevoir en quelques secondesCOV avec notifications confirmées, durée de 600 s renouvelée toutes les 300 s et lecture de contrôle toutes les 15 minutes
Nombreux points sur un bus MS/TPN’interroger que les points nécessaires, avec ReadPropertyMultiple si disponible, ou les lire sur le superviseur du système de gestion du bâtiment (BMS) en BACnet/IP

Testez ce choix sur site en comparant le journal du client à l’historique propre du contrôleur :

  1. Laissez le point stable pendant 30 minutes. Critère de réussite : les renouvellements sont accusés toutes les 300 s, aucune notification n’arrive et les lectures de contrôle correspondent à la dernière valeur.
  2. Provoquez un changement inférieur au seuil. Critère : aucune notification et la lecture de contrôle suivante montre la nouvelle valeur.
  3. Provoquez un changement supérieur au seuil. Critère : une notification. Mesurez le délai entre le changement et sa réception : c’est la latence que le site subira.
  4. Redémarrez le contrôleur. Critère : les notifications reprennent avant la fin d’un intervalle de renouvellement ; sinon, le point est marqué périmé.
  5. Redémarrez le client. Critère : il se réabonne avant de marquer un point comme frais.
  6. Lisez Active_COV_Subscriptions. Critère : l’appareil détient les abonnements attendus et dispose encore de places libres.

Interrogation avec Edge

Edge sur le Gateway ZGW-20 lit BACnet/IP en interrogeant Present_Value. Il ne s’abonne pas au COV. Chaque point suit un calendrier aligné sur l’horloge, par exemple toutes les 60 ou 300 secondes ; le mode de flux en direct lit également une fois par minute. Chaque lecture réussie porte son propre horodatage. Une lecture échouée n’enregistre aucune nouvelle valeur : l’arrêt d’un contrôleur apparaît donc comme une lacune. Edge ne se connecte pas directement à MS/TP ; les contrôleurs MS/TP sont accessibles par un routeur BACnet/IP ou le superviseur BMS. Utilisez cette méthode pour les points énergétiques et environnementaux lents, et confiez au BMS les alarmes à recevoir en quelques secondes.

Questions fréquentes

Qu’est-ce que le COV en BACnet ?

COV signifie changement de valeur. Un client s’abonne à un objet et l’appareil envoie une notification lorsque Present_Value varie au moins du seuil COV depuis la dernière notification, ou lorsque Status_Flags change. Cela remplace les lectures répétées pour les points qui changent rarement.

Qu’est-ce qu’un seuil COV ?

La variation minimale de Present_Value d’un objet analogique qui déclenche une notification COV. Avec un seuil de 0,5 °C et une dernière valeur notifiée de 20,0 °C, des lectures de 20,2 et 20,4 °C ne déclenchent rien ; une lecture de 20,5 °C ou plus déclenche une notification. Les objets binaires et à états multiples signalent chaque changement d’état.

Quelle durée choisir pour un abonnement COV ?

Choisissez une durée limitée et renouvelez à peu près à mi-parcours, par exemple une durée de 600 s renouvelée toutes les 300 s. Les directives BTL exigent que les serveurs COV acceptent toute durée de 1 à 28 800 s. Une durée de 0 rend l’abonnement indéfini, ce que les directives BTL déconseillent aux clients.

Le COV est-il préférable à l’interrogation périodique ?

Il réduit le trafic des points qui changent rarement et signale rapidement les changements d’état. Il exige sa prise en charge par l’appareil et le client, occupe une place d’abonnement sur l’appareil et nécessite des renouvellements ainsi qu’une lecture de contrôle. L’interrogation est plus simple et produit un horodatage à chaque intervalle.