Resolving Simatic NET OPC DA Server RPC Connection Failure

David Krause19 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 a custom OPC DA client application attempts to connect to a remote SIMATIC NET OPC server using the Automation Interface (the SiemensOPCDAAutomation 2.0 wrapper that exposes the OPCServer, OPCGroup, and OPCItems classes), the MyOPCServer.Connect(ServerName) call in the VB.NET application fails with the message:

The RPC server is unavailable (Exception from HRESULT: 0x800706BA)

Supporting telemetry captured in the application, the COM trace file, and the Windows event log pinpoints the failure to the COM activation layer rather than the network or RPC endpoint mapper:

  • Visual Basic Err.Number = 462 with Source = Interop.OPCSiemensDAAutomation
  • SOPCDAAUTO_ERR line: ERR 'CoCreateInstance' OPCAutoServer::Connect, [hr=0x800706BA] ProgID: 'OPC.SimaticNET'
  • SOPCDAAUTO_ERR line: ERR 'gpOPC->GetClassDetails' OPCAutoServer::GetOPCServers, [hr2=0x80040154]
  • Windows Event Viewer (System log): DCOM was unable to communicate with the computer "NAME" using any of the configured protocols — event ID 10010

Diagnostic context: the same client can call GetOPCServers(RemoteMachineName) without error, and the Siemens-supplied OPC Scout test tool can read/write tags from the same remote machine, which proves the RPC plumbing (port 135 + dynamic ports) and the server-side DCOM permissions are correct. The asymmetry between the working reference client and the failing custom client is the diagnostic fingerprint of a missing COM class registration on the client, not a network, firewall, or DCOM authentication failure.

Environment & Affected Components

Component Specification
Server hardware SIMATIC MICROBOX PC (industrial PC)
Server OS Windows XP Embedded SP2
Server framework Microsoft .NET Framework 1.1
Server software SIMATIC NET PC software (OPC DA Server)
Client OS Windows XP SP3
Client framework Microsoft .NET Framework 3.5
Client IDE Microsoft Visual Studio 2008 Professional
Client runtime OPC Automation 2.0 wrapper (Interop.OPCAutomation.dllopcdaauto.dll)
Network Single Layer-2 switch, same Workgroup, no domain controller
Protocol tested Connection-oriented TCP/IP (Default Protocols in dcomcnfg)
PLC protocol S7 communication via ISO-on-TCP (port 102) to S7-300/400

The configuration is functional at the GetOPCServers call, which uses IOPCServerList::EnumClassesOfCategories to perform a CLSID enumeration over the local registry and the remote opcenum service. The failure point is the subsequent CoCreateInstance(CLSID_OPCServer, ..., ProgID="OPC.SimaticNET", ...), which is a remote COM activation that depends on both the local COM proxy/stub registration and the remote server's AppID launch permissions.

The same failure pattern applies to all SIMATIC NET versions from V6.x through V8.1 that ship the COM-based OPC DA server. The Automation wrapper (opcdaauto.dll) has been part of the SIMATIC NET PC software since the earliest releases and is identical across versions; only the underlying SIMATIC NET OPC DA server CLSID changes between major versions.

Decoding the Error

HRESULT Map

Symptom Value Meaning
HRESULT 0x800706BA RPC_E_SERVER_UNAVAILABLE / Win32 error 1722 — DCOM/RPC endpoint unreachable or COM server cannot be launched remotely
VB Err.Number 462 "The remote server machine does not exist or is unavailable" — historical mapping of the same RPC failure to the Automation wrapper
SOPCDAAUTO_ERR gpOPC->GetClassDetails ... [hr2=0x80040154] REGDB_E_CLASSNOTREG — the local proxy DLL is registered but the class object factory is not retrievable
SOPCDAAUTO_ERR CoCreateInstance ... [hr=0x800706BA] ProgID: 'OPC.SimaticNET' CLSID_OPCServer activation against ProgID OPC.SimaticNET failed at the COM runtime
Event Viewer "DCOM was unable to communicate with the computer 'NAME' using any of the configured protocols" DCOM runtime event 10010 — no protocol in the DCOM protocol sequence successfully contacted the target

The first SOPCDAAUTO_ERR line is the critical clue: 0x80040154 is raised before the RPC call, while enumerating the class object. It indicates the Automation wrapper DLL is present but not properly registered. The subsequent 0x800706BA is the secondary failure when the wrapper tries to launch the COM server on the remote host.

Other HRESULTs You Will See in This Failure Mode

HRESULT Name Trigger
0x800401F3 CO_E_CLASSSTRING ProgID string malformed, empty, or not in HKCR — typically a typo
0x80070005 E_ACCESSDENIED DCOM launch or access ACL denies the user; not the same as 0x800706BA but often reported in the same scenario
0x8000401A E_NOINTERFACE Proxy/stub DLL for the requested interface is not registered on the client
0x8001011A CO_E_PATHTOOLONG Server's executable path or working directory exceeds MAX_PATH (260 chars) on the server-side AppID

Anatomy of the SOPCDAAUTO_ERR File

The trace file is written by the SIMATIC NET OPC Automation wrapper to %TEMP%\SOPCDAAUTO_ERR.log and %TEMP%\SOPCDAAUTO_TRACE.log. Each line is structured as:

00000001 18:33:18,6020 D60 ***TRACEEVENT IS CREATED
00000002 18:33:18,6020 D60 ***TRACE IS INITIALIZED
00000003 18:33:18,6020 D60 -> DLL_PROCESS_ATTACH
00000004 18:33:18,6020 D60 <- DLL_PROCESS_ATTACH
00000005 18:33:26,7530 D60 ERR 'gpOPC->GetClassDetails' OPCAutoServer::GetOPCServers, [hr2=0x80040154]
00000006 18:33:31,7600 D60 ERR 'CoCreateInstance' OPCAutoServer::Connect, [hr=0x800706BA] ProgID: 'OPC.SimaticNET'
00000007 18:56:14,2100 D60 -> DLL_PROCESS_DETACH

The fields are: line number, HH:MM:SS,mmm timestamp, thread ID, severity (ERR or TRC), and the COM call site. The D60 suffix on the thread ID is a decimal-pid reference used by the trace writer. The hr and hr2 are the COM HRESULT and a secondary HRESULT for nested failures. In a healthy trace, the CoCreateInstance call is followed by a QueryInterface for IOPCServer and a successful AddRef; in the failure case, no such lines appear because the activation is rejected at the COM runtime.

Root Cause Analysis

The root cause is a missing COM proxy/stub registration and/or missing OPC Automation wrapper DLL on the client machine. Specifically:

  1. GetOPCServers succeeds because OPC Scout (installed together with SIMATIC NET) calls IOPCServerList against the local registry. The remote machine's CLSIDs are returned over the OPCEnum custom interface (TCP port 135 plus the OPCEnum endpoint) — no COM launch permission is required for enumeration.
  2. Connect fails because the client must now perform a remote COM activation. Windows uses the registered AppID for OPC.SimaticNET to look up the launch permissions, identity, and security blanket. On the client, two things are required:
    • The proxy/stub DLL for the IOPCServer interface family (opcproxy.dll) must be registered so the marshaled interface can be reconstructed locally.
    • The OPC Automation wrapper (OPCDAAuto.dll, the COM in-proc server that implements the friendly Automation classes such as OPCServer, OPCGroup, OPCItems) must be registered on the client.
  3. In the failing case, neither was present: the client had only the .NET Interop assembly built against the type library, not the actual COM server. The Visual Studio project included Interop.OPCSiemensDAAutomation.dll (the .NET RCW), but OPCDAAuto.dll itself — the COM DLL the RCW activates — was never registered on the client.
  4. The DCOMCNFG Default Protocols matched on both machines because both default to Connection-oriented TCP/IP. The mismatch is not in protocols but in the COM class registration.

Activation Flow Diagram

DCOM Remote COM Activation Flow VB.NET Client MyOPCServer.Connect() Interop.OPCSiemensDAAutomation Client COM Runtime CoCreateInstance() ProgID: OPC.SimaticNET Client Registry HKCR\OPC.SimaticNET AppID ACL, Proxy DLLs RPC Endpoint Mapper TCP 135 + dynamic ports Server-side AppID ACL check Server opcenum + OPC.SimaticNET SIMATIC NET S7DOS Failure: OPCDAAuto.dll not registered on client CoCreateInstance returns 0x800706BA, SOPCDAAUTO_ERR logged Fix: Install SIMATIC NET PC software on client Registers OPCDAAuto.dll, opcproxy.dll, opccomn_ps.dll, opcenum.exe Adds OPC.SimaticNET AppID and proxy/stub entries Reference: Microsoft COM Error Codes (learn.microsoft.com)

Resolution: Step-by-Step

Step 1: Install SIMATIC NET PC Software on the Client

The cleanest fix is to install the SIMATIC NET PC software on the OPC client machine using the same version (or a higher compatible version) as the server. This registers:

  • opcdaauto.dll — OPC DA Automation 2.0 wrapper, the COM in-proc server behind the .NET RCW
  • opccomn_ps.dll, opcproxy.dll — OPC DA proxy/stub DLLs
  • opcenum.exe — the OPCEnum service
  • The OPC.SimaticNET ProgID and its AppID ACLs
  • The SIMATIC NET DCOM configuration entries under HKCR\AppID\

Procedure:

  1. Insert the SIMATIC NET DVD or mount the ISO. Launch Setup.exe.
  2. Choose Custom Installation and select at minimum:
    • SIMATIC NET PC Software
    • OPC Server (DA)
    • OPC Scout (for verification)
  3. On the User Settings step, configure the same Workgroup or domain account that the server uses for the SIMATIC NET service. Both machines must recognize the same user.
  4. Complete the installation and reboot.

If the client is on a different domain or a Workgroup with no trust, install the same SIMATIC NET build version that the server uses, but run it as a standalone Workgroup client — the SIMATIC NET setup supports both modes. The supported build matrix is documented in the SIMATIC NET release notes; the typical rule is that the client can be a higher minor version than the server but not a lower minor version (e.g., V14 client to V13 server is supported; V12 client to V14 server is not).

Note: The SIMATIC NET installation registers the COM components with per-machine CLSIDs under HKCR\CLSID and HKLM\SOFTWARE\Classes. On a 64-bit client, the setup registers both 32-bit and 64-bit versions of OPCDAAuto.dll so that both x86 and x64 .NET applications can resolve the ProgID. Verify after install with reg query "HKCR\OPC.SimaticNET" /s from an elevated command prompt.

Step 2: Re-register the Automation DLL (Manual Recovery)

If a full SIMATIC NET install is not feasible, the minimum set of registrations on the client is:

regsvr32 opcdaauto.dll
regsvr32 opccomn_ps.dll
regsvr32 opcproxy.dll
opcenum.exe /regserver

These must be run from an elevated command prompt (Run as administrator) on Vista and later, or from an account with administrator privileges on Windows XP. Verify with:

reg query "HKCR\OPC.SimaticNET" /s
reg query "HKCR\AppID\{AppID_OPC.SimaticNET}" /s

If the ProgID is missing entirely, the SIMATIC NET install package is the supported route — the wrapper DLLs are not redistributable in isolation per the OPC Foundation redistribution policy referenced in the SIMATIC NET PC software release notes.

Step 3: Verify DCOM Configuration

Open dcomcnfg on both machines and apply the OPC Foundation DCOM settings:

Setting Server Client
Default Authentication Level Connect (1) Connect (1)
Default Impersonation Level Identify (2) Identify (2)
Default Protocols Connection-oriented TCP/IP Connection-oriented TCP/IP
Enable COM Internet Services on this computer unchecked unchecked
Enable Distributed COM on this computer checked checked

Then drill into Component Services → Computers → My Computer → DCOM Config, locate the OPC.SimaticNET server, and on the Security tab:

  • Launch and Activation Permissions → add the user that runs the VB client, grant Local Launch, Remote Launch, Local Activation, Remote Activation.
  • Access Permissions → add the same user, grant Local Access, Remote Access.
  • Configuration Permissions → leave at default unless the user needs to change settings.

On the Identity tab, select The interactive user if the VB application runs interactively, or This user with a domain/Workgroup service account that has access to the PLC network. For unattended services running under LocalSystem, choose This user with a named account — LocalSystem cannot authenticate to a remote machine across a Workgroup boundary.

On the Endpoints tab, ensure the DCOM protocol list includes Connection-oriented TCP/IP with the appropriate port range. The default is to use a dynamic range; if you need to lock down the firewall (recommended), restrict it as described in Step 5.

Critical: The Default Protocols setting in dcomcnfg applies to the entire machine and overrides any per-application endpoint configuration. If the server has Default Protocols set to Connection-oriented TCP/IP but a specific application override adds Named Pipes, the activation will succeed only if the client also has Named Pipes in its Default Protocols. The cleanest production setting is to keep the machine-wide default to TCP/IP only and not override per application.

Step 4: Configure the Windows Firewall

DCOM uses dynamic TCP ports in addition to port 135 (RPC Endpoint Mapper). For Windows XP, the firewall is Windows Firewall; for later versions, use the advanced firewall (wf.msc).

Open the following inbound rules on both machines:

Port Protocol Purpose
135 TCP RPC Endpoint Mapper (DCOM activation)
1024-65535 TCP DCOM dynamic port range (can be restricted to a specific range via netsh or registry)
102 TCP S7 ISO-on-TCP — between SIMATIC NET and the PLC, not between client and server

To restrict the DCOM port range on Windows XP and Server 2003, set the registry key:

HKLM\SOFTWARE\Microsoft\Rpc\Internet
  Ports = REG_MULTI_SZ "5000-5100"
  PortsInternetAvailable = REG_SZ "Y"
  UseInternetPorts = REG_SZ "Y"

…and add an exception for 5000-5100 TCP in the firewall. On Windows Vista and later, the equivalent is netsh advfirewall and the COM/DCOM predefined rule group. Reference: Microsoft DCOM technical reference.

Step 5: Verify with OPC Scout

Run OPC Scout on the client and connect to the remote OPC.SimaticNET server, then add a test item (e.g., S7:[S7 connection_1]DB1,INT0). If OPC Scout now also fails, the DCOM configuration is still wrong. If it succeeds (as in the source case), the fix is the missing local registration only.

Step 6: Validate the VB Application

Add diagnostic capture to the application so future failures are easier to triage:

Private Sub Button_Connect_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button_Connect.Click
    On Error GoTo ErrorHandler
    ServerName = ComboBox1_ServerList.Text
    Call MyOPCServer.Connect(ServerName)
    Button_AddGroup.Enabled = True
    Button_Disconnect.Enabled = True
    Exit Sub
ErrorHandler:
    MsgBox("Error! " & Err.Description & vbCrLf & _
           "Source: " & Err.Source & vbCrLf & _
           "ErrNr: " & Err.Number & vbCrLf & _
           "ErrHelpFile: " & Err.HelpFile & vbCrLf & _
           "ErrHelpContext: " & Err.HelpContext)
End Sub

And log the exact ProgID being passed to Connect — a misspelled or case-mismatched ProgID will produce a different HRESULT (0x800401F3 for CO_E_CLASSSTRING) that is easy to confuse with 0x800706BA.

DCOM Configuration Reference

Registry Keys Created by SIMATIC NET Install

Key Value Purpose
HKCR\OPC.SimaticNET\(default) OPC.SimaticNET ProgID self-reference
HKCR\OPC.SimaticNET\CLSID {...} ProgID → CLSID mapping
HKCR\CLSID\{CLSID}\(default) OPC.SimaticNET CLSID display name
HKCR\CLSID\{CLSID}\AppID {AppID} CLSID → AppID mapping for DCOM config
HKCR\CLSID\{CLSID}\LocalServer32 C:\Program Files\Siemens\Automation\SIMATIC.NET\opcda\s7dpsrv.exe Server executable on remote
HKCR\AppID\{AppID}\AccessPermission binary SD DCOM access ACL
HKCR\AppID\{AppID}\LaunchPermission binary SD DCOM launch ACL
HKCR\AppID\{AppID}\AuthenticationLevel 1 (Connect) Per-AppID auth level override

To audit the current state, run on the client after install:

reg query "HKCR\OPC.SimaticNET" /s
reg query "HKCR\CLSID" /f "SimaticNET" /s
reg query "HKLM\SOFTWARE\Siemens\AUTSW" /s

The HKLM\SOFTWARE\Siemens\AUTSW key is the SIMATIC NET installation registry, which records the installed PC software version, the S7DOS configuration, and the S7 connection names exported by Station Configuration Editor.

Default Authentication and Impersonation Levels Explained

Level Value Behavior OPC Suitability
Default 0 Let the server choose Indeterminate — avoid
None 1 No authentication Not for production
Connect 2 Authenticate only at connect time Recommended for OPC DA
Call 3 Authenticate at the start of each call Acceptable, higher overhead
Packet 4 Authenticate every packet High overhead, rare
Packet Integrity 5 All packets signed Reserved for high-security DCOM
Packet Privacy 6 All packets encrypted Reserved for high-security DCOM

The SIMATIC NET OPC DA reference client and most third-party OPC clients use Connect (2) for Authentication and Identify (2) for Impersonation. The Microsoft COM error code reference documents the full set of authentication constants.

Verification Matrix

Check Expected Result
reg query "HKCR\OPC.SimaticNET" on client Returns ProgID → CLSID mapping
GetOPCServers("REMOTE_PC") from VB Returns at least OPC.SimaticNET
Connect("OPC.SimaticNET") from VB Returns; no exception
MyOPCGroup = MyOPCServer.OPCGroups.Add("Group1") Returns valid group object
MyOPCGroup.OPCItems.AddItem("S7:[S7_1]DB1,INT0", 1) Returns valid item; ServerHandle > 0
MyOPCGroup.SyncRead(OPCCache, ItemCount, Serverhandles, Values) Returns values from PLC
Event Viewer System log (client) No new DCOM 10010 errors
Event Viewer System log (server) One successful activation per client session
SOPCDAAUTO_ERR file No 0x800706BA or 0x80040154 lines

Why OPC Scout Worked Without the Fix

OPC Scout is a SIMATIC NET component installed on the same image as the OPC server. It uses the same wrapper DLLs that the failing VB application needs but that the client lacked. The VB application did not actually need OPC Scout to be installed on the client — it only needs the OPC Automation wrapper registered. OPC Scout's success on the client was incidental, not a requirement.

This is a common pattern in OPC troubleshooting: the reference client (Scout, Matrikon, Kepware Quick Client) succeeds, but the production client fails, because the reference client is installed in a way that registers more COM components than the production client ships with. Engineers familiar with the works on the reference client symptom often conclude that the network and DCOM are correct, which is true, and then overlook the COM class registration layer.

Migrating to OPC UA

The entire class of DCOM-related failures described here — 0x800706BA, 0x80040154, event 10010, firewall port gymnastics, identity mismatch — disappears when the application is migrated to OPC UA. The SIMATIC NET OPC UA server (component of SIMATIC NET V8.1 and later) speaks the binary OPC UA protocol over TCP port 4840, optionally with certificate-based authentication and AES-256/SHA-256 encryption.

To migrate the VB.NET application:

  1. Add the OPC Foundation .NET Standard stack (Opc.Ua.Client) via NuGet, or the legacy OPC Foundation .NET API for .NET Framework targets.
  2. Discover the endpoint:
    var discovery = new DiscoveryClient(new Uri("opc.tcp://server:4840"));
    var endpoints = discovery.GetEndpoints(null);
    
  3. Create a session using the Certificate and UserIdentity configured in SIMATIC NET.
  4. Translate the legacy ItemID (e.g., S7:[S7_1]DB1,INT0) to the corresponding NodeId (e.g., ns=3;s="DB1"."INT0").

The OPC UA route also lifts the platform constraint to any modern Windows, Linux, or container that supports .NET Standard 2.0 or higher — useful when the legacy Windows XP Embedded server is finally retired. The OPC Classic specifications and the OPC UA specification at the OPC Foundation describe the address space mapping.

Common Pitfalls & Edge Cases

Pitfall Symptom Fix
ProgID case mismatch (OPC.Simaticnet vs OPC.SimaticNET) 0x800401F3 CO_E_CLASSSTRING Use the exact string from GetOPCServers output
Mismatched DCOMCNFG Default Authentication between client and server 0x800706BA or 0x80070005 (access denied) Set both to Connect / Identify
DCOMCNFG Enable Distributed COM unchecked on the server All remote activations fail with 0x800706BA Check on the server
32-bit/64-bit mismatch between OPCDAAuto.dll and the .NET application 0x80040154 in 64-bit client Register the 64-bit OPCDAAuto.dll or build the app for x86
VB running as a non-interactive service with Identity = The interactive user Activation succeeds only when a user is logged in Switch to This user with a service account
opcenum.exe not running on the server GetOPCServers returns empty for remote sc config opcenum start= auto and start the service
SIMATIC NET S7DOS configuration not deployed Connect succeeds but AddItem returns E_INVALIDHANDLE Re-export the S7 connection from the server's Station Configuration
Multi-homed server with DCOM bound to the wrong NIC Intermittent 0x800706BA on the wrong subnet Restrict DCOM endpoints in DCOMCNFG → Default Protocols → Properties
Windows Firewall blocks the dynamic DCOM range Intermittent success when the port is below 5000, failure above Open the locked range (e.g., 5000-5100) per Step 4
Group Policy overrides dcomcnfg settings on restart Works after manual config, fails after reboot Configure DCOM via Group Policy Preferences or local GPO
Workgroup with different local accounts on each machine Activation fails with 0x80070005 after DCOM works once Create matching user/password on both machines, or join a domain

Diagnostic Tools

Tool Use
DCOM Trace (built-in, enable via dcomcnfg → Default Properties → Enable Distributed COM tracing) Captures every CoCreateInstance call to %SystemDrive%\tracing\com\dcom.log with full HRESULT trail
Sysinternals Process Monitor Filter on opcdaauto.dll / opcproxy.dll and watch for NAME NOT FOUND on the registry path HKCR\OPC.SimaticNET
dcomperm (Windows Resource Kit) Dump and compare the AppID ACLs on server vs client; useful when the LaunchPermission SD has been overwritten by Group Policy
SIMATIC NET Trace (start via SIMATIC NET Configuration → Diagnostics) Captures the S7DOS and OPC server-side activity; shows S7 connection state, item resolution, and S7 protocol errors
Wireshark with dcom and ms-rpc dissectors Verify port 135 traffic and the activation request; a successful activation shows IUnknown::QueryInterface for IID_IOPCServer inside the ORPC
Windows Event Viewer → Applications and Services Logs → Microsoft → Windows → DCOM Event ID 10010 lists the specific protocol sequence that failed; the message is per-protocol, so the diagnostic narrows to TCP vs Named Pipes vs UDP

Reference: Siemens Industry Online Support hosts the SIMATIC NET manuals, release notes, and the S7DOS configuration guide. Search for "SIMATIC NET OPC DCOM configuration" for the canonical DCOM setup procedure.

Security & Identity Considerations

Across a Workgroup, DCOM uses the local SAM account database on each machine; there is no Kerberos. The practical implications:

  • The account that runs the VB client must exist on the server with the same username and password, or the DCOM activation will fail at the security blanket stage with 0x80070005 rather than the 0x800706BA seen in the unregistered scenario.
  • Local Administrators group membership on the server is sufficient for DCOM launch and activation; OPC read/write authorization is separate and enforced by the SIMATIC NET OPC server based on the SIMATIC NET user rights configured in Station Configuration Editor.
  • For a domain-joined environment, the domain controller is contacted for SIDs; the same user is resolved transparently on both machines. The error pattern in this article is typical of the Workgroup case, not the domain case.
  • If the VB application is later moved to run as a Windows service, the service account must have the SeLogonRight (Allow log on locally) and SeNetworkLogonRight (Access this computer from the network) privileges, and must be granted DCOM launch/activation on the server's OPC.SimaticNET AppID.
Security advisory: The Windows Firewall rule for DCOM (port 135 + dynamic range) is a high-value target for lateral movement. The recommended hardening is to restrict the DCOM port range to a small set (e.g., 5000-5100) and to require IPsec between the client and server. The Microsoft DCOM troubleshooting documentation covers the IPsec and firewall hardening steps in detail.

Frequently Asked Questions

What does HRESULT 0x800706BA mean in a Simatic NET OPC connection?

It is the COM-mapped value of Win32 error 1722 (RPC_E_SERVER_UNAVAILABLE). When returned from a CoCreateInstance call on a ProgID such as OPC.SimaticNET, it means the COM runtime could not complete the remote activation — usually because the class is not registered on the client, the AppID launch permission is missing, or the DCOM port is blocked. Inspect the SOPCDAAUTO_ERR log on the client for the actual HRESULT of the underlying CoCreateInstance, which is the layer-correct diagnostic. The Microsoft COM error code reference documents the full HRESULT set.

Why does OPC Scout work but my custom VB OPC client does not?

OPC Scout is a SIMATIC NET component that ships the OPC Automation wrapper (opcdaauto.dll) and proxy/stub DLLs, all registered on install. A custom VB client built with only the .NET Interop assembly activates the COM server from the registry on the client machine; if the wrapper DLL is not registered, CoCreateInstance fails with 0x800706BA. Installing SIMATIC NET (or registering opcdaauto.dll, opcproxy.dll, opccomn_ps.dll, and opcenum.exe /regserver) on the client resolves the asymmetry.

Do I need to install the full SIMATIC NET PC software on the OPC client?

For production-grade installations, yes. The supported path is to install the same SIMATIC NET version (or a higher compatible version) on the client. The minimum runtime for DA-only clients is the OPC Core Components (opcdaauto.dll, opcproxy.dll, opccomn_ps.dll, opcenum.exe), but these are not redistributable as a standalone package and the SIMATIC NET installer is the supported mechanism. See the Siemens Industry Online Support portal for the current SIMATIC NET PC software release notes and the OPC DA component checklist.

What ports must be open between OPC client and SIMATIC NET server?

Open inbound TCP 135 (RPC Endpoint Mapper) on the server. DCOM also uses dynamic TCP ports 1024-65535; restrict the range via the HKLM\SOFTWARE\Microsoft\Rpc\Internet registry key on Windows XP / Server 2003, and via the COM/DCOM rules in Windows Firewall with Advanced Security on Vista and later. The S7 protocol between SIMATIC NET and the PLC uses TCP 102 (ISO-on-TCP) or the configured ISO port — that is between the SIMATIC NET server and the PLC, not between the OPC client and the SIMATIC NET server.

How do I migrate from Simatic NET OPC DA to OPC UA to eliminate DCOM?

SIMATIC NET V8.1 and later ship an OPC UA server on TCP port 4840. Replace the OPC Automation wrapper calls in your client with the OPC Foundation .NET Standard stack (Opc.Ua.Client), discover endpoints with DiscoveryClient, open a session with the configured certificate, and read NodeIds such as ns=3;s="DB1"."INT0". The S7 address format S7:[connection]DBx,BYTEy maps to UA NodeIds documented in the SIMATIC NET OPC UA programming manual. The OPC Foundation provides the .NET reference stack and the address-space specification.

Back to blog