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
| BACnet | Modbus | |
|---|---|---|
| Norma | ANSI/ASHRAE 135, anche ISO 16484-5 | Specifiche della Modbus Organization |
| Modello dei dati | Oggetti 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 |
| Indirizzamento | Istanza del dispositivo (da 0 a 4.194.302), unica nell'intera internetwork, poi tipo e istanza dell'oggetto | Indirizzo del server (da 1 a 247 su bus seriale) o indirizzo IP, poi numero di registro |
| Significato di un valore | Nell'oggetto: nome, unità e flag di stato | In una mappa registri separata per ogni modello |
| Reti | BACnet/IP, MS/TP su RS-485, BACnet/SC e altre | Modbus TCP; Modbus RTU su RS-485, oppure RS-232 per un solo dispositivo |
| Porta predefinita | UDP 47808 (0xBAC0) | TCP 502 |
| Ricerca dei dispositivi | Discovery con Who-Is e I-Am | Nessuna; bisogna configurare l'indirizzo di ciascun dispositivo |
| Ricezione dei cambiamenti | Polling o sottoscrizioni change-of-value (COV) | Solo polling |
| Lettura di molti valori | ReadPropertyMultiple, dove il dispositivo lo supporta | Fino a 125 registri contigui per richiesta con funzione 03 o 04 |
| Comandi | Array di priorità a 16 livelli sugli oggetti comandabili | Scritture dirette; prevale l'ultima scrittura |
| Allarmi e programmi orari | Oggetti e servizi standard | Eventuali registri specifici del dispositivo |
| Sicurezza | BACnet/SC (TLS su WebSocket) | Modbus Security (TLS) su TCP 802, implementato raramente |
| Dispositivi tipici | Controllori HVAC, unità VAV, refrigeratori, supervisori BMS | Contatori 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.
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.
| Situazione | Approccio abituale |
|---|---|
| Contatori Modbus e BMS BACnet | Leggi 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 analizzare | Leggi direttamente gli oggetti BACnet come secondo client. Non scrivere senza l'accordo del responsabile BMS. |
| Controllori HVAC solo su MS/TP | Leggi 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 esistente | Scegli 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.