Resolving WinCC Runtime OPC UA Client Errors to Siemens TCSB v3

David Krause16 min read
OPC / OPC UASiemensTroubleshooting
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Problem Overview

When configuring Siemens WinCC Runtime Advanced as an OPC UA client against a SIMATIC TCSB v3 (TeleControl Server Basic) OPC UA server, the HMI tag configured for the OPC UA connection state - or any other process value - displays the placeholder string ### instead of the actual value. Runtime logging shows no explicit error code, the OPC UA connection state indicator in the runtime appears nominal, and third-party OPC UA clients (such as UA Expert) on the same engineering workstation read the same tags without issue. OPC Classic DA browsing from the same WinCC Runtime Advanced works normally, indicating the runtime itself is functional and that the failure is isolated to the OPC UA channel path between WinCC and TCSB.

This defect has two independent root causes that frequently appear together and that must both be cleared before the tag updates:

  1. An OPC UA NodeId address typed with incorrect case in the WinCC tag configuration. OPC UA is a strictly case-sensitive protocol; the browse tree shown by WinCC or by external OPC UA clients can mislead the engineer because browse names often appear in mixed case while the formal NodeId string requires canonical capitalisation.
  2. An untrusted server certificate in the WinCC Runtime OPC UA PKI store. Even when the OPC UA endpoint is configured with Security = None, WinCC Runtime still performs a certificate trust check before exchanging application URIs, and an unknown server certificate results in the tag being silently dropped from subscription.
Both faults produce the same visible symptom (### display) and both must be cleared. Fixing only one of them leaves the runtime in the same failed state.

Affected Environment and Components

Component Version / Configuration
WinCC Runtime Advanced Configured as OPC UA client; installed on a separate engineering/runtime PC
TIA Portal (engineering) V13 SP1 or later (case-correction behaviour explicitly noted at V13 SP1)
SIMATIC TCSB Version 3.x with built-in OPC UA server
OPC UA discovery URL opc.tcp://<hostname>:4852
OPC UA security policy None (no encryption, no signing)
External test client used for isolation Unified Automation UA Expert (read succeeded, confirming server reachability and tag existence)
Network Hostname resolution required; ping <hostname> must succeed before OPC UA client connection is attempted
Operating system account Local administrator required for first-time certificate movement into the WinCC trust store

TCSB exposes its data on TCP port 4852 by default. The discovery URL syntax opc.tcp://<hostname>:4852 is the canonical endpoint advertised by the TCSB OPC UA server. The hostname - not the IP address - must be used in the discovery URL and in subsequent address components because OPC UA uses the hostname as the application URI basis for certificate matching. If the certificate is issued for CN=TCSBHost but the runtime connects to 10.0.0.5, the application URI mismatch will also trigger a rejection even after the certificate is moved to certs\.

Root Cause #1: OPC UA NodeIds Are Case-Sensitive

OPC UA identifies nodes by NodeId, and the string-form NodeId follows the structure ns=<namespace-index>;s=<identifier> for string identifiers. The browse view in WinCC and in third-party clients surfaces the address using the browse name (for example connectionstate), but the underlying identifier that the server accepts is the canonical capitalised form. Browsing a node and copy-pasting the path verbatim therefore often produces an identifier that the server cannot resolve, and the runtime renders the resulting Bad_NodeIdUnknown status as ###.

The original (failing) connection-state NodeId pasted from the WinCC browse dialog:

ns=TCS;s=tcs:[projectname.stationname.101]connectionstate

The same NodeId in the canonical form accepted by TCSB:

ns=TCS;s=TCS:[projectname.stationname.101]ConnectionState

Specifically the corrections are:

  • The namespace prefix TCS must be uppercase; tcs is rejected.
  • The instance identifier ConnectionState uses PascalCase (C and S capitalised).
  • The project name and station name within the square brackets are case-sensitive: [ProjectA.StationB.101] and [projecta.stationb.101] resolve to different nodes, and an unknown node name typically returns Bad_NodeIdUnknown which WinCC then renders as ###.
  • For data block references the block name must be uppercase, e.g. DB1, not db1.
  • Process value type qualifiers are also case-sensitive and must use uppercase identifiers (for example :BOOL rather than :bool).
  • The numeric station suffix .101 is not case-sensitive in itself but must match the TCSB station number exactly; if the station is configured with suffix .102, .101 returns Bad_NodeIdUnknown.
TIA Portal V13 SP1 does not auto-correct the case when the address is pasted or manually entered; the engineer must re-key the address in the correct case directly in the tag properties. Later TIA Portal versions (V15.1 and newer with WinCC Unified) preserve the case but still do not silently correct an incorrect entry. Always re-key after paste rather than assuming the IDE will normalise the string.

Root Cause #2: Untrusted Server Certificate in the WinCC Trust Store

WinCC Runtime Advanced performs a server-certificate trust evaluation before it allows the OPC UA session to subscribe to tags. This evaluation runs even when the endpoint is configured with SecurityPolicy = None, because the trust evaluation is part of the OPC UA application-layer authentication step, not of the transport encryption step. When the TCSB server certificate is not yet in the WinCC trust store, the runtime places the certificate in the rejected folder rather than accepting it. The OPC UA session is then closed at the OpenSecureChannel stage, and every subscribed tag is marked invalid.

Third-party OPC UA clients (such as UA Expert from Unified Automation) implement a one-click "accept server certificate" workflow in the GUI. WinCC Runtime Advanced has no equivalent interactive prompt; certificate handling is performed silently against the file system, and the engineer must move files between folders manually.

The certificate store layout for WinCC Runtime Advanced is:

C:\ProgramData\Siemens\CoRtHmiRTm\OPC\PKI\CA\default\rejected
C:\ProgramData\Siemens\CoRtHmiRTm\OPC\PKI\CA\default\certs
C:\ProgramData\Siemens\CoRtHmiRTm\OPC\PKI\CA\!TCSB1\certs

Two sub-folders are typically present:

  • default - contains certs\ (trusted) and rejected\ (rejected) subfolders.
  • !TCSB1 - a server-specific trust folder named after the TCSB instance (note the leading exclamation mark that distinguishes instance folders from the default folder). For multiple TCSB instances additional folders !TCSB2, !TCSB3 etc. will be created.

When the WinCC Runtime is started for the first time against a new TCSB server, the TCSB server certificate is placed in ...\default\rejected\. Until that certificate is moved to ...\default\certs\, the OPC UA session is rejected and all tags return ### regardless of how the address is typed.

Diagnostic Logging Locations

Before applying the fixes, capture the current OPC UA status to confirm the suspected root cause:

Log source Path What it tells you
WinCC Runtime OPC UA channel log %ProgramData%\Siemens\CoRtHmiRTm\Logs\ Shows Bad_NodeIdUnknown, Bad_CertificateUntrusted, Bad_CommunicationError from the OPC UA stack
CoRtHmiRTm service trace %ProgramData%\Siemens\CoRtHmiRTm\Trace\ Detailed handshake trace including endpoint URL, security policy, certificate subject and issuer
Windows event log (Application) eventvwr.msc Records CoRtHmiRTm service start/stop and OPC UA connection failures with HRESULT codes
TCSB OPC UA server log TCSB installation directory, Logs\OpcUaServer.log Server-side view: shows incoming session requests, rejected client certificates, and NodeId lookup failures

When reviewing the CoRtHmiRTm trace, look specifically for the string Bad_CertificateUntrusted (hex status code 0x801A0000) which confirms the certificate path is the active fault, or for Bad_NodeIdUnknown (hex status code 0x80340000) which points to the case-sensitivity fault.

Resolution: Correct the OPC UA Tag Address Case

Apply the following corrections in the WinCC tag configuration inside TIA Portal:

  1. Open the WinCC project in TIA Portal and navigate to HMI Tags.
  2. Open the OPC UA connection properties and confirm the discovery URL is opc.tcp://<hostname>:4852 with Security Policy = None.
  3. Open the tag whose address displays ###. Do not rely on the browse dialog - type the address manually in the correct case.
  4. For the connection state tag of a station, use exactly:
    ns=TCS;s=TCS:[<ProjectName>.<StationName>.101]ConnectionState
    Replace <ProjectName> and <StationName> with the actual TCSB project and station names, preserving their original case as configured in TCSB.
  5. For a data block (DB) variable access, use:
    ns=TCS;s=TCS:[<ProjectName>.<StationName>.101]DB1.<VariableName>
    Note that DB1 must be uppercase; db1 will be rejected.
  6. For a process value with type qualifier, ensure the type identifier uses uppercase:
    ns=TCS;s=TCS:[<ProjectName>.<StationName>.101]<ProcessValueName>:<TYPE>
  7. Compile the project and download to the WinCC Runtime target.
  8. Trigger a runtime restart so the new tag configuration is reloaded into the OPC UA subscription.

Resolution: Trust the TCSB Server Certificate

Apply the following on the PC that runs WinCC Runtime Advanced. The procedure requires local administrator rights.

  1. Confirm hostname resolution: open an elevated command prompt and run ping <TCSB-hostname>. The command must return a response from the configured hostname, not from an IP address. If ping fails by hostname, edit C:\Windows\System32\drivers\etc\lmhosts (uncomment the lmhosts sample entry first) or add a DNS entry so the hostname resolves.
  2. Stop the WinCC Runtime.
  3. Open Windows Explorer and navigate to:
    %ProgramData%\Siemens\CoRtHmiRTm\OPC\PKI\CA\default\
  4. Open the rejected subfolder. Locate the TCSB server certificate file (DER-encoded .der file with a long hex-style name based on the certificate thumbprint).
  5. Move (or copy) the certificate file into the certs subfolder:
    %ProgramData%\Siemens\CoRtHmiRTm\OPC\PKI\CA\default\certs\
  6. Optionally, repeat the move into the !TCSB1 instance folder to permanently trust the TCSB instance certificate:
    %ProgramData%\Siemens\CoRtHmiRTm\OPC\PKI\CA\!TCSB1\certs\
  7. Restart the WinCC Runtime.
  8. Re-test the tag value. The ### should be replaced by the live value.
If the certificate does not appear in the rejected folder after the first failed connection attempt, start the WinCC Runtime once and stop it again - the rejection file is written during the OPC UA handshake, not before. A typical first-time TCSB connection attempt generates the .der file in rejected\ within 5-10 seconds.

For deployments using WinCC Runtime Professional instead of Advanced, refer to the Siemens application example on TCSB certificate management which details the equivalent procedure for the Professional runtime certificate store and WinCC Unified trust configuration: TCSB Certificate Management with WinCC Professional (PDF).

Configuration Reference for TIA Portal V13 SP1

The original case-sensitivity problem was identified and documented in the Siemens application example "Monitoring of remote measuring points using an RTU3030C" (entry ID 109739240), with the relevant guidance on page 39. The example notes:

  • OPC UA distinguishes between upper and lower case in the address string.
  • In TIA Portal V13 SP1 the address must be corrected manually; the portal does not normalise the case on import.
  • The correction applies to the namespace prefix, the instance identifier, the project name, the station name, the data block identifier, and the process-value type qualifier.

Handling Multiple TCSB Stations

For deployments that aggregate multiple TCSB stations into one WinCC Runtime, the certificate step must be repeated for each station's certificate if each station terminates its own TLS handshake. In practice, all stations connect to a single TCSB OPC UA server endpoint on port 4852, so a single server certificate move is sufficient - but each station address must still be entered in the correct case:

ns=TCS;s=TCS:[MyProject.PumpStation01.101]ConnectionState
ns=TCS;s=TCS:[MyProject.PumpStation02.101]ConnectionState
ns=TCS;s=TCS:[MyProject.PumpStation03.101]ConnectionState

When the project name contains spaces or special characters, wrap the bracketed segment in single quotes when used in script or dynamic address construction; the literal NodeId string itself is unaffected.

Update Rate, Deadband and Subscription Behaviour

Once the connection is established, the OPC UA subscription configured in the WinCC tag properties controls how often the runtime polls TCSB. Recommended settings for a TeleControl HMI:

Parameter Recommended value Notes
Acquisition cycle 1000 ms Matches TCSB default update rate; shorter cycles add load without benefit
Update cycle (HMI refresh) 2000 ms Slower than acquisition to coalesce updates and reduce flicker
Deadband (analog values) 1% of EU Prevents unnecessary updates when the telecontrol value oscillates by LSB
Connection timeout 10 s Long enough for TCSB to respond over WAN, short enough to surface outages quickly
Reconnection interval 30 s WinCC Runtime retries the session this often after a drop
If the tag value updates once after the fix is applied, then freezes at the new value even when TCSB data changes, the subscription has been dropped - usually because the endpoint security policy does not match. Confirm both client and server are configured for Security = None, or both for the same Sign / SignAndEncrypt policy with matching certificates.

Verification Procedure

After applying both fixes, verify the connection end-to-end:

  1. From the WinCC Runtime PC, run ping <TCSB-hostname>. A successful reply by hostname (not IP) is required.
  2. Start the WinCC Runtime. Open the configured HMI screen.
  3. Confirm the ConnectionState tag shows a value other than ###. Typical valid values are 0 (disconnected) and 1 (connected).
  4. Open the WinCC Runtime diagnostics (or the CoRtHmiRTm log under %ProgramData%\Siemens\CoRtHmiRTm\Logs\) and confirm no OPC UA Bad_NodeIdUnknown or Bad_CertificateUntrusted entries are present.
  5. Cross-check the value with UA Expert (or any other OPC UA client) reading the same NodeId. The two values must match.
  6. Force a state change on the TCSB station (for example, take the station offline and back online) and confirm the value updates within the configured update interval (default 1 s).
  7. Reboot the WinCC Runtime PC and confirm the tags resume updating without manual certificate movement - this confirms the certificate is permanently trusted.

OPC UA Address Reference Table

Purpose Browse path Correct NodeId Common typo
Connection state Root/Objects/OPC.simaticNET.TCSB/<Project>/Process Stations/<Station>.101/System Data/ConnectionState ns=TCS;s=TCS:[<Project>.<Station>.101]ConnectionState Lower-case tcs, lower-case connectionstate
DB variable access Root/Objects/OPC.simaticNET.TCSB/<Project>/Process Stations/<Station>.101/Objects/DB/DB1/... ns=TCS;s=TCS:[<Project>.<Station>.101]DB1.<Var> db1 instead of DB1
Process value with type Root/Objects/OPC.simaticNET.TCSB/<Project>/Process Stations/<Station>.101/<PV> ns=TCS;s=TCS:[<Project>.<Station>.101]<PV>:<TYPE> Lower-case type identifier (e.g. :bool instead of :BOOL)
Station diagnostics Root/Objects/OPC.simaticNET.TCSB/<Project>/Process Stations/<Station>.101/Diagnostics/... ns=TCS;s=TCS:[<Project>.<Station>.101]<DiagName> Wrong browse copy from connectionstate branch reused in diagnostics branch

OPC UA Status Code Quick Reference

Status name Hex code Symptom in WinCC Typical cause
Bad_NodeIdUnknown 0x80340000 ### Wrong NodeId, wrong case, or non-existent station number
Bad_CertificateUntrusted 0x801A0000 ### Server certificate not in certs\ folder
Bad_CertificateTimeInvalid 0x801A0001 ### PC clock skew outside certificate validity window
Bad_CertificateHostnameInvalid 0x801A0002 ### Discovery URL uses IP instead of certificate hostname
Bad_CommunicationError 0x80050000 ### TCP 4852 blocked, server down, DNS failure
Bad_AttributeIdInvalid 0x80350000 ### NodeId resolved but attribute (e.g. Value) not supported
Good_LocalOverride 0x00960000 Value Value is being forced by an internal simulator

Troubleshooting Matrix

Symptom Probable cause Diagnostic step Fix
Tag displays ### for connection state Case mismatch in NodeId Compare NodeId string against canonical form in this article; verify each segment case Re-key the NodeId manually in TIA Portal with correct capitalisation
Tag displays ### but UA Expert reads correctly Server certificate not trusted by WinCC Runtime Inspect %ProgramData%\Siemens\CoRtHmiRTm\OPC\PKI\CA\default\rejected\ for the TCSB certificate Move certificate to ...\default\certs\ and restart WinCC Runtime
Ping by hostname fails Name resolution broken ping <hostname> Edit lmhosts or DNS so hostname resolves
OPC UA Discovery fails on opc.tcp://<hostname>:4852 Firewall blocking TCP 4852 or service not running From the runtime PC: Test-NetConnection <hostname> -Port 4852 Open firewall rule for TCP 4852 inbound on TCSB host; start TCSB OPC UA service
OPC Classic DA browses correctly but OPC UA shows ### OPC UA-specific issue (address case or certificate), not a runtime fault Apply both fixes in this article Re-key address in correct case; trust certificate
Tag updates once then freezes Subscription dropped because endpoint security mismatch Confirm Security Policy = None in OPC UA connection properties Set both endpoint and connection to None for non-encrypted TCSB deployments
Tag value oscillates by LSB No deadband configured Inspect tag acquisition properties Set deadband to 1% of engineering unit range for analog values
Tags work on engineering PC but not on runtime PC Trust store not replicated to runtime PC Compare ...\PKI\CA\ contents on both PCs Copy the trusted certificate from engineering PC certs\ to runtime PC certs\

Backup and Restore of the Trust Store

For fleet deployments of WinCC Runtime Advanced that talk to a single TCSB server, capture the certificate set once on the engineering PC and deploy it as part of the runtime image:

  1. After confirming the OPC UA connection works on the engineering PC, copy the entire %ProgramData%\Siemens\CoRtHmiRTm\OPC\PKI\CA\ tree.
  2. On each runtime PC, replace the same path with the copied tree before the first runtime start. This eliminates the per-PC certificate-movement step.
  3. If the TCSB server certificate is renewed (for example, after a server hardware swap), repeat the certificate-movement procedure on every runtime PC; pre-deployment of the old certificate no longer applies.

Related Topology Alternatives

Where the native WinCC Runtime Advanced OPC UA channel is not appropriate (for example, on SIMATIC HMI Comfort Panels that pre-date OPC UA client support, or where a third-party aggregation server is already present), the OPC UA topology can be reorganised:

Migration Path to WinCC Unified

For new projects, WinCC Unified (TIA Portal V16+) provides a more robust OPC UA client experience and resolves the case-sensitivity issue at the engineering layer through the TIA Portal OPC UA Companion Specification importer, which validates NodeIds against the server's address space at design time. When migrating an existing WinCC Runtime Advanced project that subscribes to TCSB:

  1. Re-export the TCSB address space using UA Expert's CSV export.
  2. Import the CSV into the WinCC Unified OPC UA client configuration.
  3. Validate that the imported NodeIds match the canonical capitalisation shown in the reference table above.
  4. Deploy the WinCC Unified project and confirm certificate trust via the TIA Portal Certificate Manager instead of file-system manipulation.

Security Considerations Beyond Security = None

The procedures above assume Security Policy = None, which is appropriate for trusted LAN segments. For WAN or untrusted network deployments between WinCC Runtime and TCSB, switch both ends to Basic128Rsa15 or Basic256Sha256 with self-signed certificates. In this configuration:

  • Both WinCC Runtime and TCSB must trust each other's certificates - the WinCC client certificate must be exported from %ProgramData%\Siemens\CoRtHmiRTm\OPC\PKI\CA\default\certs\ and imported into the TCSB trusted clients store.
  • The TCSB server certificate must be moved from rejected\ to certs\ on the WinCC Runtime PC as described above, but additionally the certificate must be valid (not expired, not outside the certificate validity window of the runtime PC clock).
  • The application URI in the certificate must match the hostname used in the discovery URL, otherwise Bad_CertificateUriInvalid (hex 0x801A0004) is raised.
Re-keying the NodeId in the correct case and trusting the certificate are both required. Fixing only the certificate trust leaves the Bad_NodeIdUnknown status in place; fixing only the case leaves the certificate rejection in place. Both must be cleared in the same maintenance window before commissioning sign-off.

FAQ

Why does WinCC Runtime show ### for an OPC UA tag that UA Expert reads without problems?

Two causes are typical: (1) the NodeId string is typed with incorrect case (OPC UA is case-sensitive in all segment identifiers), or (2) the TCSB server certificate is sitting in %ProgramData%\Siemens\CoRtHmiRTm\OPC\PKI\CA\default\rejected\ instead of ...\default\certs\. Re-key the NodeId in canonical case and move the certificate, then restart the runtime.

What is the correct NodeId for the TCSB station connection state?

ns=TCS;s=TCS:[<ProjectName>.<StationName>.101]ConnectionState. All identifiers - the TCS prefix, ConnectionState, the project name, and the station name - are case-sensitive and must match the TCSB configuration exactly.

Does the OPC UA certificate trust step apply when Security Policy is None?

Yes. WinCC Runtime performs an application-layer certificate evaluation independent of transport encryption. With Security Policy = None the channel is unencrypted but the server certificate must still be trusted or the session is rejected at OpenSecureChannel.

Which TCP port does the TCSB OPC UA server use?

TCSB exposes its OPC UA server on TCP port 4852 by default. The discovery URL is opc.tcp://<hostname>:4852 and the firewall must allow inbound traffic on this port from the WinCC Runtime host. Verify with Test-NetConnection <hostname> -Port 4852 from the runtime PC.

Where can I find the official Siemens documentation for this case-sensitivity behaviour?

Siemens entry ID 109739240 (Monitoring of remote measuring points using an RTU3030C), page 39, documents the case-sensitivity correction. Certificate handling for WinCC Professional is documented separately in entry 109973135.

Back to blog