Problem Statement
When a Companion Specific OPC UA server interface is generated with the Siemens OPC UA Modeling Editor (SIOME) version 2.8.7 and imported into a SIMATIC S7-1200 CPU 1215C running TIA Portal V18 Update 4, the resulting OPC UA server interface fails to load the LocalizedText node type. The TIA Portal OPC UA server interface editor renders the affected nodes with a red error indicator in the Node type column, while every other node displays its expected data type (Int32, Boolean, String, DateTime, etc.). The same SIOME-generated XML imported into an S7-1500 CPU (e.g. 6ES7511-1CK02-0AB0 / S7-1511C-1 PN) produces a fully populated, error-free interface.
This article documents the affected firmware versions, the diagnostic procedure used to reproduce the fault, the architectural reason the S7-1200 OPC UA server handles LocalizedText differently than the S7-1500, and the engineering workarounds that restore a usable companion specification on the S7-1200 platform.
Affected Hardware and Software Environment
| Component | Variant Tested | Result with SIOME XML |
|---|---|---|
| CPU | SIMATIC S7-1215C DC/DC/DC (6ES7215-1AG40-0XB0) | LocalizedText node red |
| Firmware (CPU 1215C) | V4.5.0 | Fault reproduced |
| Firmware (CPU 1215C) | V4.6.0 | Fault reproduced |
| Firmware (CPU 1215C) | V4.7.0 (with TIA V20) | Fault reproduced |
| CPU (reference, working) | SIMATIC S7-1511C-1 PN (6ES7511-1CK02-0AB0) | OK – all nodes load |
| Firmware (S7-1511C-1 PN) | V2.9.0 | OK |
| TIA Portal | V18 Update 4 | Reproduces the error |
| TIA Portal | V20 | Reproduces the error on 1215C |
| SIOME | V2.8.7 | Generates XML with LocalizedText nodes |
The fault is independent of the firmware line tested on the 1215C; both the V4.5, V4.6 and V4.7 firmware tracks show the same red indicator on the LocalizedText row, which confirms that the issue is not a regression in a single firmware release but a structural limitation in how the S7-1200 OPC UA server stack accepts companion-specific extensions.
Symptoms and Visual Indicators
After importing the SIOME XML in Devices & Networks > CPU > Properties > OPC UA > Server interface the engineer observes:
- One or more rows in the interface table are flagged with a red square in the Node type column.
- The Name, Access and Value columns of the same row remain populated; the binding to a PLC tag is preserved.
- A download to the S7-1200 CPU completes, but the OPC UA client (e.g. UaExpert) cannot subscribe to the affected nodes – the nodes are simply missing from the server address space.
- Diagnostics in the S7-1200 web server under Diagnostics > OPC UA show a partial server address space and a warning that one or more companion nodes could not be instantiated.
The S7-1500 reference build, compiled with the identical XML, populates the same rows with a green status and the data type LocalizedText (OPC UA built-in type 21), so the XML itself is well-formed.
Root Cause Analysis
The S7-1200 OPC UA server implements a deliberately reduced subset of the OPC UA specification. The S7-1200 server is intended for straightforward tag exposure and small companion specifications. The runtime OPC UA stack on the S7-1200 accepts the basic built-in data types (Boolean, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64, Float, Double, String, DateTime, Guid, ByteString, NodeId, ExpandedNodeId, StatusCode, QualifiedName and LocalizedText) only when the corresponding node is added through the TIA Portal server interface editor as a typed variable of a SIMATIC data structure.
When SIOME is used to author a companion specification, the generated XML uses the OPC UA UA_TYPES.LOCALIZEDTEXT identifier and embeds the locale strings directly. The S7-1200 OPC UA server runtime accepts LocalizedText on the address-space level (a description, for example, is a LocalizedText), but it does not expose a public, configurable LocalizedText variable in the same way the S7-1500 does. The S7-1200 server has no internal buffer for the locale and text pair that a user-defined tag would require; the type is consumed only by the system, not by user variables.
The TIA Portal server-interface compiler detects this and marks the node with the red status – the import is syntactically correct but semantically incompatible with the S7-1200 server profile. The S7-1500 implements the full built-in type table in the runtime OPC UA server; the S7-1200 implements a reduced profile that excludes LocalizedText as a public variable data type.
ByteString, the other data type mentioned in the related TIA Portal documentation, is handled in a different manner: it is a permitted built-in type on the S7-1200 but it must be declared through a SIMATIC data structure of type Array of Byte or a derived ByteString UDT that the interface editor converts to OPC UA ByteString (built-in type 15). LocalizedText has no such SIMATIC counterpart, so it cannot be coerced.
Verification and Diagnostic Procedure
- Open the project in TIA Portal and select the S7-1200 CPU.
- Navigate to Properties > OPC UA > Server and confirm the OPC UA server is enabled. Note the server port (default 4840) and the security policy.
- Open Properties > OPC UA > Server interface; the table lists every node produced by the imported SIOME XML.
- Identify the row(s) marked with a red square in the Node type column. Hover the mouse over the cell to display the tooltip – it will read Data type not supported by the S7-1200 OPC UA server.
- Open the SIOME XML file in a text editor and locate the affected
<UAObject>or<UAVariable>node. TheDataTypeattribute will bei=21(the OPC UA namespace-0 node id ofLocalizedText). - Cross-check by importing the same XML into an S7-1500 CPU in a parallel project. If the S7-1500 interface loads without red marks, the issue is confirmed as an S7-1200 platform limitation rather than a defect in the XML.
- Compile both projects and download. Use an OPC UA client (UaExpert, Prosys OPC UA Browser) to confirm the address space difference: nodes are present on the S7-1500 and absent on the S7-1200.
Workarounds and Solutions
There is no firmware update that adds full LocalizedText user-variable support to the S7-1200 OPC UA server. The fix is to redesign the companion specification so that the affected variables are exposed with a supported data type. Apply the following options in order of preference.
Option 1 – Replace LocalizedText with String
In SIOME, change the data type of the affected variables from LocalizedText to String. The OPC UA client then receives a UTF-8 text. If locale-specific rendering is required, encode the locale as a prefix (e.g. en-US:Pump running) and let the client split the value. This is the most widely deployed approach on S7-1200 sites.
Option 2 – Split into two String variables
For each LocalizedText create two String variables in SIOME, one for the locale tag (e.g. en-US, de-DE) and one for the actual text. A wrapper block in the PLC maintains the consistency. This is the cleanest semantic match for multi-lingual deployments.
Option 3 – Use an S7-1500 as the OPC UA front-end
When the project is a multi-CPU architecture, route the data through an S7-1500 that exposes the LocalizedText variables natively, and use the S7-1200 purely as a controller. The S7-1200 exchanges data with the S7-1500 over PUT/GET, S7 communication, or PN/PN coupler.
Option 4 – Expose LocalizedText as a description
Keep the SIOME variable as a supported type (e.g. String) and place the human-readable label into the OPC UA Description field of the node. The S7-1200 server supports LocalizedText in the Description attribute of every node; the label is therefore visible to the client in the standard browse dialog without consuming a public variable slot.
Validated Configuration Matrix
| Workaround | Eng. effort | Client compatibility | Recommended for |
|---|---|---|---|
| String substitution | Low | All OPC UA clients | Single-locale sites, retrofits |
| Locale + text split | Medium | All OPC UA clients, custom parsing | Multi-lingual HMI/SCADA |
| Route via S7-1500 | High | Native LocalizedText | New greenfield plants |
| Description attribute | Very low | Browse/inspector UIs only | Static labels, diagnostics |
OPC UA Data Type Support on S7-1200
The S7-1200 OPC UA server implements the built-in OPC UA data types listed below as public variable data types (i.e. they can be assigned to a user-exposed tag in the server interface).
| OPC UA built-in id | Data type | S7-1200 supported? | How to declare in TIA |
|---|---|---|---|
| i=1 | Boolean | Yes | BOOL tag or DB element |
| i=2 | SByte | Yes | CHAR (USINT) |
| i=3 | Byte | Yes | BYTE / USINT |
| i=4 | Int16 | Yes | INT |
| i=5 | UInt16 | Yes | UINT / WORD |
| i=6 | Int32 | Yes | DINT |
| i=7 | UInt32 | Yes | UDINT / DWORD |
| i=8 | Int64 | Yes | LINT |
| i=9 | UInt64 | Yes | ULINT / LWORD |
| i=10 | Float | Yes | REAL |
| i=11 | Double | Yes | LREAL |
| i=12 | String | Yes | WSTRING / STRING |
| i=13 | DateTime | Yes | DTL / DATE_AND_TIME |
| i=14 | Guid | Yes (limited) | 16-byte array |
| i=15 | ByteString | Yes (as Array of Byte) | Array of BYTE via UDT |
| i=16 | XmlElement | No (system only) | n/a |
| i=17 | NodeId | No (system only) | n/a |
| i=18 | ExpandedNodeId | No (system only) | n/a |
| i=19 | StatusCode | No (system only) | n/a |
| i=20 | QualifiedName | No (system only) | n/a |
| i=21 | LocalizedText | Description only | Use as Description attribute, not as a public variable |
| i=22..25 | DiagnosticInfo, etc. | No (system only) | n/a |
The exact mechanism used by the TIA Portal server-interface editor to translate a SIMATIC data structure of type Array of Byte into an OPC UA ByteString (and the corresponding limitation for LocalizedText) is described in the official TIA Portal documentation in the section LocalizedText and ByteString data types: LocalizedText and ByteString data types – TIA Portal documentation.
Best Practices for SIOME Companion Specifications on S7-1200
- Author the model in SIOME 2.8.7 (or later) using only the data types listed as supported in the table above. Treat
LocalizedTextas a system-only type. - Maintain a parallel version of the same companion specification for S7-1500 where the native
LocalizedTextcan be retained. This allows the same conceptual model to be deployed on either platform. - Keep the total number of OPC UA variables on the S7-1200 within the platform limit (≤ 2 000 server-interface entries, ≤ 1 000 monitored items, ≤ 100 concurrent subscriptions – verify in the CPU's OPC UA server properties sheet for the exact value of the installed firmware).
- Always compile the project before downloading – the TIA Portal compiler emits the red error during compile, before runtime, which makes the issue easier to catch at engineering time.
- After downloading, validate the live address space with UaExpert and compare it against the SIOME model. A missing node indicates a data-type incompatibility rather than a network or security issue.
- Document the data-type substitution in the project FDS (Functional Design Specification) so the SCADA team knows that a String variable carries a previously LocalizedText value.
Verification After the Workaround Is Applied
- Open the modified SIOME project, regenerate the XML and re-import it into the S7-1200 server interface.
- Compile the TIA Portal project. No red squares should remain in the Node type column.
- Download the project to the S7-1215C and power-cycle (or perform an OPC UA server restart from the web server) so the address space is rebuilt.
- Connect UaExpert to
opc.tcp://<CPU-IP>:4840, accept the certificate and browse the address space. The previously missing nodes must now be present with the substituted type. - Subscribe to the variables and verify the value updates correspond to the PLC tags in the watch table.
Frequently Asked Questions
Why does the same SIOME XML load on the S7-1500 but fail on the S7-1215C?
The S7-1500 OPC UA server implements the full OPC UA built-in type table and exposes LocalizedText (built-in id 21) as a public, user-configurable variable data type. The S7-1200 server implements a reduced profile where LocalizedText is reserved for system use (browse names, descriptions) and is not available as a public variable. TIA Portal flags the unsupported usage with a red indicator in the server-interface table.
Is there a firmware update that adds LocalizedText user-variable support to the S7-1200?
No. The limitation is documented in the S7-1200 OPC UA server profile; the data type is not exposed as a public variable in firmware V4.5, V4.6 or V4.7. Use a supported data type such as String or move the data to an S7-1500 OPC UA front-end.
Can I use ByteString on the S7-1200 the same way I use it on the S7-1500?
Partially. The S7-1200 accepts ByteString as a public variable, but only when the underlying SIMATIC data is an Array of Byte declared inside a UDT and exposed through the TIA Portal server-interface editor. Direct embedding of a raw OPC UA ByteString tag in SIOME without the matching SIMATIC structure is not supported.
How do I keep multi-lingual labels visible to the OPC UA client without a LocalizedText variable?
Move the label to the OPC UA Description attribute of the node. The S7-1200 server renders Description as a LocalizedText that any OPC UA client can read through the standard Read service on the Description attribute – no public variable slot is consumed.
What SIOME and TIA Portal versions are confirmed affected?
The fault was reproduced with SIOME V2.8.7, TIA Portal V18 Update 4 and TIA Portal V20 on a CPU 1215C DC/DC/DC with firmware V4.5.0, V4.6.0 and V4.7.0. A reference S7-1511C-1 PN with firmware V2.9.0 imported the same XML without errors.