BACnet Relinquish (release) Analog Output

Trying to figure out how to release command on a BACnet tag. I have a tag configured and working to be able to override the controllers present value but can not get the override control to clear. In Kepware OPC with BACNET you write a 1 to the "AnalogOutput.3000181.PresentValue RELINQUISH" tag and it releases the override. In Ignition "AnalogOutput3000181.Relinquish_Default" pops up with a message Error writing to Damper_Enable.value: Bad("Bad_NotWritable: The access level does not allow writing to the Node.") when you set its value to 1 the tag is Data Type Boolean and I have tried about every other data type and still get the same message.

Hi Derek,

After looking through the Bacnet documentation only certain object types are directly supported by the driver, and it seems like you can't write to Relinquish_Default through a tag. You can find more about what objects you can write to through a tag here. Instead, I think you can use the function system.bacnet.writeRaw() to write directly to the object. If that doesn't work you can contact support.

Best!

In BACnet world, there is a priority array on each tag. Typically, depending on manufacturer they set their local manual operator control at priority level 8. Global control from a smarter building controller usually writes to the smaller local controller at priority level 9. Point scheduling for occupancy is usually at priority level 13. Relinquish default as you pointed out is priority level 16 and you can not write to this. This is a fallback value if priority level 1 through 15 are null.
When you initially setup the local device and then the remote device Ignition gives you the option to set the priority level write. I think default value is priority level 8. I would rather select 9 or 10 to act like a "global" controller. Write to this level. Also, there should be a property on each BACnet point called "BACnet Out of Service" in the architecture of the point. This should be set to FALSE.
Finally, when you want to write a clearing value or a value that sets that priority level to automatic, you must write a string of n or null. A zero or 1 will just set the priority level to that exact value.

1 Like

Thank you all for your input, Michael response put me in the right direction. My resolution was to do the following using a checkbox component using indirect tag script(what I need for my application.

address = str(event.source.parent.TU)

pathname = '[default]Martinsburg/VAV/QuadMed/VRH-%s/Damper_Command' %(address)

if ! event.source.selected:
value = u'None'
system.tag.writeBlocking(pathname, [value])

this would clear the priority array and relinquish the control back to the BACnet controller using the value of None to write the "null" value.
https://docs.inductiveautomation.com/display/DOC81/BACnet

the simple form is:
pathname = '[default]tagname'
value = u'None'
system.tag.writeBlocking(pathname,[value]

Hope this helps anyone else that would need this.

2 Likes

I have to add you write None to the .Present_Value tag as seen below:

I know you have resolved this issue, but I wanted to point out a few things within Ignition that fit with the tone of this thread that could prove useful:

  1. While Ignition sets the default priority as 8 for devices, there is a Write Priority setting in the Device Settings should you wish this to be different.
  2. One other option is the system.bacnet.writeWithPriority system function. This is more like an system.opc.writeValue call where you are interacting directly with the device, but it does allow you to set values for other priorities than the default priority setup for the device. As you noted for your system.tag.writeBlocking script, writing None as a value for system.bacnet.writeWithPriority will clear the value on the BACnet device.

Garth

3 Likes

I am currently trying to do the same and I get [Error_TypeConversion("Error trying to coerce 'None' to a number.")] when trying to write to the Present_Value

Nevermind, that works great. Turns out the bacnet device had the tag set to OOS on accident.