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.
Every commandable BACnet object holds a 16-slot 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.

Try this:
1 life-safety
2 auto life-safety
3
4
5 critical equip.
6 min on/off
7
8 manual operator
9
10
11
12
13
14
15
16 sequence
used when every slot is NULL

Blank = NULL = relinquished. A value can be anything the point commands — a percent, a temperature, or active / inactive on a binary object.

Type a value to resolve it.

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.

PriorityStandard useNotes
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.

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.

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.

To leave a stale override on a machine rather than on an array, the DDC Workbench gives every commandable point on a live air handler a priority array of its own and commands it on three levels — slot 16 for the control program, slot 8 for your hand, and the Relinquish_Default fallback for a point the program carries no block for. Un-check a NULL — released box and that point stops following the sequence until you write NULL back, and the Points not following the program window names which of the two reasons is holding it. The fan-coil bench is the smaller unit to start on.

What is the BACnet priority array?

A 16-slot property (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?

It releases (relinquishes) that slot — the slot becomes empty and stops commanding. It does not write a zero; it removes your command so the next-highest non-NULL slot takes over. Forgetting to write NULL when you are done is the most common way an override gets stuck.

What is Relinquish_Default in BACnet?

The value a commandable object takes when its entire priority array is NULL — the resting state with nothing commanding. It is a separate, writable property, not slot 17. On many points it is the safe/off value the object should hold when no logic and no operator is asking for anything.

What priority does a BACnet operator override use?

By convention, priority 8 — "Manual Operator" — is the operator's hand from a workstation or BMS, and priority 16 is where a controller's own automatic program most often writes. So a hand override at 8 beats the sequence at 16; write NULL back to 8 and the sequence at 16 resumes. The exact map is a local matter — check your controller.

Why is my BACnet point stuck and not following the program?

Almost always a forgotten override sitting at a higher priority than the sequence. The program writes at, say, slot 16, but slot 8 still holds a hand value someone set months ago — so 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.
← All tools