Writing and relinquishing bacnet priorities

How do you write programs using Bacnet priorities?
Some programs use functions, others use square brackets and some you just directly bind your point to the priority array you want.
How does it work here??

We don’t have priorities implemented in the control basic commands (yet). If this is a big feature for you we could get it onto the todo list.

Maurice Duteau

Yes, Kind of big issues. Most customers these days specify Bacnet and also a list of priorities. Common ones are Point force(Pri6), Program priority(Pri10), Default value(Pri16), EmergencyStop(Pri 1,2) . Of course Priority number varries. Many application specific devices use priority 3 to write the value to flash. Some even provide more priorities such as 17 thru 20 when their device can have different functions. For example a thermostat can be a vav, FCU or RTU controller with a simple priority change.

Bacnet priorities for the most part are simply an array which is read from 16 to 0 and null values are skipped. The last valid value is chosen as the point value. Priority 16 is written to flash and all the other values are set to null on restart.

All righty, we’ll add it to the todo list. This priority array feature is pretty complex. Engineers are actually calling out for it in project specs now? Good way to keep the list of approved vendors down I guess.

Its mostly input from the building code jurisdictions.
Anyhow, simple dosent necessarily mean easy… Especially in programming.

Maurice, I am a bit confused. Can you write to a AV in a third party controller? And if so, what priority would the Temco controller write at?

Priority array is supported in the T3 controller, you can read & write to the bacnet AVs on board the T3 controller from a third party Bacnet controller. The thing Jim was asking about is doing that from the T3 controller in the control basic language, that would be a new feature which I will get into our todo list. Here’s more info on how the priority array is handled by T3 controllers.

Not complaining but you arent exactly correct. See my post above.
Bacnet priorities in the beginning were created because most bacnet controllers were intended to be application specific devices. They were trying to be like Lonworks where you could take a device from one manufacturers system and use it in another without any issue.
If you wanted to change something like a time delay time the program in the controller would change it back to its original initialized value. Hence the bacnet priority array. Your initialization value for any point is supposed to be priority 16 and it is supposed to be stored in flash. So on a cold restart before any other device in involved, priority 16 would be its value. all other priorities on a cold start are set to null . Now lets say that this value we are talking about is the room temp set point. for the school gymnasium. Suddenly a ad hock basketball game started and the building engineer gets a call to turn the A/C on. Well its Sunday at 8pm and all occupancy are off and room temp setpoint is at 90F. He tries to override the set point but strangely it keeps changing back to the original. But luckily the controls contractor already wrote him a program to override the gymnasium set points. It writes a new lower set point and a on occupancy status to all the involved units with one push of a button. However instead of writing to priority 16 it writes to a lower numerical priority. 8 is pretty common but it depends on the manufacturer. Usually these overrides are time based so when the timer runs out, the controller sends a relinquish default to all the controllers which instead of setting a new value just writes a null to the value in the priority. priority 8 in our case. Then the program picks up the priority 16 values and shuts everything down.
By the way, almost all bacnet devices are masters. It is extremely rare to find a slave these days.
Most people dont understand what Relinquish Default it. It is just a short term for relinquish the priority and return to default.

As your post shows, all the various scenarios can get complicated and bacnet priority arrays is how Bacnet is supposed to deal with that.

In the systems I have worked on, if the gym goes into occupied mode for a special event I’ll just write a program with a variable which can get toggled on and off with various logic and perhaps a button on the wall as an input. This way the user can see the variable on displays, program timers on it, trend log it, debug it and so on. Much simpler than dealing with priority arrays in my opinion… I am sure there’s other use cases so sure, we’ll be adding features for you to do it your way soon.

Its not my way. Its Bacnets way.
The point is that the program in a third party device will always calculate a+b=c…These values are fixed within the program.
For Example. You have a building with mixed VAV controllers. Some Carrier, Some Andover, some Honeywell. They could be all Honeywell. It dosent really matter.
Customer wants a morning Purge cycle. You can write all the programs you want and you wont be able to budge the damper open or closed unless you write to a lower priority than the program is running at. At this point, A T3 controller would never be able to open or close those dampers. LON did it a little easier to understand way with NVI’s and NVO’s But if whoever wrote the firmware for the vav controller didnt include a nvo for the damper position (which is actually required to have the vav controller to be Lonworks certified) then there is nothing you could do.
or a bacnet device, a priority array is required for all physical outputs. Many manufacturers also provide them for inputs for things like OAT on a chiller or room temp on stats.

Ahright Jim, we’ll get this implemented. We’re deep into porting to a new CPU, the ESP32 which has gobs more resources than the ARM chip we have been using till now. Once this is done we can get onto many magical features.

Just remember lots of ram 4gb min and lots of hardware flash. Add another ethernet port or 2 for use as a switch
I worked on a project for a large company a few years ago using a AM3555. It runs linux and has everything from onboard SVG graphics, Dynamic Object creation,to drag and drop point binding and even the graphics editor itself. You dont need any external software. Just log into the web server and you can do everything from animated graphics to programing and trending. The limiting factor with most of these projects always seems to be not enough ram. Flash doesent do it. It is hardware intensive and too slow constantly doing page writes to flash. Using linux actually made the project much faster and reliable. You didnt need to worry about writing many of the device drivers because they already existed and were supported by others.
Most controllers will probably be like this in the next few years. The main thing that has been slowing it down is that controls contractors dont want to run an ethernet cable to every device and the IT departments dont want to supply all those addresses. But Wifi has gotten to the point of being a reliable stable option.