Un Who-Is del BMS che trova solo i dispositivi della propria sottorete, o ne trova alcuni due volte, indica quasi sempre un problema di instradamento. I messaggi BACnet attraversano i confini di rete in due modi. Un router BACnet si trova fra un trunk MS/TP e BACnet/IP; un BBMD (dispositivo di gestione dei broadcast BACnet) porta i broadcast fra le sottoreti IP di una stessa rete BACnet/IP, perché i router IP li scartano. Un dispositivo su un’altra sottorete può registrarsi presso un BBMD come dispositivo esterno (foreign device).
Questa guida fa parte della serie BACnet e protocolli per edifici. Leggi prima la guida al rilevamento per le istanze dei dispositivi e i numeri di rete.
Router BACnet
Un router BACnet ha una porta su ogni rete che collega, per esempio una porta BACnet/IP e due porte MS/TP. La clausola 6 di ASHRAE 135 definisce il livello di rete che usa. Ogni porta ha un numero di rete da 1 a 65.534. Il numero 65.535 significa «tutte le reti» e viene usato per i broadcast globali.
L'indirizzo completo di un dispositivo MS/TP comprende il numero di rete e il suo indirizzo MAC di un ottetto. I master usano MAC da 0 a 127, gli slave possono arrivare a 254 e 255 è il broadcast MS/TP. Un client BACnet/IP invia una richiesta per quel dispositivo all'indirizzo IP del router, con numero di rete del trunk e MAC nei campi di destinazione dell'NPDU (DNET e DADR). Il router la inoltra al trunk. La guida BACnet/IP e MS/TP spiega il passaggio del token e perché una lettura instradata verso un trunk lento richiede più tempo.
Un client apprende quale router serve una rete in due modi. Può inviare Who-Is-Router-To-Network e il router risponde con I-Am-Router-To-Network, che elenca le reti dietro di sé. Oppure può leggere rete e indirizzo di origine (SNET e SADR) in una risposta instradata, per esempio un I-Am, e annotare l'indirizzo IP del router come percorso. All'avvio, un router trasmette anche I-Am-Router-To-Network su ogni porta. Se la sottorete del client non riceve mai questi broadcast, il client non trova i trunk dietro il router.
Lo standard consente un solo percorso attivo fra due dispositivi qualsiasi. Ogni trunk MS/TP richiede un proprio numero di rete, diverso da quello della rete BACnet/IP. Due router che dichiarano la stessa rete ne dividono il traffico o lo fanno girare in ciclo. Il conteggio degli hop dell'NPDU parte da 255 e ogni router lo riduce di uno: alla fine un messaggio in ciclo viene scartato, ma solo dopo molti passaggi sulla rete. Per un BMS, un numero di rete duplicato sembra indicare dispositivi che si spostano fra trunk. Per individuarlo, invia Who-Is-Router-To-Network senza numero di rete e acquisisci le risposte. Due risposte I-Am-Router-To-Network che elencano lo stesso numero identificano i due router. Anche un Reject-Message-To-Network con motivo 1 (il router non ha un percorso verso quella rete) indica un possibile errore di numerazione.
In molti siti il router è una porta del controllore di supervisione del BMS: le impostazioni dei numeri di rete del controllore sono quindi quelle del router. Leggile prima di aggiungere un secondo router.
Perché i broadcast si fermano ai router IP
BACnet usa broadcast per il binding dinamico (Who-Is, I-Am, Who-Has, I-Have), per TimeSynchronization e UTCTimeSynchronization e per notifiche non confermate inviate a un indirizzo broadcast, come UnconfirmedCOVNotification e UnconfirmedEventNotification. Il resoconto di Newman sul campus Cornell aggiunge due usi locali: un comando di distacco d'emergenza dei carichi e un valore condiviso da molti processi di controllo.
In BACnet/IP, ogni broadcast è un datagramma UDP all'indirizzo broadcast della sottorete, per esempio 10.1.10.255, sulla porta 47808 (0xBAC0). I router IP non lo inoltrano. Dal RFC 2644 (1999), per impostazione predefinita i router scartano anche i broadcast diretti verso una sottorete remota. Un client su una sottorete non può quindi rilevare i dispositivi su un'altra, anche se il traffico unicast fra le due funziona.
BBMD
L'allegato J di ASHRAE 135 definisce il BBMD. Nella maggior parte dei siti è una funzione interna a un controllore di supervisione o a un router, non un dispositivo separato. Ogni BBMD mantiene una tabella di distribuzione dei broadcast (BDT). La BDT contiene una voce per il BBMD locale e una per ciascun BBMD remoto che deve ricevere i broadcast di questa sottorete. Ogni voce contiene indirizzo IP e porta UDP del BBMD e una maschera di distribuzione dei broadcast di 4 ottetti.
Quando un dispositivo della sua sottorete trasmette un broadcast, il BBMD racchiude il messaggio in un Forwarded-NPDU. Questo porta l'indirizzo IP e la porta del dispositivo che lo ha inviato. La maschera di ogni voce BDT determina come il messaggio raggiunge la sottorete remota. Con maschera 255.255.255.255 (due hop), il BBMD invia il Forwarded-NPDU via unicast al BBMD remoto. Quest'ultimo lo trasmette sulla propria sottorete e lo invia a ogni dispositivo esterno registrato presso di esso. Con la maschera della sottorete, per esempio 255.255.255.0 (un hop), il BBMD invia un broadcast diretto alla sottorete remota. La modalità a un hop fallisce dove i router IP scartano i broadcast diretti, come fanno per impostazione predefinita, e non attraversa NAT. Usa due hop, salvo che il reparto IT del sito abbia concordato l'inoltro dei broadcast diretti.
L'addendum 135-2008o (2009) ha modificato alcune regole dell'allegato J originale. Le regole attuali sono:
| Voce | Regola |
|---|---|
| BBMD per sottorete | Almeno uno su ogni sottorete partecipante. Due sulla stessa sottorete solo se le BDT non condividono voci; altrimenti i broadcast girano in ciclo fra loro |
| Maschere | La maschera di una data sottorete è uguale in ogni BDT che la elenca |
| Traffico fra BBMD | UDP unicast, di solito sulla porta 47808. I firewall fra le sottoreti devono lasciarlo passare in entrambe le direzioni |
| Letture dopo il rilevamento | Unicast dal client al dispositivo, senza passare dai BBMD. I firewall devono consentire anche questo traffico |
L'allegato J originale richiedeva che tutte le BDT di una rete BACnet/IP fossero identiche, affinché ogni dispositivo ricevesse ogni broadcast globale. Newman spiega perché Cornell non seguiva questa regola: la maggior parte dei broadcast conta solo all'interno di un edificio. Ogni BDT di Cornell elenca soltanto il BBMD locale e quello del centro operativo. Newman chiama questa configurazione «orizzonte diviso» (split horizon), perché le altre reti restano «sotto l'orizzonte». Gli operatori del centro vedono tutto il traffico broadcast. Un controllore configurato male riguarda solo il proprio edificio, per esempio se invia allarmi a un destinatario inesistente o una raffica di notifiche COV perché l'incremento COV è troppo piccolo. L'addendum 135-2008o ha eliminato la regola delle BDT identiche: una BDT può ora inoltrare i broadcast soltanto alle sottoreti che ne hanno bisogno.
L'orizzonte diviso ha un costo. Una postazione esterna al centro operativo non trova i dispositivi di altri edifici con un Who-Is globale. Richiede un'associazione statica dall'istanza del dispositivo all'indirizzo IP, oppure deve registrarsi come dispositivo esterno presso il BBMD dell'edificio desiderato.
Esempio con due edifici
Un sito ha una rete BACnet/IP, numero di rete 10, distribuita su due edifici. Ogni edificio ha una propria sottorete IP e un controllore di supervisione che svolge sia il ruolo di BBMD sia quello di router verso i trunk MS/TP dell'edificio.
| Edificio 1 | Edificio 2 | |
|---|---|---|
| Sottorete IP | 10.1.10.0/24 | 10.2.10.0/24 |
| BBMD e router | 10.1.10.2:47808 | 10.2.10.2:47808 |
| Trunk MS/TP | Reti 101 e 102 | Rete 201 |
| Postazione BMS | 10.1.10.50 | Nessuna |
Entrambi i BBMD hanno la stessa BDT:
10.1.10.2:47808 mask 255.255.255.255
10.2.10.2:47808 mask 255.255.255.255Il rilevamento dal BMS avviene così:
- Il BMS trasmette un Who-Is globale a 10.1.10.255 come Original-Broadcast-NPDU.
- BBMD 10.1.10.2 invia via unicast a 10.2.10.2 un Forwarded-NPDU con origine 10.1.10.50:47808.
- BBMD 10.2.10.2 trasmette il Forwarded-NPDU su 10.2.10.255. La sua funzione di router invia anche il Who-Is sul trunk 201.
- Il controllore 10.2.10.37 trasmette il proprio I-Am, che torna a 10.1.10.0/24 lungo lo stesso percorso attraverso entrambi i BBMD.
- Il BMS legge 10.2.10.37:47808 dall'indirizzo di origine nel Forwarded-NPDU e invia richieste ReadProperty a quell'indirizzo via unicast. I BBMD non partecipano alla lettura.
- Il dispositivo MS/TP 5 sul trunk 201 risponde tramite il router. Il suo I-Am contiene SNET 201 e SADR 5, perciò il BMS invia le letture successive a 10.2.10.2 con DNET 201 e DADR 5.
Un portatile usato per la messa in servizio sulla VPN del sito, all'indirizzo 10.50.0.23, si registra presso 10.1.10.2 come dispositivo esterno con tempo di vita di 300 s. Il BBMD conserva la voce per 330 s. Imposta una nuova registrazione del portatile ogni 150 s, così la perdita di una registrazione non lo esclude.
Dispositivi esterni
Un dispositivo esterno è un dispositivo BACnet/IP la cui sottorete IP non fa parte della rete BACnet/IP a cui vuole unirsi. Esempi tipici sono un portatile di messa in servizio e una postazione remota. Richiede raggiungibilità IP verso un BBMD e usa questi messaggi BVLC dell'allegato J:
- Il dispositivo invia Register-Foreign-Device al BBMD con un tempo di vita (TTL) in secondi. Il campo occupa due ottetti, quindi il massimo è 65.535 s.
- Il BBMD risponde con BVLC-Result. Il codice 0x0000 indica successo. Il codice 0x0030 è un NAK di Register-Foreign-Device: il BBMD non accetta registrazioni, la tabella è piena oppure una allow-list del produttore rifiuta l'indirizzo.
- Il BBMD aggiunge il dispositivo alla propria tabella dei dispositivi esterni (FDT). Mantiene la voce per il TTL più un periodo fisso di tolleranza di 30 secondi (clausola J.5.2.1).
- Il BBMD invia al dispositivo i broadcast della propria sottorete e dei peer nella BDT come Forwarded-NPDU.
- Il dispositivo invia i propri broadcast al BBMD come Distribute-Broadcast-To-Network. Il BBMD li trasmette localmente, li inoltra ai peer nella BDT e li invia agli altri dispositivi esterni. Se il dispositivo non è registrato, il BBMD risponde con il codice 0x0060.
- Il dispositivo si registra di nuovo prima della scadenza della voce. In caso contrario, il BBMD la elimina. Il dispositivo smette di ricevere i broadcast senza ottenere un errore.
La dimensione della FDT dipende dal produttore del BBMD. Consultala nel manuale quando devono registrarsi più strumenti contemporaneamente. Accetta registrazioni soltanto dagli intervalli di indirizzi che ne hanno bisogno: un dispositivo registrato riceve ogni broadcast della rete.
La traduzione degli indirizzi di rete (NAT) fra un dispositivo esterno e il BBMD causa due guasti. Il primo è sul lato del dispositivo. Il BBMD registra l'indirizzo UDP di origine della registrazione, ossia indirizzo pubblico e porta del router NAT. I broadcast inoltrati raggiungono il dispositivo solo finché il router NAT mantiene aperta quell'associazione. L'addendum 135-2008o dice che un dispositivo esterno dietro NAT dovrebbe registrarsi spesso e che l'intervallo dipende dal router NAT e può essere di 30 secondi o meno.
Il secondo guasto è sul lato del BBMD. Un Forwarded-NPDU contiene l'indirizzo privato del dispositivo che ha inviato il broadcast, irraggiungibile per un client dall'altro lato del router NAT. Un BBMD che supporta NAT inserisce invece in quel campo indirizzo globale e porta del router NAT, e ogni voce BDT contiene l'indirizzo globale del BBMD peer. Il supporto NAT è opzionale ed è dichiarato nel PICS del BBMD. Dietro un router NAT, dal lato globale si può raggiungere un solo dispositivo di una rete BACnet/IP. Quel dispositivo instrada verso gli altri, che devono avere numeri di rete BACnet diversi. La distribuzione a un hop non attraversa NAT, quindi queste reti usano due hop.
Progettare il rilevamento per un sito
Concorda un piano scritto con il responsabile BMS e il reparto IT del sito prima dell'installazione:
- Assegna uno schema di numeri di rete e istanze dei dispositivi per l'intero sito. Registralo prima dell'installazione.
- Elenca le sottoreti IP che trasportano BACnet e la porta UDP di ciascuna.
- Indica il BBMD di ogni sottorete partecipante, il suo indirizzo e la sua BDT, con la maschera di ogni voce.
- Apri UDP 47808 fra i BBMD e fra ciascun client e i dispositivi o router che legge.
- Indica il BBMD che accetta dispositivi esterni e gli intervalli di indirizzi accettati.
- Decidi quali broadcast servono a ogni sottorete e scrivi le BDT di conseguenza.
Lo schema Cornell di Newman mostra come rendere leggibili i numeri. Un numero di rete comprende il codice di struttura a quattro cifre dell'edificio, seguito da una cifra per la rete nell'edificio: le reti dell'edificio con codice 2000 vanno da 20000 a 20009. Un'istanza di dispositivo aggiunge altre due cifre, FFFFNDD, quindi ogni rete contiene fino a 100 dispositivi. Un tecnico può ricavare l'edificio da qualsiasi indirizzo in un'acquisizione. Le istanze di dispositivo assegnabili vanno da 0 a 4.194.302; 4.194.303 è riservato. Verifica ogni istanza calcolata: il codice di edificio 4194 consente solo i suffissi da 000 a 302 e i codici superiori non rientrano nel limite. In un sito più piccolo, usa il numero di rete 100 × edificio + trunk e l'istanza 1000 × numero di rete + indirizzo MAC. Il dispositivo MS/TP 12 sul trunk 2 dell'edificio 1 diventa il dispositivo 102012. Scegli prima lo schema. Rinumerare dopo la consegna rompe ogni associazione dei punti BMS, registro dei trend e grafica che conserva la vecchia istanza.
Conta il carico dei broadcast prima di scegliere le BDT. Un Who-Is globale senza intervallo di istanze riceve un I-Am da ogni dispositivo. Con distribuzione a due hop fra n BBMD, ogni I-Am attraversa le sottoreti n − 1 volte e viene trasmesso come broadcast su n sottoreti. In un sito con 2.000 dispositivi e 10 BBMD, un Who-Is globale genera 18.000 Forwarded-NPDU fra BBMD e 20.000 broadcast locali, oltre alle copie per ciascun dispositivo esterno. Un Who-Is con intervallo di istanze raggiunge comunque ogni sottorete; diminuiscono soltanto le risposte. Un Who-Is inviato a un numero di rete (broadcast remoto) raggiunge soltanto quella rete. Usalo quando sai dove si trova il dispositivo.
Se il reparto IT non inoltra broadcast BACnet fra sottoreti o su una WAN, usa BACnet Secure Connect (BACnet/SC). L'addendum 135-2016bj lo ha introdotto nel 2019. Ogni nodo si connette a un hub tramite un WebSocket protetto da TLS e l'hub distribuisce i broadcast, quindi la rete non richiede BBMD. Ogni dispositivo, oppure un router davanti a esso, deve supportare BACnet/SC.
Guasti e come individuarli
Leggi BDT e FDT di ogni BBMD con uno strumento BACnet (Read-BDT e Read-FDT) e confrontale. Acquisisci poi il traffico UDP 47808 sui due lati del firewall. In Wireshark, bvlc.function == 0x04 mostra i Forwarded-NPDU, bvlc.result i codici NAK e bvlc.reg_ttl il TTL di ciascuna registrazione.
| Sintomo | Causa probabile | Verifica |
|---|---|---|
| Compaiono i dispositivi della sottorete locale, non gli altri | Manca un BBMD su una sottorete, manca una voce BDT o un firewall blocca UDP 47808 fra BBMD | Read-BDT su ogni BBMD. Acquisisci i Forwarded-NPDU sulla sottorete remota |
| Compaiono i dispositivi remoti, ma le letture vanno in timeout | Il firewall consente il traffico fra BBMD ma blocca l'unicast dal client al dispositivo | Acquisisci la richiesta ReadProperty e cerca la risposta da entrambi i lati |
| Ogni I-Am arriva due volte | Due BBMD sulla stessa sottorete con una voce BDT condivisa, oppure maschere diverse per una sottorete in BDT diverse | Esegui Read-BDT su tutti i BBMD della sottorete e confronta le voci |
| Un dispositivo esterno trova i dispositivi, poi smette | Registrazione scaduta oppure associazione NAT chiusa | Esegui Read-FDT per la voce e il tempo residuo. Confronta l'intervallo di nuova registrazione con il TTL |
| Il Who-Is di un dispositivo esterno riceve il codice 0x0060 | Il dispositivo non è registrato presso quel BBMD | Cerca Register-Foreign-Device e il relativo BVLC-Result |
| La registrazione riceve il codice 0x0030 | Registrazione disabilitata, FDT piena o indirizzo non consentito | Impostazioni dei dispositivi esterni del BBMD |
| I dispositivi su un trunk sembrano cambiare identità | Due router usano lo stesso numero di rete | Who-Is-Router-To-Network, poi cerca due router che elencano la stessa rete |
Instradamento con Edge
Edge sul Gateway ZGW-20 è un client BACnet/IP. Rileva i dispositivi con un Who-Is globale inviato all'indirizzo broadcast nelle impostazioni BACnet, 255.255.255.255 per impostazione predefinita, sulla porta UDP 47808 per impostazione predefinita. Registra i dispositivi dietro un router BACnet con numero di rete e indirizzo MAC e li legge attraverso quel router. Non si connette direttamente a un trunk MS/TP.
Edge non si registra come dispositivo esterno e non opera come BBMD. Trova dispositivi su un'altra sottorete solo quando i BBMD del sito portano i broadcast alla sottorete del Gateway. Metti il Gateway sulla sottorete dei controllori oppure su una sottorete il cui BBMD è presente nelle BDT del sito. Con un orizzonte diviso, il BBMD della sottorete del Gateway e il BBMD di ogni edificio da cui legge devono elencarsi a vicenda. Dopo il rilevamento, Edge legge ogni controllore via unicast: il firewall deve quindi lasciar passare UDP 47808 fra Gateway e ogni controllore o router.
Il pulsante Test Connection nelle impostazioni BACnet di Edge esegue un ping dell'indirizzo locale configurato. Non invia una richiesta BACnet e non dimostra nulla sulla porta UDP 47808 o sui BBMD. Conferma ogni controllore tramite la sua istanza nei risultati del rilevamento e poi con la prova di un sensore che legge un punto, prima di fare affidamento sui suoi dati.
Domande frequenti
Che cos’è un BBMD in BACnet?
È un dispositivo di gestione dei broadcast BACnet, definito nell’allegato J di ASHRAE 135. Di solito è una funzione interna a un controllore di supervisione o a un router. Riceve i broadcast BACnet sulla propria sottorete IP e li invia come messaggi Forwarded-NPDU ai BBMD elencati nella sua tabella di distribuzione dei broadcast, che li ritrasmettono sulle rispettive sottoreti.
Mi serve un BBMD?
Solo quando i dispositivi BACnet/IP che devono rilevarsi a vicenda si trovano su sottoreti IP diverse. Sulla stessa sottorete vedono i broadcast reciproci senza BBMD. Ogni sottorete partecipante richiede un BBMD. Due BBMD sulla stessa sottorete sono ammessi solo se le loro tabelle non condividono voci, perché le voci condivise creano cicli di broadcast.
Che cos’è la registrazione di un dispositivo esterno BACnet?
Permette a un dispositivo esterno alle sottoreti di una rete BACnet/IP di partecipare ai suoi broadcast. Il dispositivo invia Register-Foreign-Device a un BBMD con un tempo di vita in secondi. Il BBMD gli inoltra i broadcast e accetta i suoi come messaggi Distribute-Broadcast-To-Network. La voce scade 30 secondi dopo il tempo di vita se il dispositivo non si registra di nuovo.
Qual è la differenza fra un router BACnet e un BBMD?
Un router collega due reti BACnet diverse, ciascuna con un numero di rete proprio, come MS/TP e BACnet/IP. Un BBMD collega sottoreti IP che appartengono alla stessa rete BACnet/IP e condividono quindi un numero di rete, inoltrando i broadcast fra esse.
Il Gateway ZGW-20 può registrarsi come dispositivo esterno?
No. Edge è un client BACnet/IP. Non si registra come dispositivo esterno e non opera come BBMD. Metti il Gateway sulla sottorete dei controllori o su una sottorete il cui BBMD compare nelle tabelle di distribuzione dei broadcast del sito.