BACnet Priority Array BACnet
Type a value into any of the 16 command slots and watch Present_Value resolve — the lowest-numbered non-NULL slot wins, or Relinquish_Default if they are all empty.
Priority_Array. A write does not overwrite the value; it lands in one slot, at a priority. The object's actual Present_Value is then the value in the lowest-numbered slot that is not NULL. Type a value to command a slot; clear it — or press × — to write NULL and release it. The winning slot is highlighted, and the panel shows what would take over if you released it.
The array is seeded with an example — a hand override at slot 8 sitting on top of a sequence at slot 16. Edit it to your own values.
Priority_Array
Blank = NULL = relinquished. A value can be anything the point commands — a percent, a temperature, or active / inactive on a binary object.
Present_Value
—The 16 standard priority slots
Slot 1 is the highest priority, slot 16 the lowest. Five slots carry a standard-defined meaning (marked with the accent rule); the rest are available for application-specific use.
| Priority | Standard use | Notes |
|---|---|---|
| 1 | Manual Life-Safety | The highest priority — reserved for manual life-safety commands. Nothing outranks it. |
| 2 | Automatic Life-Safety | Automatic life-safety functions — smoke control, fire response. |
| 3 | Available | Available for application-specific use. |
| 4 | Available | Available for application-specific use. |
| 5 | Critical Equipment Control | Protects equipment — e.g. a compressor, or a defrost cycle that must run to completion. |
| 6 | Minimum On/Off | Reserved for minimum on/off-time enforcement — the anti-short-cycle timer. |
| 7 | Available | Available for application-specific use. |
| 8 | Manual Operator | The operator's hand — a manual override from the workstation or BMS. |
| 9 | Available | Available for application-specific use. |
| 10 | Available | Available for application-specific use. |
| 11 | Available | Available for application-specific use. |
| 12 | Available | Available for application-specific use. |
| 13 | Available | Available for application-specific use. |
| 14 | Available | Available for application-specific use. |
| 15 | Available | Available for application-specific use. |
| 16 | Available | The lowest priority — commonly the slot a controller's own automatic program writes from. |
The standard fixes only a few of these — life-safety at the top slots (1–2), critical-equipment control at 5, minimum on/off-time at 6, and the manual operator's hand at 8 — and leaves the rest to local policy. Slot 16 is simply the lowest priority, but it is where a controller's own automatic program most often writes. Your controller exposes its own priority map — that map, not this table, is what governs the point in front of you. Assignments cross-checked against ASHRAE 135 command-prioritization references.
How Present_Value resolves
Reading the array is a scan from the top: start at slot 1 and take the value in the first slot that is not NULL. That value is Present_Value; every lower-priority slot underneath it is held back, still holding its value but not commanding. Nothing is added, averaged, or compared — the single highest-priority active slot wins outright.
If all sixteen slots are NULL, the object has no command at all, and Present_Value takes the value of Relinquish_Default — the resting state. Note that Relinquish_Default is a real, separate property you can write; it is not "slot 17," and it only matters when the whole array is empty.
Writing NULL releases — the #1 field failure
The move that trips people up: to give a point back, you write NULL to your slot, not a zero. Writing zero commands the value zero at your priority — the point holds at 0. Writing NULL relinquishes the slot; it goes empty, and the next-highest non-NULL slot takes over. In this tool the × on each row does exactly that.
So the classic "this point is broken" call is almost never a broken sequence. The program is writing 65 % at slot 16 exactly as designed, but a hand override someone set months ago still sits at slot 8 — and slot 8 outranks slot 16, so Present_Value resolves to the stale override. The value on the graphic is the resolved value, not what the sequence is writing. Read the entire array, find the higher-priority slot that is still populated, and release it. A write-access-denied when you try to write Present_Value directly is often the same story — the value is owned by the array, so command a priority instead.
BACnet priority array FAQ
What is the BACnet priority array?
Priority_Array) on every commandable object — Analog Output, Binary Output, and Analog / Binary / Multi-state Value when configured commandable. A WriteProperty to Present_Value does not overwrite the value; it writes into one slot, at a chosen priority. Slot 1 is the highest priority and slot 16 the lowest.How does BACnet decide Present_Value from the priority array?
Present_Value is the value in the lowest-numbered slot that is not NULL — the highest-priority active command. Every lower-priority slot below it is held back. If every one of the 16 slots is NULL, the object falls back to its Relinquish_Default property.What does writing NULL to a BACnet priority do?
What is Relinquish_Default in BACnet?
What priority does a BACnet operator override use?
Why is my BACnet point stuck and not following the program?
Present_Value resolves to the old override and the point looks "broken" even though the sequence is writing correctly. Read the whole priority array; release the stale slot with a NULL write.