Just doing a test upgrade from 7.9 to 8 and have hit a problem with not being able to pass UDT parameters into the parameters of an embedded UDT .
7.9 replacement strategy allowed me to use the parent UDT’s parameter directly in the value definition of the embedded UDTs. What is a method in Ignition 8 for achieving the same functionally?
Example
ParentUDT with parameter X
-EmbeddedUDT with parameter Y which has the value of X + string
In 7.9 I could set the EmbeddedUDT value to {X} or {x}.randomstring and this would resolve when the instance of the ParentUDT was created. Now in 8 this just sets the value to the literal string “{x}.randomstring”.
What is the correct way of doing this in Ignition 8?
OK so turns out this functionality still works the same in Ignition 8 but the upgrade process from 7.9 to 8 is a bit average in the fact that is converts this to the string representation of the expression not the result .
Problem is fixed by going through and clearing each parameter, applying changes and then setting it back to the original value… annoying but workable.
This thread needs clarification - are you upgrading an installation, either by installing 8.0 directly onto a 7.9 system, or restoring a 7.9 backup to a running 8.0 gateway, or attempting to upgrade tags piecemeal using a tag export from 7.9 into 8.0?
The former should happen seamlessly - if it doesn’t, that’s a bug we need to fix.
The latter is something that I believe we don’t currently expect to be handled, although we theoretically could.
For me, it is when I upgraded an existing installation, by installing 8.0 on an existing 7.9 test server (my laptop). I use nested UDTs extensively in my 7.9 project.
When I first opened my project in designer, after installing 8.0, I noticed than many of my tags were in error. Looking at the UDT definitions, everything seemed correct. However, when I looked at individual tags I noticed that the parameters were not being replaced by their referenced string.
For example my Cooling Return Pressure tag had an OpcItemPath of “Cooling”."{InstanceName}".value instead of “Cooling”.“returnPressure”.value
I found this was the case with many of my tags. The only way to fix the problem was by following CDCD’s procedure of deleting the parameter reference, applying the change, and then pasting the same parameter reference back in.
It seems the upgrade is not converting the parameter reference correctly.
I am having an issue with custom parameters as well, not just {InstanceName}. For example, my custom parameters {SystemName} and {DeviceName} are not being replaced by their reference.
It seems to be an issue with all parameter values passed to a nested UDT.
Still running into this problem with 8.1.16. Nested UDTs inheriting parameters and made all the changes in a json doc and reimported. It’s not resolving the opc paths to their parameter values and keeping them as strings.
As @mark3 said, going into the tags that were using the references, not the parameter values themselves, and deleted the reference, applying, then pasting the same values back resolves the issue