Protocolli e dati

BACnet e Modbus nell’integrazione degli edifici

Confronta BACnet e Modbus negli edifici: modelli dei dati, reti, discovery, unità, priorità di controllo, sicurezza e gateway tra protocolli.

Un client BACnet che legge analog-input 3 da un controllore ambiente riceve 21,5, l'unità degrees-Celsius e quattro flag di stato. Un client Modbus che legge il registro di ingresso 30012 da un contatore riceve 215 e nient'altro. Il numero diventa 21,5 °C solo quando qualcuno applica la mappa dei registri del produttore. Questa differenza determina gran parte del lavoro necessario per condividere i dati tra controllori BACnet e contatori Modbus nello stesso sito.

A confronto

BACnetModbus
NormaANSI/ASHRAE 135, anche ISO 16484-5Specifiche della Modbus Organization
Modello dei datiOggetti come analog-input, analog-value, binary-output, multi-state-value, schedule e trend-log, ciascuno con proprietàQuattro tabelle: coil, ingressi discreti, registri di ingresso e registri holding; ciascun registro è di 16 bit
IndirizzamentoIstanza del dispositivo (da 0 a 4.194.302), unica nell'intera internetwork, poi tipo e istanza dell'oggettoIndirizzo del server (da 1 a 247 su bus seriale) o indirizzo IP, poi numero di registro
Significato di un valoreNell'oggetto: nome, unità e flag di statoIn una mappa registri separata per ogni modello
RetiBACnet/IP, MS/TP su RS-485, BACnet/SC e altreModbus TCP; Modbus RTU su RS-485, oppure RS-232 per un solo dispositivo
Porta predefinitaUDP 47808 (0xBAC0)TCP 502
Ricerca dei dispositiviDiscovery con Who-Is e I-AmNessuna; bisogna configurare l'indirizzo di ciascun dispositivo
Ricezione dei cambiamentiPolling o sottoscrizioni change-of-value (COV)Solo polling
Lettura di molti valoriReadPropertyMultiple, dove il dispositivo lo supportaFino a 125 registri contigui per richiesta con funzione 03 o 04
ComandiArray di priorità a 16 livelli sugli oggetti comandabiliScritture dirette; prevale l'ultima scrittura
Allarmi e programmi orariOggetti e servizi standardEventuali registri specifici del dispositivo
SicurezzaBACnet/SC (TLS su WebSocket)Modbus Security (TLS) su TCP 802, implementato raramente
Dispositivi tipiciControllori HVAC, unità VAV, refrigeratori, supervisori BMSContatori elettrici, inverter, azionamenti, PLC

Oggetti e registri a confronto

Un punto di temperatura BACnet è un oggetto, per esempio analog-input 3 sul dispositivo 12001. Tra le sue proprietà ci sono Object_Name («Temperatura ambiente 2.14»), Present_Value (21,5), Units (degrees-Celsius) e Status_Flags. Status_Flags contiene quattro bit: in-alarm, fault, overridden e out-of-service. Un client può leggere il valore e anche capire se può fidarsene.

Units è un'enumerazione nella norma 135, quindi un client la interpreta senza un documento del produttore. Il valore dipende comunque dalla configurazione del controllore. Un analog-value impostato su no-units o su un'unità errata richiede un elenco dei punti proprio come un registro Modbus. I nomi degli oggetti cambiano tra produttori e siti e un controllore può pubblicare centinaia di oggetti. La guida agli oggetti BACnet spiega come preparare un elenco dei punti utilizzabile da un sistema ricevente.

La stessa temperatura ambiente come oggetto BACnet e registro Modbus A sinistra, l’ingresso analogico BACnet 3 del dispositivo 12001 restituisce nome, valore 21,5, unità gradi Celsius e quattro flag di stato. A destra, il registro di ingresso Modbus 30012 restituisce soltanto il numero 215: la mappa del produttore lo definisce un int16 con fattore di scala 0,1 in gradi Celsius. Il client deve applicare la mappa per ottenere 21,5 °C. BACnet: il dispositivo descrive il valore analog-input 3, dispositivo 12001 Object_Name "Temperatura stanza 2.14" Present_Value 21,5 Units degrees-Celsius Status_Flags 4 flag, nessuno attivo Modbus: la mappa descrive il valore registro di ingresso 30012 215 e nient’altro mappa dei registri (produttore) int16, scala 0,1, unità °C 215 × 0,1 = 21,5 °C Il client può stabilire se il valore è affidabile Una scala o un ordine delle word errati producono comunque un numero
La stessa temperatura ambiente letta via BACnet e via Modbus. BACnet restituisce il valore con unità e stato; Modbus restituisce 215, che la mappa dei registri converte in 21,5 °C.

Su un dispositivo Modbus, la stessa temperatura si trova nel registro di ingresso 30012, che contiene 215. La mappa specifica un int16 con fattore di scala 0,1 e unità °C. Due convenzioni causano gran parte degli errori di mappatura Modbus.

Primo: 30012 è un numero nella documentazione, non l'indirizzo sul filo. Il 3 iniziale indica un registro di ingresso e il conteggio parte da 30001 per l'indirizzo di protocollo 0. Il client legge quindi l'indirizzo 11 con la funzione 04. Un client impostato su 12 legge il registro successivo e può restituire un numero plausibile ma errato. Il convertitore degli indirizzi Modbus esegue questa conversione.

Secondo: un valore a 32 bit occupa due registri. La specifica Modbus mette per primo il byte alto di ogni registro, ma non definisce l'ordine dei due registri; i produttori adottano convenzioni diverse. Un totale di energia di 1.234,5 kWh come float32 è 0x449A seguito da 0x5000. Scambiando l'ordine delle parole si decodifica come 8.607.918.080. Verifica ogni punto a 32 bit rispetto a un valore noto e non nullo sul display del contatore. Il decodificatore dei registri Modbus mostra ordine di byte e parole per una coppia di registri; la guida alla mappa dei registri Modbus tratta tipi e fattori di scala.

Reti

BACnet/IP invia i messaggi BACnet in datagrammi UDP, sulla porta predefinita 47808. La discovery usa broadcast, che i router IP non inoltrano. Una rete BACnet su più sottoreti IP richiede quindi un BACnet broadcast management device (BBMD) in ciascuna sottorete. Ogni BBMD ha una tabella di distribuzione broadcast con i propri peer. Non collocare due BBMD nella stessa sottorete: inoltrerebbero entrambi gli stessi broadcast. Un singolo client in un'altra sottorete può registrarsi a tempo presso un BBMD come dispositivo esterno, con una durata in secondi, e deve rinnovare la registrazione prima della scadenza. La guida a routing e BBMD tratta entrambe le soluzioni.

MS/TP funziona su RS-485. I master usano indirizzi MAC da 0 a 127 e si passano un token. Solo chi possiede il token può avviare una richiesta. Gli slave hanno indirizzi fino a 254, rispondono alle richieste e non possiedono mai il token. Ogni dispositivo MS/TP deve supportare 9.600 e 38.400 bit/s. La norma definisce anche 19.200, 57.600, 76.800 e 115.200 bit/s come opzioni. Imposta Max_Master all'indirizzo master più alto sul bus, così i master non cercano indirizzi vuoti e il ciclo del token resta breve. La guida BACnet/IP e MS/TP li confronta.

BACnet/SC invia BACnet su WebSocket protetti da TLS. Ogni nodo si collega a un hub. Le connessioni dirette tra nodi sono facoltative.

Ogni dispositivo BACnet ha un'istanza da 0 a 4.194.302. L'istanza 4.194.303 è riservata come wildcard. L'istanza deve essere unica nell'intera internetwork, comprese tutte le reti dietro un router. Ogni rete BACnet ha inoltre un numero di rete, da 1 a 65.534, usato dai router. I duplicati delle istanze dei dispositivi sono un guasto comune di messa in servizio. Due controllori rispondono a Who-Is per la stessa istanza e un client che associa per istanza può leggere quello sbagliato. Cerca duplicati prima di attivare un secondo client. La guida alla discovery spiega come.

Modbus TCP funziona su TCP porta 502. Modbus RTU funziona su RS-485, oppure su RS-232 per un solo dispositivo. Un client interroga fino a 247 indirizzi server, ognuno dei quali risponde solo quando interrogato. La guida Modbus TCP e RTU li confronta.

Un bus MS/TP e un bus Modbus RTU possono usare lo stesso tipo di cavo, ma non condividere la stessa coppia. I frame sono diversi e i master MS/TP inviano token senza richiesta, disturbando il traffico Modbus.

Comandi e priorità

Un oggetto BACnet comandabile, per esempio un binary-output che avvia un ventilatore, dispone di un array di priorità a 16 slot. Ogni sistema che comanda l'oggetto scrive nel proprio slot. L'oggetto applica lo slot con il numero più basso che contiene un valore. La norma 135 assegna nomi a cinque slot: 1 sicurezza vita manuale, 2 sicurezza vita automatica, 5 controllo delle apparecchiature critiche, 6 minimo acceso/spento e 8 operatore manuale. Gli altri slot sono disponibili per l'uso sul sito. Quando tutti sono vuoti, l'oggetto usa Relinquish_Default.

Un comando resta nello slot finché il sistema che l'ha scritto non lo rilascia scrivendo null. Un guasto comune è un comando che nessuno rilascia. Supponiamo che un sistema energetico spenga un ventilatore alla priorità 12 durante un evento di risposta alla domanda e poi si fermi senza rilascio. Il ventilatore resta spento dopo l'evento, benché il programma BMS lo comandi acceso alla priorità 16, inferiore alla 12. Concorda slot e procedura di rilascio con il responsabile BMS prima della prima scrittura. Dopo una scrittura, leggi Priority_Array oltre a Present_Value.

Una scrittura Modbus sovrascrive il registro. Se un BMS e un sistema energetico scrivono entrambi lo stesso setpoint, prevale l'ultima scrittura e nessuno dei due sistemi lo sa. La guida all'array di priorità BACnet spiega l'interazione tra priorità, rilascio e valore predefinito.

Quale scegliere

Normalmente è l'apparecchiatura a determinare il protocollo. Il responsabile del sistema decide come collegarsi: il responsabile BMS detiene l'elenco dei punti BACnet e approva ogni scrittura.

SituazioneApproccio abituale
Contatori Modbus e BMS BACnetLeggi i contatori via Modbus. Fornisci al BMS i dati necessari tramite un Gateway o un sistema energetico, mappando ogni punto.
Impianto HVAC su BACnet/IP da analizzareLeggi direttamente gli oggetti BACnet come secondo client. Non scrivere senza l'accordo del responsabile BMS.
Controllori HVAC solo su MS/TPLeggi tramite il supervisore BMS, che già li interroga, o tramite un router BACnet verso BACnet/IP. Un router aggiunge le tue letture alla dorsale MS/TP, spesso a 38.400 o 76.800 bit/s: concorda l'intervallo di polling con il responsabile BMS.
Nuovi contatori secondari per un BMS esistenteScegli contatori con l'interfaccia più adatta al BMS oppure aggiungi un Gateway che pubblichi oggetti BACnet.

Mappatura fra i due protocolli

Un Gateway che pubblica letture di contatori Modbus come oggetti BACnet richiede una riga nella mappa per ciascun punto. La riga specifica registro e codice funzione, tipo di dato e ordine delle parole, fattore di scala, tipo e istanza dell'oggetto BACnet e valore Units.

La mappa richiede anche una regola di guasto se un contatore smette di rispondere. Un Gateway corretto imposta la proprietà Reliability dell'oggetto su communication-failure. Questo attiva il bit fault in Status_Flags e un BMS che verifica il flag sa che il valore non è corrente. Un Gateway che mantiene l'ultimo valore senza flag di guasto mostra una linea piatta che sembra una lettura reale. Per provare la regola, scollega il contatore e leggi Reliability e Status_Flags dal lato BACnet. La guida ai Gateway di protocollo elenca gli altri requisiti; la guida ai dati obsoleti spiega come gestire i valori vecchi a valle.

Sicurezza

Né BACnet/IP né Modbus TCP autenticano i client o cifrano i dati. Qualsiasi host che raggiunga UDP 47808 può scrivere su ogni oggetto che il controllore consente di modificare. Qualsiasi host che raggiunga TCP 502 può scrivere un registro holding. Colloca i controlli dell'edificio in una VLAN dedicata. Consenti UDP 47808 solo ai client BACnet e ai peer BBMD. Consenti TCP 502 solo al Gateway o al BMS che interroga i contatori. Non inoltrare nessuna delle due porte da Internet. Controlla la tabella di distribuzione broadcast di ogni BBMD: una voce errata inoltra tutti i broadcast locali a quell'indirizzo. BACnet/SC e Modbus Security aggiungono TLS, ma devono essere supportati da entrambe le estremità e gran parte delle apparecchiature installate non li supporta.

BACnet e Modbus con Edge

Edge sul Gateway ZGW-20 legge entrambi i protocolli. Come client BACnet/IP, interroga Present_Value di oggetti analogici, binari e multistato di tipo input, output e value. Una configurazione di rete contiene fino a 16 controllori, ciascuno con un massimo di 64 punti. Edge legge ogni minuto o a un intervallo allineato al minuto, per esempio 300 secondi. Come client Modbus, legge apparecchiature Modbus TCP e RTU, con tipo di dato e ordine di byte e parole impostati per ciascun punto. Le letture dei contatori e sensori Zigbee EpiSensor sono accanto a questi punti, ognuna con un identificativo di esportazione, e raggiungono le stesse destinazioni.

Edge può anche fornire letture a un BMS come registri Modbus TCP. Il suo Modbus Server ascolta su TCP 10502 e mappa ogni lettura su un coil o su uno o due registri come int16, uint16, int32, uint32 o float32. Quando una sorgente smette di inviare dati, il registro mantiene l'ultimo valore. Il BMS deve quindi verificare autonomamente se il dato è obsoleto, per esempio con un allarme quando un contatore di energia smette di avanzare.

Il client BACnet ha dei limiti. Usa il polling, non le sottoscrizioni COV. La guida al COV confronta i metodi. Non si collega direttamente a un bus MS/TP: i controllori MS/TP si leggono attraverso un router BACnet. Le impostazioni non prevedono la registrazione come dispositivo esterno; colloca quindi il Gateway nella sottorete dei controllori o chiedi al responsabile BMS di fornire il routing. Le scritture su oggetti output e value funzionano solo per i punti che un amministratore abilita al controllo. Ogni scrittura usa una priorità da 1 a 16, con 16 se non specificata. Edge non può rilasciare un comando, perché la sua scrittura rifiuta un valore null. Concorda una procedura di rilascio con il proprietario dell'apparecchiatura prima di qualsiasi scrittura. L'applicazione di integrazione contatori per BMS e SCADA mostra un'architettura completa.

Domande frequenti

Qual è la differenza principale tra BACnet e Modbus?

BACnet porta il significato insieme ai dati: ogni punto è un oggetto con nome, valore attuale, unità e flag di stato, e i dispositivi possono essere scoperti. Modbus trasporta numeri in registri; significato, unità e fattore di scala derivano da una mappa separata per ogni modello.

Quando un progetto richiede BACnet anziché Modbus?

Quando il sistema ricevente richiede notifiche change-of-value, oggetti standard per allarmi, programmi orari o trend, oppure comandi che rispettino le priorità degli altri sistemi. Per leggere dati energetici tramite polling, Modbus basta ed è l’interfaccia di gran parte dei contatori elettrici.

Quale porta usa BACnet/IP?

Per impostazione predefinita usa la porta UDP 47808 (0xBAC0). Un sito può usare altre porte UDP per separare reti BACnet/IP. Modbus TCP usa la porta TCP 502.

I dispositivi BACnet e Modbus possono funzionare insieme?

Sì, tramite un Gateway o un controllore che supporta entrambi. Ogni punto richiede una mappatura tra registro Modbus e oggetto BACnet, con tipo di dato, ordine delle parole, fattore di scala e unità. Serve anche una regola di guasto: se il dispositivo Modbus smette di rispondere, l’oggetto BACnet deve segnalare Reliability communication-failure, non mantenere l’ultimo valore come se fosse corrente.