The PLC in question was a ContolLogix 1756-L55. (with a “beefy” memory upgrade)
We had an array of 64 fairly complex UDT’s “mapped” through ignition (around 11,008 tags - thanks to the UDT having a couple of 82 character STRING elements + 8 others) at the time which may have contributed to the situation. We have since revised the way we deal with this and the problem seems to have been rectified.
Thanks to the system.opc.readValues() and writeValue() functions we now only monitor a couple of “hot” flags that indicate which elements in the array have been updated/read. The “Tag Changed” event is now used as a trigger to perform a “once-off” read of the affected UDT array element only then write a handshake back to indicate we have colected the data.
Is there any better way that we could have done this? - Bearing in mind that as we are part of the “I.S.” department we don’t get much say in what happens within the PLC code itself.