BUG 15262]- UDT parameters cannot be referenced in tag event script in 8

Upgraded to 8.0.5 and my tag event scripts that use the tag[‘paramName’] feature to access UDT parameters are broken. The tag[] call is returning None.

Hi Walt,

We are currently tracking this issue and actively working on a fix for it. Thanks for providing us info on the matter.

Anthony

The change logs indicated a fix for this in the 8.0.7 RC1, but the bug still exists.

Can you define ‘broken’ more specifically? Skimming through the notes on the bug ticket, there’s some quirks, such as having to restart the tag for event scripts to update if you write to a UDT parameter, that are probably on training’s list to document once 8.0.7 full is available.

The gateway was rebooted after the upgrade to 8.0.7 and every instance of tag[] still seems to return None. We are not dynamically changing parameter values.

We were using it in a couple different UDTs to read the parameter value. One was critical so we replaced it with expression tags to pull in the parameters and tag reads to read from the expression tags. I’ll probably do the same with the others.

Is this bug still lingering?
I’m trying to do a change event script and can’t seem to get the UDT parameters. I found this UDTParametersinTagEventScripts in the docs but it doesn’t seem to work.

I have a UDT (UDT01) with a parameter param1 and two memory tags (Tag1 and Tag2), both are of type string.

I created an instance of UDT01 with ‘param1’ set to the string “Finish”.

If I create the following ‘Value Changed’ event script in Tag2

	system.tag.write("[.]Tag1","Start")
	system.tag.write("[.]Tag1",tag['parameters']['param1'])

Tag1 does update to the string “Start” but Tag1 will not update to the value of param1 (‘Finish’)

I get the following error in the gateway log

Caused by: org.python.core.PyException: Traceback (most recent call last): File "", line 3, in valueChanged TypeError: 'com.inductiveautomation.ignition.gateway.tags.runtime.nodes.complex.ExecutableTagPropertyModel$LocalParameterObservablePropertySource' object is unsubscriptable

I realize I can create another tag in the UDT that is set to the parameter and then read that tag in the script but I’d rather just reference the parameter directly if it’s an options.

I believe it was fixed in 8.0.10.

I am terrible with syntax from memory, but I believe you need to do the following.

system.tag.write("[.]Tag1",“Start”)
system.tag.write("[.]Tag1",tag[‘param1’])

The correct syntax according to our docs is:

tag['parameters']['param1']

This was supposed to be fixed in 8.0.7, but appears to have regressed. For now, you can try the legacy syntax:

{param1}

The caveat with the legacy syntax is that value changes to the parameter wouldn’t be updated in event scripts unless the UDT was restarted, so this may not be a viable option if you have parameter values that are be changed outside of editing the UDT via the tag config. More info can be found here: https://docs.inductiveautomation.com/display/DOC80/Tag+Event+Scripts

Thanks, @James.Lorenz. You’re right, the legacy syntax is not a viable option. I did try the legacy syntax.
If I use…
system.tag.write("[.]Tag1",'{param1}')
it works as described.

For now, I’ll just utilize some additional memory tags to hold the parameter values. I can just reference those tags in the event script.

I did try some variations of @Walt’s syntax, just for fun, but I could not get it to work.

I’m using 8.0.12

Interesting. I went and looked at one of my scripts that is working and I just do tag[‘ParamName’] to get the parameter value. I believe I took that from the original 8.0 documentation. It was broken in roughly 8.0.4 and started working again when we got to 8.0.10.

Based on James’ link it looks like something changed in 8.0.7.