Bidirectional binding to UDT parameter

I have a UDT which has a parameter called Alarm Priority, which is used to automatically set all alarms within the UDT to the same user-specified priority. The user enters Critical, High, Medium, Low or Diagnostic when the UDT is created, and the UDT extrapolates it into the required priority value with appropriate input conditioning and fallback values.

Now I would like to give an engineer the ability to modify the alarm priority at runtime, because from time to time someone in their infinite wisdom will decide that a certain alarm should be a higher priority than the one specified in the functional specification. I have created a dropdown and added five options (Critical, High, Medium, Low and Diagnostic), and bound the value to {tagPath}/Parameters.Alarm Priority. It correctly displays the alarm priority. However, when I set the binding to bidirectional, it does not update the UDT parameter value at runtime.

I have found a solution by setting the binding to be uni-directional, and putting a change script on the value property of the dropdown which uses system.tag.writeAsync to write to the UDT parameter, and this works.

Just wanted to know if my original idea should have worked but I was doing something wrong, or if there's an inherent limitation that means bindings can't write to UDT properties?

A couple of related posts:

It seems that your functional solution (using a system.tag.write* function) is the preferred method.

Thanks Chris, I was sure that I'd read something about it before but my keywords were not keywording today to find them!

1 Like