TwinCAT OPC UA PLC Snapshots: Verify StructuredType Instead of Assuming a Folder Is Atomic
A SCADA client that reads every member of a PLC structure has not
necessarily read one coherent structure value. In TwinCAT OPC UA, a
folder containing independently accessible member nodes and a
StructuredType root use different access paths. Verify the
representation actually imported by the server before treating related
fields as one snapshot.
The scope is TwinCAT 3 PLC Data Access with TMC symbol import. The
checked Beckhoff TF6100 server manual is version 1.6.0, dated 2
September 2026, together with the linked online documentation inspected
on 19 October 2026. No PLC scan timing, ADS exchange or hardware
performance was measured.

Identify what the server
imported
Beckhoff’s Structures
documentation distinguishes the default FolderType representation
from an explicitly enabled StructuredType. The former exposes member
variables as separate nodes. The latter makes the structure available
through its root with type information for the client.
The documented configuration uses the OPC.UA.DA enable attribute
together with OPC.UA.DA.StructuredType. Check the imported node, not
merely the presence of a pragma in source. A build or import condition
can prevent the intended representation from appearing.
A hypothetical record containing a production-cycle number and two
measurements illustrates the requirement. If the client reads the cycle
number in one PLC cycle and a measurement in another, each individual
value can be legitimate while the combined record is misleading. Reading
more fields in one client batch does not, by itself, establish the
PLC-side access boundary.
Follow the ADS transaction
boundary
The optimization
guide explains that member access can be divided into several ADS
commands and processed in different PLC cycles. Access to a
StructuredType is handled in one ADS read/write command, which is the
documented basis for its data-consistent access.
That guarantee concerns this structure access path. It should not be
extended to simultaneous snapshots across several unrelated structures,
multiple controllers or an entire production operation. Define the
fields that belong together before selecting the transfer
representation.
Nor does a coherent memory record automatically describe one finished
production cycle. If the PLC intentionally updates those fields at
different application milestones, its publication logic must define when
the record is ready for external consumption. A transport representation
cannot infer that application boundary.
Check why a root became a
folder
The same documentation identifies fallback conditions. Pointer or
reference members cannot be converted into a StructuredType. A structure
larger than the configured maximum is also imported as FolderType; the
documented default maximum is 16 kB.
The TF6100
manual, version 1.6.0, pages 52 and 82–84, describes
MaxStructureSize and the associated resource costs. Raising the limit
increases the size of ADS messages and the work required to encode or
decode the value. It is not a free way to turn an arbitrarily large
record into a suitable interface.
For an oversized or unsupported structure, consider an explicitly
designed exchange record containing only the required transferable
fields. Review that record’s update ownership and lifetime inside the
PLC. This is a proposed integration design, not evidence that a
particular controller can meet a selected cycle time.
Verify
representation and consistency together
A controlled fixture should expose a small supported structure with a
cycle identifier and related values. Inspect the root type and the
client-decoded value, then compare it with independently read member
nodes. Separately test a structure that exceeds the configured size
limit and confirm the representation changes as documented.
Keep the client’s ability to decode the StructuredType in the
acceptance criteria. A server exposing the right root is insufficient if
the client falls back to reading children because it cannot process that
value.
The integration result should state the imported representation,
supported member types, configured size limit and the specific grouping
whose consistency is required. That is a stronger claim than “all tags
were read successfully,” while leaving actual timing and
application-level snapshot semantics to their own evidence.