Be sure that the tag's created in both PLC's match what the MSG is configured to read or write. Make sure "External Access" parameter for the tag is Read/Write, not None.
I was always under the impression that the unhelpful "IOI Syntax" error was due to incorrect size, structure, or naming inconsistences, and nothing to do with "External Access". But I but my teeth on this way back, so the external access attribute may be the culprit.
If the tags are created from the same (copied) UDT, then there should be no issues.
Maybe I'm old-school, but it works for me, in that a tag in a remote PLC that I am reading in to my PLC inherits the same tag-name...
An example (made-up) ...
Widget_Data : a tag in the Widget-making PLC that can be produced, message written to another PLC (ugh!), or message read by another PLC.
It will always convey the meaning that it is data created, and maintained by, the Widget PLC.
Meanwhile, in any other PLC that consumes, reads, or receives (yuk!) that data, it will always convey the meaning that the data is created, and maintained by, the Widget PLC.
See the same meaning ? It keeps it simple ....
So, any data that needs to be "got at" by another, create it's structure (UDT) and name it (TAG) so that the same UDT and tag-name can be used everywhere ! Tracing data becomes a doddle, and so easy to follow through the processes. e.g. Widget_Data.Type has the same meaning across
all PLCs.
I'm all for keeping things simple, and I have seen some absolute nightmares in comms over the years ....
I have learnt that a simple solution to IOI Syntax Errors is to delete all the associated tags and UDTs from paired processors, and to use copy/paste to re-create them, both UDTs and Tags. Often sweeping things under the rug doesn't dissociate everything important.