If I remember right, if you use the OPC UA version and read Siemens User Defined Data Types they come as a JSON struct, I don't know if this is still the case as we've used the Siemens driver for a while. We often used and still do use a lot of these structures but don't use all of the values in them for the HMI.
We tend to find it a lot easier to define an Ignition UDT, with a DB no. and start offset as parameters. Then can initialise all of these for our systems.
Also, I think for models of PLC you're limited to a maximum of 1000 items you can monitor using the OPC UA. Not usually a big deal, but if we have a lot of alarming or other statuses sometimes we can get a bit close for comfort.
The 1000 items subscription is not a hard limit : it can be changed in the hardware configuration if needed.
I guess the more items available, the more impactful it will be on the cycle time.
That might be why Siemens is going bi-cpu in their new PLCs, one for the logic and one for the comm (I heard about it but did not see it).
Regarding UDT, we also do UDTs but with symbolic addressing as we tend to change datablocs a lot, adding or moving items in it. Symbolic adressing works wonder for that matter.