Binding not updating

I’ve got a template with some custom properties - one of which is bidirectionally bound to a tag.

The tag is an OPC tag on kepware.

Usually this works correctly - I can write to the property from the template and the opc server shows the change. Then the change is read-back into ignition and I see the updated value.

But sometimes it doesn’t work.

When I write from the template to the property, I can see (with a different historian reading the OPC values from kepware also) that the value actually changes. But the value of the property doesn’t change.

In this case, the value was at 90 and was changed to 75.

This was set at 22:55:09 and it shows up in the ignition audit log, in my historian (meaning the write actually took place in kepware), and in another log I added to try to trace the problem down.

Flat file log when button was pressed:

2022-02-15 22:55:09,957 INFO (13) Setting Widgetname.Value to 75.0

Ignition Audit log:

2/15/22, 10:55 PM Systems Servername tag write Tagname 75.0 AuditStatus[0x00000000, Severity=Good, Subcode=NotSpecified] sys:Gateway:/project:projectname Client

Value actually changing in historian:

I added a button to the screen and asked the operators to press it when this happened. This button does a system.tag.readblocking() on the tag and then logs out to a file what the tags value is and what the value of the property is.

2022-02-15 23:06:01,584 ERROR (46) WidgetName.Value: 90.0
2022-02-15 23:06:01,607 ERROR (51) TagName: [75, Good, Tue Feb 15 22:55:09 CST 2022 (1644987309844)]

I had previously tried changing the tag group for these signals to be polled instead of subscribed as I thought maybe the update wasn’t coming back to ignition but with this latest round of logging it looks like the tag is updating but the bound property isn’t.

Any insights on what I should check next?

In case anyone comes across this post in the future:
It ended up being the “fallback delay” on the bi-directional binding was shorter than the tag update rate. This caused the tag write to occur and the value changed in the PLC, but the updated value was not read back before the fallback delay timed out which caused the binding to revert in value.

I increased the fallback delay and the problem has resolved.