8.0.15 UDT Parameters Reference Parameters in same UDT

I’ve recently upgraded to 8.0.15 and my UDT parameters don’t seem to be working as they did before. I have a UDT which is nested within another UDT, which references parameters in the parent UDT. After upgrading to 8.0.15 it references the parameters in the child UDT rather than the parent. The first {Device} reference will work correctly however the second will reference the first {Device} parameter. I was on 8.0.12 prior. Is this intended behaviour?

To be clear - you’re saying the RunHours param is incorrectly referencing the Device param in the child UDT?

Yes, that is correct. For example each of those parameters will evaluate to the following:

Device - LSA_P1
Name - Pump 1
PLC - RH_EngineRoom01
ParentName - Pump 1 - (Should be ‘Low Side Accumulator’)
RunHours - LSA_P1_P1_HR.Hrs_Run - (Should be ‘LSA_P1_HR.Hrs_Run’)

Do you mind sending a tag export so I can take a look?

Has there been any action on this? This is causing a big problem for my project. (For anyone wondering, I did send a tag export in a PM)

1 Like

Sorry for the delay, I’ve now cleared up the behavior questions I had with our tag guru.

What you were seeing in 8.0.12 was actually a result of a bug we fixed sometime between 8.0.12 and 8.0.15, where parameters in nested UDTs weren’t able to properly resolve parameter references within the same UDT, and instead referenced the parent. The current behavior is intended - if a nested UDT parameter value is using a parameter reference, and that reference is to a parameter that exists in both the parent UDT and nested UDT, it will use the nested UDT parameter.

If you need to use a parent UDT parameter, you should give it a different name to avoid ambiguity (from both a programming standpoint and a user standpoint). In your case specifically, changing Device in the parent UDT to be Parent_Device or something similar.

Alright, I don’t much see the purpose in a parameter referencing a parameter in the same UDT, but it looks like I’ll need to find a solution. How can I quickly modify hundreds of instances of a UDT? If I change the name it will just add a new parameter and I still need to go through and change every instance.

Looks like I can use this against itself to create a new parameter that references the old one. Name1 is added to the parent and references Name. Then I only need to change the reference in the UDT and not the instances.