Issue
How to view the current Priority level controlling a BACnet object using Plain English.
Environment
Continuum Cyberstation
BACnet
AnalogOutput, AnalogValue
Cause
3rd party is controlling a BACnet object at an unknown priority level. We want to see what the current Priority level is and relinquish this control.
Resolution
We can use the PriorityArray attribute to view the value of each Priority level. Then using a For loop we can loop through all 16 priority levels to determine the current priority level controlling the BACnet object.
Below is a program that will allow you to see the current priority (aaPriorityValue) controlling your object (PriorityTest) and at what priority level (aaPriorityIndex).
You will need to create two numerics (configure as AnalogValue) for this program to work (aaPriorityIndex and aaPriorityValue).
With the method below we can see if a non-zero value is the current priority and at what priority level. Unfortunately a 0 value is seen the same as a NULL value (both seen as 0), so if a 0 value is currently controlling the object we are unable to determine at what priority level this is set.
If aaPriorityValue is 0 and aaPriorityIndex is < 16 then we know that aaPriorityIndex is the level of the non-zero value and can relinquish all priorities down to that level if needed. Still not exactly what we want but it does give a bit of flexibility to actually control the current priority level.
=======================
' Program to get the highest priority value and its index number
' Flow: Looping
Numeric count
Numeric PriorityValue
CALC:
For count = 1 to 16 'Loop through the priority array, looking for the first non-Null value
PriorityValue = ReadProperty(PriorityTest PriorityArray, count)
If PriorityValue is not NULL then
Break 'stop at the first non-Null value. Side effect, also first non-zero value
Endif
Next count
If PriorityTest = 0 then
'Check for 0 value
aaPriorityValue = 0
aaPriorityIndex = count
Else
'If not 0 or NULL value, set current priority value and index
aaPriorityValue = PriorityValue
aaPriorityIndex = count
Endif
=================================