Protocolos y datos

Encaminamiento BACnet, BBMD y dispositivos externos

BACnet entre redes: routers, números de red, tablas de difusión BBMD, registro de dispositivos externos y descubrimiento entre subredes IP.

Si un Who-Is del BMS solo encuentra los dispositivos de su propia subred, o encuentra algunos dos veces, casi siempre hay un problema de encaminamiento. Los mensajes BACnet atraviesan límites de red de dos maneras. Un router BACnet conecta un bus MS/TP con BACnet/IP. Un BBMD (dispositivo de gestión de difusiones BACnet) transporta las difusiones entre las subredes IP de una misma red BACnet/IP, porque los routers IP las descartan. Un dispositivo fuera de esas subredes puede registrarse en un BBMD como dispositivo externo.

Esta guía forma parte de la serie sobre BACnet y protocolos de edificios. Lea primero la guía de descubrimiento para entender las instancias de dispositivo y los números de red.

Routers BACnet

Un router BACnet tiene un puerto en cada red que conecta; por ejemplo, un puerto BACnet/IP y dos puertos MS/TP. La cláusula 6 de ASHRAE 135 define la capa de red que utiliza. Cada puerto tiene un número de red entre 1 y 65.534. El número 65.535 significa «todas las redes» y se usa en difusiones globales.

La dirección completa de un dispositivo MS/TP contiene su número de red y su dirección MAC de un octeto. Los maestros usan direcciones MAC de 0 a 127; los esclavos pueden llegar hasta 254, y 255 es la dirección de difusión MS/TP. Un cliente BACnet/IP envía una petición para ese dispositivo a la dirección IP del router, con el número de red del bus y la MAC en los campos de destino de la NPDU (DNET y DADR). El router la reenvía al bus. La guía de BACnet/IP frente a MS/TP explica el paso del testigo y por qué una lectura encaminada a un bus lento tarda más.

Un cliente puede averiguar qué router sirve una red de dos formas. Puede enviar Who-Is-Router-To-Network; el router responde con I-Am-Router-To-Network y enumera las redes que hay detrás. También puede leer la red y la dirección de origen (SNET y SADR) de una respuesta encaminada, como I-Am, y registrar la dirección IP del router como ruta. Además, un router difunde I-Am-Router-To-Network por cada puerto al arrancar. Si la subred del cliente nunca recibe esas difusiones, no puede encontrar los buses situados detrás del router.

La norma solo permite una ruta activa entre dos dispositivos. Cada bus MS/TP necesita su propio número de red, distinto también del número de la red BACnet/IP. Si dos routers anuncian la misma red, dividen el tráfico o provocan un bucle. El contador de saltos de la NPDU empieza en 255 y cada router lo reduce en uno; un mensaje en bucle acaba descartándose, pero solo después de muchas vueltas. Para el BMS, un número duplicado parece hacer que los dispositivos se desplacen entre buses. Para detectarlo, envíe Who-Is-Router-To-Network sin número de red y capture las respuestas. Dos respuestas I-Am-Router-To-Network que incluyan el mismo número identifican los dos routers. Un Reject-Message-To-Network con motivo 1 (el router no conoce una ruta hacia esa red) también apunta a un fallo de numeración.

En muchas instalaciones el router es un puerto del controlador supervisor del BMS, de modo que la configuración de números de red del controlador es la del router. Revísela antes de añadir otro router.

Por qué se detienen las difusiones en los routers IP

BACnet utiliza difusiones para la vinculación dinámica (Who-Is, I-Am, Who-Has, I-Have), para TimeSynchronization y UTCTimeSynchronization, y para notificaciones no confirmadas enviadas a una dirección de difusión, como UnconfirmedCOVNotification y UnconfirmedEventNotification. La descripción de Newman sobre el campus de Cornell añade dos usos de la instalación: una orden de reducción de carga de emergencia y un valor compartido por muchos procesos de control.

En BACnet/IP, cada difusión es un datagrama UDP dirigido a la dirección de difusión de la subred, por ejemplo 10.1.10.255, en el puerto 47808 (0xBAC0). Los routers IP no lo reenvían. Desde RFC 2644 (1999), también descartan por defecto las difusiones dirigidas a una subred remota. Por eso un cliente en una subred no puede descubrir dispositivos en otra aunque funcione el tráfico unicast entre ambas.

BBMD

El anexo J de ASHRAE 135 define el BBMD. En la mayoría de las instalaciones es una función de un controlador supervisor o un router, no un dispositivo aparte. Cada BBMD mantiene una tabla de distribución de difusiones (BDT), con una entrada para el BBMD local y otra para cada BBMD remoto que deba recibir las difusiones de esa subred. Cada entrada contiene la dirección IP y el puerto UDP del BBMD y una máscara de distribución de cuatro octetos.

Cuando un dispositivo de su subred emite una difusión, el BBMD encapsula el mensaje en una Forwarded-NPDU, que conserva la dirección IP y el puerto del dispositivo de origen. La máscara de cada entrada BDT determina cómo llega a la subred remota. Con 255.255.255.255 (dos saltos), el BBMD envía la Forwarded-NPDU por unicast al BBMD remoto. Este la difunde en su subred y la envía a cada dispositivo externo registrado. Con una máscara de subred, por ejemplo 255.255.255.0 (un salto), el BBMD envía directamente una difusión dirigida a la subred remota. La variante de un salto falla donde los routers IP descartan las difusiones dirigidas, como hacen por defecto, y no puede atravesar NAT. Use dos saltos salvo que el equipo de TI de la instalación haya acordado reenviar difusiones dirigidas.

El apéndice 135-2008o (2009) modificó algunas reglas originales del anexo J. Las reglas actuales son:

ElementoRegla
BBMD por subredAl menos uno en cada subred participante. Dos en una subred solo si sus BDT no comparten ninguna entrada; de lo contrario, las difusiones forman bucles
MáscarasLa máscara de una subred dada es igual en todas las BDT que la enumeran
Tráfico entre BBMDUDP unicast, normalmente por el puerto 47808. Los cortafuegos entre subredes deben permitirlo en ambos sentidos
Lecturas tras el descubrimientoUnicast directo del cliente al dispositivo, sin pasar por los BBMD. Los cortafuegos también deben permitir este tráfico

El anexo J original exigía que todas las BDT de una red BACnet/IP fueran idénticas, de modo que todos los dispositivos recibieran todas las difusiones globales. Newman explica por qué Cornell no siguió esa regla: la mayoría de las difusiones solo importan dentro de un edificio. Cada BDT de Cornell enumera únicamente el BBMD local y el del centro de operaciones. Newman lo llama horizonte dividido: las otras redes quedan «bajo el horizonte». Los operadores del centro ven todo el tráfico de difusión. Un controlador mal configurado solo afecta a su edificio, por ejemplo si envía alarmas a un destinatario inexistente o una avalancha de notificaciones COV porque el incremento COV es demasiado pequeño. El apéndice 135-2008o eliminó la exigencia de BDT idénticas y ahora una BDT puede reenviar difusiones solo a las subredes que las necesitan.

El horizonte dividido tiene un coste. Un puesto de trabajo fuera del centro de operaciones no puede encontrar dispositivos de otros edificios mediante un Who-Is global. Necesita una vinculación estática entre la instancia del dispositivo y su dirección IP, o registrarse como dispositivo externo en el BBMD del edificio correspondiente.

Ejemplo de dos edificios

Una instalación tiene una única red BACnet/IP, número de red 10, distribuida entre dos edificios. Cada edificio tiene su propia subred IP y un controlador supervisor que actúa como BBMD y como router de sus buses MS/TP.

Edificio 1Edificio 2
Subred IP10.1.10.0/2410.2.10.0/24
BBMD y router10.1.10.2:4780810.2.10.2:47808
Buses MS/TPRedes 101 y 102Red 201
Puesto de trabajo BMS10.1.10.50Ninguno

Ambos BBMD tienen la misma BDT:

Tabla de distribución de difusión
10.1.10.2:47808   mask 255.255.255.255
10.2.10.2:47808   mask 255.255.255.255

El descubrimiento iniciado desde el BMS sigue estos pasos:

  1. El BMS difunde un Who-Is global a 10.1.10.255 como Original-Broadcast-NPDU.
  2. El BBMD 10.1.10.2 envía por unicast una Forwarded-NPDU con origen 10.1.10.50:47808 a 10.2.10.2.
  3. El BBMD 10.2.10.2 difunde la Forwarded-NPDU en 10.2.10.255. Su función de router también envía Who-Is al bus 201.
  4. El controlador 10.2.10.37 difunde su I-Am, que vuelve a 10.1.10.0/24 por ambos BBMD.
  5. El BMS obtiene 10.2.10.37:47808 de la dirección de origen de la Forwarded-NPDU y le envía peticiones ReadProperty por unicast. Los BBMD no intervienen en la lectura.
  6. El dispositivo MS/TP 5 del bus 201 responde a través del router. Su I-Am lleva SNET 201 y SADR 5, por lo que el BMS dirige las lecturas posteriores a 10.2.10.2, con DNET 201 y DADR 5.

Un portátil de puesta en marcha conectado a la VPN de la instalación en 10.50.0.23 se registra en 10.1.10.2 como dispositivo externo, con un tiempo de vida (TTL) de 300 s. El BBMD conserva la entrada durante 330 s. Configure el portátil para volver a registrarse cada 150 s, de modo que una pérdida aislada de registro no lo desconecte.

Dispositivos externos

Un dispositivo externo es un dispositivo BACnet/IP cuya subred IP no forma parte de la red BACnet/IP a la que quiere incorporarse. Ejemplos habituales son un portátil de puesta en marcha y un puesto de trabajo remoto. Necesita conectividad IP con un BBMD y utiliza estos mensajes BVLC del anexo J:

  1. El dispositivo envía Register-Foreign-Device al BBMD con un tiempo de vida (TTL) en segundos. El campo tiene dos octetos, por lo que el máximo es 65.535 s.
  2. El BBMD responde con BVLC-Result. El código 0x0000 indica éxito. El código 0x0030 es un rechazo de Register-Foreign-Device: el BBMD no acepta registros, su tabla está llena o una lista de direcciones permitidas del fabricante rechaza la dirección.
  3. El BBMD incorpora el dispositivo a su tabla de dispositivos externos (FDT) y conserva la entrada durante el TTL más un periodo fijo de gracia de 30 segundos (cláusula J.5.2.1).
  4. El BBMD envía al dispositivo las difusiones de su subred y de sus pares incluidos en la BDT como Forwarded-NPDU.
  5. El dispositivo envía sus difusiones al BBMD como Distribute-Broadcast-To-Network. El BBMD las difunde localmente, las reenvía a sus pares de la BDT y las envía a sus otros dispositivos externos. Si el dispositivo no está registrado, el BBMD responde con 0x0060.
  6. El dispositivo vuelve a registrarse antes de que venza la entrada. Si no lo hace, el BBMD la elimina. El dispositivo deja de recibir difusiones sin recibir ningún error.

El fabricante del BBMD determina el tamaño de la FDT. Consúltelo en el manual si varias herramientas deben registrarse simultáneamente. Acepte registros solo de los rangos de direcciones necesarios: un dispositivo registrado recibe todas las difusiones de la red.

La traducción de direcciones de red (NAT) entre un dispositivo externo y el BBMD provoca dos problemas. El primero está en el lado del dispositivo. El BBMD registra la dirección UDP de origen de la solicitud, que es la dirección y el puerto públicos del router NAT. Las difusiones reenviadas solo llegan al dispositivo mientras el router NAT mantenga abierta esa asignación. El apéndice 135-2008o indica que un dispositivo externo detrás de NAT debería volver a registrarse con frecuencia; el intervalo depende del router NAT y puede ser de 30 segundos o menos.

El segundo problema está en el lado del BBMD. Una Forwarded-NPDU transporta la dirección privada del dispositivo que originó la difusión; un cliente al otro lado del router NAT no puede acceder a ella. Un BBMD compatible con NAT coloca en ese campo la dirección y el puerto públicos del router NAT, y cada entrada BDT contiene la dirección pública del BBMD par. El soporte NAT es opcional y consta en el PICS del BBMD. Detrás de un mismo router NAT, solo un dispositivo de una red BACnet/IP puede ser accesible desde el lado público. Ese dispositivo encamina el tráfico hacia los demás, que deben pertenecer a otros números de red BACnet. La distribución de un salto no atraviesa NAT, por lo que estas redes emplean dos saltos.

Diseñar el descubrimiento de una instalación

Acuerde por escrito un plan con el responsable del BMS y el equipo de TI antes de instalar:

  1. Asigne un esquema de números de red e instancias de dispositivo para toda la instalación. Documéntelo antes de instalar.
  2. Enumere las subredes IP que transportan BACnet y el puerto UDP de cada una.
  3. Identifique el BBMD de cada subred participante, su dirección y su BDT, con la máscara de cada entrada.
  4. Permita UDP 47808 entre los BBMD y entre cada cliente y los dispositivos o routers que lee.
  5. Indique qué BBMD acepta dispositivos externos y qué rangos de direcciones admite.
  6. Decida qué difusiones necesita cada subred y configure las BDT en consecuencia.

El esquema de Cornell descrito por Newman hace que los números resulten legibles. El número de red se forma con el código de edificio de cuatro dígitos seguido de un dígito para la red del edificio; así, el edificio con código 2000 tiene redes de 20000 a 20009. La instancia de dispositivo añade dos dígitos más, FFFFNDD, y cada red admite hasta 100 dispositivos. Un técnico puede reconocer el edificio por cualquier dirección de una captura. Las instancias de dispositivo asignables van de 0 a 4.194.302; 4.194.303 está reservado. Valide cada instancia calculada: el código de edificio 4194 solo permite los sufijos de 000 a 302 y los códigos superiores no caben. En una instalación pequeña, puede usarse número de red = 100 × edificio + bus e instancia = 1000 × número de red + dirección MAC. El dispositivo MS/TP 12 del bus 2 del edificio 1 es entonces el dispositivo 102012. Elija el esquema antes: renumerar después de la entrega rompe todas las asociaciones de puntos, los registros de tendencias y las gráficas del BMS que guardan la instancia anterior.

Calcule el tráfico de difusión antes de elegir las BDT. Un Who-Is global sin intervalo de instancias provoca una respuesta I-Am de cada dispositivo. Con distribución de dos saltos entre n BBMD, cada I-Am cruza entre subredes n − 1 veces y se difunde en n subredes. En una instalación con 2.000 dispositivos y 10 BBMD, un único Who-Is global genera 18.000 Forwarded-NPDU entre BBMD y 20.000 difusiones locales, además de las copias destinadas a cada dispositivo externo. Un Who-Is limitado a un intervalo de instancias sigue llegando a todas las subredes; solo reduce las respuestas. Un Who-Is dirigido a un número de red (difusión remota) llega únicamente a esa red. Úselo cuando sepa dónde está el dispositivo.

Si el equipo de TI no permite reenviar difusiones BACnet entre subredes o por una WAN, considere BACnet Secure Connect (BACnet/SC). El apéndice 135-2016bj lo añadió en 2019. Cada nodo se conecta a un concentrador mediante WebSocket protegido con TLS; el concentrador distribuye las difusiones, así que no se necesitan BBMD. Cada dispositivo, o un router situado delante, debe admitir BACnet/SC.

Fallos y diagnóstico

Lea las BDT y FDT de cada BBMD con una herramienta BACnet (Read-BDT y Read-FDT) y compárelas. Después capture UDP 47808 a ambos lados del cortafuegos. En Wireshark, bvlc.function == 0x04 muestra las Forwarded-NPDU, bvlc.result los códigos de rechazo y bvlc.reg_ttl el TTL de cada registro.

SíntomaCausa probableComprobación
Aparecen dispositivos de la subred local, pero no de otrasFalta un BBMD en una subred, falta una entrada BDT o el cortafuegos bloquea UDP 47808 entre BBMDUse Read-BDT en cada BBMD. Capture Forwarded-NPDU en la subred remota
Aparecen los dispositivos remotos, pero las lecturas agotan el tiempo de esperaEl cortafuegos deja pasar el tráfico entre BBMD, pero bloquea el unicast entre cliente y dispositivoCapture la petición ReadProperty y busque la respuesta a ambos lados
Cada I-Am llega dos vecesHay dos BBMD en una subred con una entrada BDT compartida, o máscaras distintas para la misma subred en varias BDTLea y compare las BDT de todos los BBMD de esa subred
Un dispositivo externo encuentra dispositivos y luego deja de recibir respuestasEl registro ha caducado o se ha cerrado una asignación NATBusque la entrada y su tiempo restante con Read-FDT. Compare el intervalo entre registros con el TTL
El Who-Is de un dispositivo externo recibe 0x0060El dispositivo no está registrado en ese BBMDBusque Register-Foreign-Device y su BVLC-Result
Un registro recibe 0x0030El registro está desactivado, la FDT está llena o la dirección no está permitidaRevise la configuración de dispositivos externos del BBMD
Los dispositivos de un bus parecen cambiar de identidadDos routers usan el mismo número de redUse Who-Is-Router-To-Network y busque dos routers que anuncien la misma red

Encaminamiento con Edge

Edge en el Gateway ZGW-20 es un cliente BACnet/IP. Descubre dispositivos con un Who-Is global enviado a la dirección de difusión de su configuración BACnet, 255.255.255.255 por defecto, en el puerto UDP 47808 por defecto. Registra los dispositivos situados detrás de un router BACnet por su número de red y dirección MAC, y los lee a través del router. No se conecta directamente a un bus MS/TP.

Edge no se registra como dispositivo externo ni actúa como BBMD. Solo encuentra dispositivos de otra subred si los BBMD de la instalación llevan sus difusiones a la subred del Gateway. Sitúe el Gateway en la subred de los controladores o en una subred cuyo BBMD figure en las BDT de la instalación. Con horizonte dividido, el BBMD de la subred del Gateway y el BBMD de cada edificio que deba leer deben incluirse mutuamente en sus BDT. Tras el descubrimiento, Edge lee cada controlador por unicast, así que el cortafuegos debe permitir UDP 47808 entre el Gateway y cada controlador o router.

El botón Test Connection de la configuración BACnet de Edge hace ping a la dirección local configurada. No envía ninguna petición BACnet y no demuestra nada sobre UDP 47808 ni sobre los BBMD. Confirme cada controlador por su instancia de dispositivo en los resultados del descubrimiento y después con una prueba de sensor que lea un punto, antes de confiar en sus datos.

Preguntas frecuentes

¿Qué es un BBMD en BACnet?

Es un dispositivo de gestión de difusiones BACnet, definido en el anexo J de ASHRAE 135. Normalmente es una función de un controlador supervisor o router. Recibe difusiones BACnet en su subred IP y las envía como mensajes Forwarded-NPDU a los BBMD de su tabla de distribución; estos vuelven a difundirlas en sus subredes.

¿Necesito un BBMD?

Solo si los dispositivos BACnet/IP que deben descubrirse entre sí están en subredes IP distintas. En una misma subred reciben las difusiones sin BBMD. Cada subred participante necesita uno. Dos BBMD en una subred solo son admisibles si sus tablas no comparten entradas; de otro modo las difusiones forman bucles.

¿Qué es el registro de un dispositivo externo BACnet?

Permite que un dispositivo fuera de las subredes de una red BACnet/IP participe en sus difusiones. Envía Register-Foreign-Device a un BBMD con un tiempo de vida en segundos. El BBMD le reenvía difusiones y acepta las suyas como Distribute-Broadcast-To-Network. La entrada caduca 30 segundos después del tiempo de vida si no vuelve a registrarse.

¿Qué diferencia hay entre un router BACnet y un BBMD?

Un router conecta dos redes BACnet distintas, cada una con su propio número, como MS/TP y BACnet/IP. Un BBMD conecta subredes IP pertenecientes a una misma red BACnet/IP, que comparten un número de red, reenviando las difusiones entre ellas.

¿Puede registrarse el Gateway ZGW-20 como dispositivo externo?

No. Edge es un cliente BACnet/IP. No se registra como dispositivo externo ni actúa como BBMD. Sitúe el Gateway en la subred de los controladores o en una subred cuyo BBMD figure en las tablas de distribución de la instalación.