Siemens S7-1500 OPC UA Struct with TON Member


We use the built in OPC UA server of the Siemens S7-1500 and want to read entire structures into document tags.

It seems a TON member trips it up. I don’t know if this is a bug or just a limitation.

This is the DB, prior to the TON member:

It can read that just fine:

When the TON member is introduced, the read goes bad:

I do find it strange the struct with the TON node is fine in the client diagnostics:

Please let me know if I can provide any other info.


Can you find the logger for DataTypeDictionaryReader, turn it to TRACE, and then edit/save the OPC UA connection? Once it has reconnected and resubscribed your tags send me the logs.

What firmware version are you using? Can you try doing a full compile and download to the PLC?

The datatype dictionary returned simply doesn’t include a definition for whatever type MyStruct2 is for some reason.

Firmware v2.8.1 (Project v16). I am planning to upgrade to 2.8.3 in the week.

I have uploaded more logs as requested to the same share.

The event at 19:14 local time (UTC+2) is with the TON_TIME in MyStruct2, and it does not appear. The event at 19:15 is where I changed MemberTON to a Dint just to see, and then it did appear.

Maybe the firmware update will help. It seems the struct definition doesn’t appear when you use the TON_TIME datatype for a member.

Upgraded the firmware to v2.8.3 with no change. Uploaded the logs anyway.

Event at 18:18 with TON Member where MyStruct2 does not appear. At 18.20, changed to Dint and it appeared.

Is this a Siemens server or Ignition client issue? If it is a Siemens issue, I can pass the info along to them if you can assist in articulating the problem statement. I have a 4 year ongoing conversation with Siemens about the OPC UA server’s shortcomings.

This appears to be a Siemens issue. We’ll have to get them involved.

I have a contact at Siemens who works on the OPC UA server in the 1500… I’ll ask them if this sounds familiar.

You will not be able to access a whole structure that contains any of the TIMER SDTs like IEC_TIMER, IEC_LTIMER, TON_TIME, or TON_LTIME.

These types contain hidden members necessary to their function that are not accessible from OPC UA or to be touched by anything else in the system.

Including one of these in your UDT implicitly creates what they refer to informally as a “Swiss cheese structure”. The same effect can be seen by making any member of a structure not accessible from HMI / OPC UA. Once you do this the structure definition disappears and it is not accessible as a whole.

Their suggestions is to make your own timer UDT with the members you need and copy/update those members from the user program.

That is unfortunate, but is effectively what I’ve already done.

I would think that Siemens can present only the members that were marked as OPC UA accessible, instead of making the entire structure inaccessible.

I think they do, if you browse underneath that structure in the address space (OPC Browser in Ignition). You should be able to see the individual nodes of your structure and its member structures. You just can’t subscribe to the structure at the root level any more - you have to bring in the individual members. This is not recommended at any kind of scale because it’s far less efficient.

You can read them individually, as we’ve been doing, but with terrible performance and you hit the 10000 max easily.

I mean it would be better if you could read the whole structure, and the controller simply omits the inaccessible member when you read the whole structure.