Protocols and data

BACnet priority arrays and relinquish

How the BACnet priority array works: the 16 command priorities, relinquishing a command with NULL, Relinquish_Default, and how to test a write without leaving an override in place.

A commandable BACnet object, such as a binary output that starts a fan or an analog value that holds a set point, does not simply take the last value written to it. A life-safety system, an operator and a schedule can all command one fan without fighting, because each writes to its own place in the object's priority array.

This guide is part of the BACnet and building protocols series.

How the array decides

Each of the 16 slots holds either a value or NULL (empty). The object's Present_Value comes from the first slot, counting from 1, that is not NULL. Priority 1 is the highest. When every slot is NULL, Present_Value takes the object's Relinquish_Default.

The standard names five priorities. The others are free for the site to assign:

PriorityStandard use
1Manual life safety
2Automatic life safety
3, 4Available
5Critical equipment control
6Minimum on/off
7Available
8Manual operator
9 to 16Available; schedules and routine control often use the lowest

A common site plan puts schedules at 16, energy management or demand response somewhere between 9 and 15, and operator overrides at 8. Write the plan down with the point list.

A worked example

A supply fan (binary-output 4) has a Relinquish_Default of inactive (off):

StepPriority arrayPresent_Value
Start: all slots NULLOff (Relinquish_Default)
The schedule writes on at 1616 = onOn
A demand response system writes off at 1212 = off, 16 = onOff
An operator writes on at 88 = on, 12 = off, 16 = onOn
The event ends; the DR system writes NULL at 128 = on, 16 = onOn
The operator releases 816 = onOn
The schedule releases 16 at nightOff (Relinquish_Default)

Two lessons follow. The DR system's command was accepted but had no effect while the operator held priority 8. And if the DR system had not released priority 12, the fan would have stayed off after the schedule came back on in the morning.

Relinquish, do not overwrite

To end a command, write NULL to the same priority. Writing the opposite value is not the same thing: the slot stays occupied, and it still blocks every lower priority. Forgotten commands at mid priorities are a common cause of plant that ignores its schedule weeks after a test.

Some clients cannot send NULL, or hide it behind another method. Beckhoff's documentation, for example, describes how its BACnet library writes NULL by sending a special value. Check how the client you use releases a command before you write anything.

Also check Minimum On/Off at priority 6. A binary output with minimum on and off times writes its own value at priority 6 for the minimum time after each change, so a lower-priority command may be delayed.

Test a write safely

  1. Agree the object, the priority, the value, the duration and the release with the equipment owner.
  2. Read the whole Priority_Array and Present_Value before the test, and record them.
  3. Write the command. Read Priority_Array again: is your value in your slot?
  4. Check Present_Value and the physical plant. If a higher slot holds a value, your command has no effect.
  5. Release with NULL at the same priority, and read the array again.
  6. Confirm that the plant has returned to its expected state.

A timeout on a write is an unknown result, not a failure. Read the array before you try again.

Priority and Modbus

Modbus has no priority array. A write changes the register, and the last writer wins. When a Modbus device is shared between a BMS and an energy system, agree which one may write, or use a controller that arbitrates. The BACnet vs Modbus guide compares the two.

Writes with Edge

Edge on the ZGW-20 Gateway can write to BACnet output and value objects that an administrator has provisioned for control. Each write goes to a chosen priority from 1 to 16, and priority 16 when none is set. Edge does not release a command with NULL, so agree how the command will be released, usually with the BMS tools, before a test. Treat every write as the approved control test above, and see the local control guide for the failure cases to plan.

Common questions

What is the BACnet priority array?

A property of commandable objects, such as binary and analog outputs, with 16 slots. Each slot can hold a commanded value or NULL. The present value of the object comes from the highest-priority slot (lowest number) that is not NULL, or from Relinquish_Default when all slots are NULL.

What are the standard BACnet priority levels?

The standard names five of them: 1 manual life safety, 2 automatic life safety, 5 critical equipment control, 6 minimum on/off and 8 manual operator. The others are available for applications; many sites use a low priority such as 16 for schedules and a middle priority for energy management.

What does relinquish mean in BACnet?

Releasing a command by writing NULL to the priority slot that holds it. The object then follows the next lower slot that holds a value, or its Relinquish_Default.

What is Relinquish_Default?

The value that a commandable object takes when no slot in its priority array holds a command, for example "off" for a fan or a default set point for a valve.