Un oggetto BACnet comandabile, per esempio un'uscita binaria che avvia un ventilatore o un valore analogico che mantiene un setpoint, non assume semplicemente l'ultimo valore scritto. Un sistema di sicurezza, un operatore e un programma orario possono comandare lo stesso ventilatore senza sovrapporsi: ciascuno scrive in una posizione distinta dell'array delle priorità.
Questa guida fa parte della serie BACnet e protocolli per edifici.
Come decide l'array
Ognuna delle 16 posizioni contiene un valore oppure NULL (vuota). La proprietà Present_Value dell'oggetto assume il valore della prima posizione non NULL, contando da 1. La priorità 1 è la più alta. Se tutte le posizioni sono NULL, Present_Value assume il valore di Relinquish_Default dell'oggetto.
Lo standard assegna un nome a cinque priorità. Le altre possono essere attribuite dal sito:
| Priorità | Uso previsto dallo standard |
|---|---|
| 1 | Sicurezza delle persone, intervento manuale |
| 2 | Sicurezza delle persone, intervento automatico |
| 3, 4 | Disponibili |
| 5 | Controllo di apparecchiature critiche |
| 6 | Tempo minimo di accensione/spegnimento |
| 7 | Disponibile |
| 8 | Operatore manuale |
| Da 9 a 16 | Disponibili; programmi orari e controllo ordinario usano spesso le priorità più basse |
In un piano comune, i programmi orari usano la priorità 16, la gestione dell'energia o la risposta alla domanda una priorità fra 9 e 15, e le forzature dell'operatore la priorità 8. Documenta il piano nell'elenco dei punti.
Un esempio pratico
Un ventilatore di mandata (binary-output 4) ha Relinquish_Default impostato su inattivo (spento):
| Fase | Array delle priorità | Present_Value |
|---|---|---|
| Inizio: tutte le posizioni sono NULL | Spento (Relinquish_Default) | |
| Il programma orario scrive acceso a 16 | 16 = acceso | Acceso |
| Il sistema di risposta alla domanda scrive spento a 12 | 12 = spento, 16 = acceso | Spento |
| Un operatore scrive acceso a 8 | 8 = acceso, 12 = spento, 16 = acceso | Acceso |
| L'evento finisce; il sistema di risposta alla domanda scrive NULL a 12 | 8 = acceso, 16 = acceso | Acceso |
| L'operatore rilascia la priorità 8 | 16 = acceso | Acceso |
| Il programma orario rilascia la priorità 16 di notte | Spento (Relinquish_Default) |
Ne seguono due lezioni. Il comando del sistema di risposta alla domanda era stato accettato, ma non aveva effetto finché l'operatore occupava la priorità 8. E se quel sistema non avesse rilasciato la priorità 12, il ventilatore sarebbe rimasto spento anche dopo la riattivazione del programma orario al mattino.
Rilasciare il comando, non sovrascriverlo
Per terminare un comando, scrivi NULL nella stessa posizione di priorità. Scrivere il valore opposto non equivale a rilasciarla: la posizione resta occupata e continua a prevalere su ogni priorità inferiore. Comandi dimenticati a priorità intermedie sono una causa frequente di impianti che ignorano il programma orario settimane dopo una prova.
Alcuni client non possono inviare NULL o nascondono questa funzione dietro un altro metodo. La documentazione Beckhoff, per esempio, descrive come la sua libreria BACnet scrive NULL inviando un valore speciale. Prima di scrivere un comando, verifica come il tuo client lo rilascia.
Controlla anche la funzione Minimum On/Off alla priorità 6. Un'uscita binaria con tempi minimi di accensione e spegnimento scrive temporaneamente il proprio valore alla priorità 6 dopo ogni cambio di stato; un comando a priorità inferiore potrebbe quindi essere ritardato.
Provare una scrittura in sicurezza
- Concorda con il responsabile dell'apparecchiatura oggetto, priorità, valore, durata e modalità di rilascio.
- Prima della prova, leggi e registra l'intero Priority_Array e Present_Value.
- Scrivi il comando. Leggi di nuovo Priority_Array: il tuo valore compare nella posizione concordata?
- Controlla Present_Value e l'impianto fisico. Se una posizione a priorità superiore contiene un valore, il tuo comando non ha effetto.
- Rilascia scrivendo NULL alla stessa priorità, poi rileggi l'array.
- Verifica che l'impianto sia tornato allo stato atteso.
Se una scrittura scade per timeout, l'esito è sconosciuto: non presumere che il comando sia fallito. Leggi l'array prima di riprovare.
Priorità e Modbus
Modbus non dispone di un array delle priorità. Una scrittura modifica il registro e prevale l'ultimo sistema che scrive. Se un dispositivo Modbus è condiviso tra un BMS e un sistema energetico, concorda chi può scrivere oppure usa un controllore che arbitri i comandi. La guida BACnet e Modbus confronta i due protocolli.
Scritture con Edge
Edge sul Gateway ZGW-20 può scrivere sugli oggetti BACnet di uscita e valore che un amministratore ha abilitato al controllo. Ogni scrittura usa una priorità scelta da 1 a 16; se non ne viene impostata una, usa 16. Edge non rilascia un comando scrivendo NULL: prima della prova, concorda come rilasciarlo, di norma con gli strumenti del BMS. Tratta ogni scrittura come la prova di controllo autorizzata descritta sopra e consulta la guida al controllo locale per pianificare i casi di guasto.
Domande frequenti
Che cos’è l’array delle priorità BACnet?
È una proprietà degli oggetti comandabili, come le uscite binarie e analogiche, composta da 16 posizioni. Ogni posizione può contenere un valore comandato oppure NULL. Present_Value deriva dalla posizione non NULL con priorità più alta (numero più basso), oppure da Relinquish_Default se tutte le posizioni sono NULL.
Quali sono i livelli di priorità BACnet definiti dallo standard?
Lo standard assegna un nome a cinque livelli: 1 sicurezza delle persone manuale, 2 sicurezza delle persone automatica, 5 controllo delle apparecchiature critiche, 6 tempo minimo di accensione/spegnimento e 8 operatore manuale. Gli altri sono disponibili per le applicazioni; molti siti usano una priorità bassa come 16 per i programmi orari e una intermedia per la gestione dell’energia.
Che cosa significa relinquish in BACnet?
Significa rilasciare un comando scrivendo NULL nella posizione di priorità che lo contiene. L’oggetto segue quindi la posizione successiva occupata, a priorità inferiore, oppure il suo Relinquish_Default.
Che cos’è Relinquish_Default?
È il valore che un oggetto comandabile assume quando nessuna posizione del suo array delle priorità contiene un comando: per esempio «spento» per un ventilatore o un setpoint predefinito per una valvola.