Overview
All devices on a BACnet network are effectively peers. This means that any device (we take device here to mean any Bacnet capable entity – device or software application) can write to the writable properties of another device’s objects. This can result in conflicting commands.
BACnet Writable and Commandable Properties
# |
Property Type |
Override current value / Conflict resolution |
1 | Writable | The last write wins and overwrites any previous writes – there is no conflict resolution. |
2 | Commandable |
Commandable properties are identified by an equipment vendor. Commandable property has Priority Array and Relinquish Default to resolve command conflict. When a write is sent to a commandable point it always contains a priority. If the priority is not specified then the priority is assumed to be the lowest. |
BACnet Priority Array Overview
Priority Array Workflow:
-
There are 16 priorities. 16 is the lowest.
-
On restart, each slot in the array is set to a Null (unused) state.
-
When the command is received the BACnet device updates the slot in the Priority Array that corresponds to the commanded priority with the new value.
-
The device continuously looks through the priority array of each commandable property and looks for the highest priority slot that is non-Null. It uses that value to update the Present Value.
-
To empty a priority slot (set to NULL), it's required to send a command to the point to relinquish (give up control). This is like a normal command – its specifies a value ( a special value – Null ) and a priority. The device frees the Priority Array slot that corresponds to the relinquished priority. There are 3 possible outcomes to a relinquish – 1) There is no change to the Present Value because the relinquished priority is lower than the one in use 2) The Present Value changes because the relinquished command was at a higher priority than another commanded value. 3) All the Priority Array slots are now Null (unused). In this case, the device uses the value of the Relinquish Default property to set the value of the present value: if two remotes device commands at the same priority, the last command wins, overwriting the value in the Priority Array for the given priority? The same applies to relinquishing – the first relinquisher wins
1 |
Manual-Life Safety |
2 |
Automatic-Life Safety |
3 |
Available |
4 |
Available |
5 |
Critical Equipment Control |
6 |
Minimum On/Off |
7 |
Available |
8 |
Manual Operator |
9 |
Available |
10 |
Available |
11 |
Available |
12 |
Available |
13 |
Available |
14 |
Available |
15 |
Available |
16 |
Available |
Example for Changing the Commandable parameter's value in BACnet
The Relinquish Default Value is set by the device. The Vendor may choose to make it a writable property in which case it can be changed remotely. Even though the present value is commanded the device stores the commanded value in the priority array and uses the highest priority array slot to set the Present Value.

In our example, the device boots, the Priority array slots are all Null (Unused) and this vendor has set the Relinquish Default to 50. Since all the slots are null the device sets the Present Value to the Relinquish Default Value. The Present Value changes to 50.
Now command is sent to set this objects Present Value to 45 at Priority 5. The device sets slot 5 in the Priority Array to 45. It then starts at the highest priority (1) and looks for the 1st non Null slot. It finds slot 5 filled with 45 and sets the Present Value to 45.
Now a new command is sent to set this objects Present Value to 70 at Priority 8. The device sets slot 8 in the Priority Array to 70 . It then starts at the highest priority (1) and looks for the 1st non-Null slot. It finds slot 5 filled with 45. Thus there is no change to the Present Value to 45.
Now the command is sent to Relinquish the command at Priority 5. One would hope that the device that sent the original command sent the relinquish command but that is up to you and how you configured you system. When the relinquish command is received, the device sets the corresponding slot in the Priority Array to Null. The device then starts at the highest priority (1) and looks for the 1st non-Null slot. The device finds slot 8 filled with 70. It changes the Present Value to 70.
The most recent command at a specific priority wins. Here a command is sent to set the Present Value to 80 at priority 8. The device overrides slot 8 in the array with the new value. In this case, it is also the highest priority slot that is used so the device updates the Present Value to 80.
Finally, a command is sent to relinquish the command at priority 8. Slot 8 is set to Null and when the device looks through the priority array it finds it all empty and it thus uses the Relinquish Default value to set the Present Value to 50.
This mechanism can be complicated if the object has minimum on/off times.