Skip to content

OPC DA

OPC DA (Data Access) is the most widely used component of the OPC Classic standards. It is built on Windows COM/DCOM technology and provides real-time data access. It was used as the de facto standard in industrial automation before OPC UA.

inSCADA supports the OPC DA protocol in Client role only.

FeatureOPC DAOPC UA
PlatformWindows onlyPlatform independent
TechnologyCOM/DCOMTCP/IP, HTTP, WebSocket
SecurityDCOM securityTLS, certificates, user auth
DiscoveryVia DCOMBrowse + Discovery
StatusLegacyActive development
Connection (COM ProgID) Device / Frame (Data Block — Subscription group) / Variable (Item ID) Connection (COM ProgID) Device Frame (Data Block — Subscription group) Variable (Item ID)
ParameterExampleDescription
ProtocolOPC DAProtocol selection
IP Address192.168.1.100OPC DA server IP address
Port135DCOM port (default: 135)
COM ProgIDMatrikon.OPC.SimulationOPC server COM programmatic identifier
Separator.Tag path separator character (default: dot)
Max Depth12Tag tree browse depth
Server Status Check Time30000 msServer status check period
UsernameSERVER\\opcuserThe connection’s Windows account — see the Windows account for a remote server
Password••••That account’s password
ParameterExampleDescription
Scan Time1000 msScan period
Scan TypePERIODICPERIODIC or FIXED_DELAY
ParameterExampleDescription
Use Subscription ModetrueSubscription-based data retrieval (notification on change)
Percent Deadband0.5Analog value change threshold (%)

Subscription Mode: When true, the OPC server sends notifications only when values change — reducing network traffic and CPU load. When false, periodic polling is performed.

ParameterExampleDescription
NameTemperatureVariable name (also used as OPC Item ID)
TypeVT_R4OPC DA data type
Array Index0The element index on an array-valued item (0 – 65535)
Data TypeDescription
VT_BOOLBoolean
VT_I1Signed 8-bit integer
VT_UI1Unsigned 8-bit integer
VT_I2Signed 16-bit integer
VT_UI2Unsigned 16-bit integer
VT_INTSigned 32-bit integer
VT_UINTUnsigned 32-bit integer
VT_I8Signed 64-bit integer
VT_R432-bit floating point (float)
VT_R864-bit floating point (double)
VT_BSTRCharacter string

inSCADA can discover available items by browsing the OPC DA server’s tag tree. This feature makes it easier to find the correct Item ID information when defining variables.

A remote server: what to do on both machines

Section titled “A remote server: what to do on both machines”

This section covers the case where the OPC server sits on another Windows machine. With the server on the same machine as inSCADA, none of it is needed — DCOM never comes into play.

A DCOM connection goes through three separate steps, each with requirements of its own. The quickest way to understand why an installation is not working is to find which step it fails at.

StepDirectionWhat happensWhat it needs
1. ActivationinSCADA → server machine, TCP 135The server machine starts the OPC server; COM ProgID is resolved thereAn account with DCOM permission, 135 open
2. CallsinSCADA → the OPC server process, dynamic portReads, writes, browseInbound permission for the OPC server’s program on the server machine
3. Callbackserver → inSCADA, dynamic portSubscription valuesInbound permission for Java on the inSCADA machine, and a matching DCOM permission

1. The Windows account: who inSCADA connects as

Section titled “1. The Windows account: who inSCADA connects as”

There are two ways.

a) An account on the connection — recommended. Fill in Username and Password on the connection form; the user name is SERVER\user (workgroup) or DOMAIN\user. inSCADA then makes all of that connection’s outgoing calls as that account: activation, reads, writes, browse and the server list. It is the same thing Windows does with runas /netonly — the inSCADA service keeps running under its own account and only goes out to the network as this one.

What that buys you: the inSCADA service account does not need a mirror on the server machine, and different servers can be reached with different accounts.

b) The service account. With the user name left empty, calls go out under the account the inSCADA service runs as. In a workgroup that means creating a local account on the server machine with the same name and the same password. If the service runs as LocalSystem, a remote server in a workgroup cannot be reached this way; use (a).

Either way: group membership on the server machine

Section titled “Either way: group membership on the server machine”

The account given must exist on the OPC server machine and belong to two groups:

Terminal window
Add-LocalGroupMember -SID S-1-5-32-562 -Member <account> # Distributed COM Users
Add-LocalGroupMember -Group Users -Member <account>

Distributed COM Users grants remote activation and access. Users is needed as well because some OPC servers open their own DCOM access list only to Users and SYSTEM — and an account created with New-LocalUser does not join Users by itself.

Those two memberships are enough: the machine-wide limits under dcomcnfg, and the per-application launch and access settings, do not have to be touched.

TCP 135 is for activation only. Once started, the OPC server opens a dynamic port in its own process, and reads, writes and browse go there. What needs an inbound allow on the server machine:

  • TCP 135
  • The OPC server’s executable
  • OpcEnum.exe — where COM ProgID is resolved, and where the server list comes from
Terminal window
New-NetFirewallRule -DisplayName "OPC DA: server runtime" -Direction Inbound -Action Allow -Profile Any `
-Program "C:\Program Files (x86)\<vendor>\<server>.exe" -RemoteAddress <inSCADA IP>

If the network team would rather open a single port range, Windows’ dynamic RPC range can be narrowed on the server machine under HKLM\SOFTWARE\Microsoft\Rpc\Internet. That is a machine-wide setting affecting every DCOM server on it; a per-program rule is narrower and more predictable.

3. Subscriptions: the server’s callback to inSCADA

Section titled “3. Subscriptions: the server’s callback to inSCADA”

On frames with Use Subscription Mode on (the default), the OPC server sends values to inSCADA itself.

The inSCADA machine’s firewall must allow inbound connections to the java.exe running inSCADA.

Which DCOM permission is needed depends on the account the OPC server runs as:

The account the OPC server runs asThe callback’s identityNeeded on the inSCADA machine
A named account that also exists on the inSCADA machine with the same name and passwordThat account, NTLMv2Nothing extra — recommended
LocalSystem, workgroupANONYMOUS LOGON, NTLMv1Remote DCOM access for ANONYMOUS LOGON

Where the server runs as LocalSystem in a workgroup, the anonymous permission is granted on the inSCADA machine through dcomcnfg → My Computer → Properties → COM Security → Access Permissions → Edit Limits → ANONYMOUS LOGON → Remote Access: Allow.

HRESULTMeaningWhere to look
0x80070005 E_ACCESSDENIEDThe account has no DCOM permissionStep 1 — group membership, password
0x800401F3COM ProgID is not registeredThe ProgID’s spelling; is the server actually installed
0x800706BA RPC_S_SERVER_UNAVAILABLEThe server, or the server process’s port, cannot be reachedStep 2 — the per-program firewall rule
0xC0040007 / 0xC0040008The variable’s name does not exist on the serverThe variable’s Name
0x80040202The subscription callback could not be set upStep 3
0xC0040004 OPC_E_BADTYPEThe server could not convert the written value to the item’s typeThe variable’s Type

The OPC server machine

  • The account given on the connection exists here, in Distributed COM Users and Users
  • Firewall: inbound allow for TCP 135, the OPC server’s program, and OpcEnum.exe
  • The OPC server runs under a named account where possible

The inSCADA machine

  • inSCADA is running on Windows
  • Firewall: inbound allow for java.exe
  • If the OPC server runs as LocalSystem in a workgroup: remote DCOM access for ANONYMOUS LOGON

There is no decision that makes OPC DA unusable after a particular Windows version. Microsoft has not removed DCOM from any Windows release and has not announced that it will. But three developments narrow OPC DA’s practical life, and they belong in any plan for a new installation.

The DCOM hardening became permanent (14 March 2023). Microsoft shipped the hardening for CVE-2021-26414 in three phases: off in June 2021, on but disableable in June 2022, and on with no way to disable it from March 2023. Activation now requires at least RPC_C_AUTHN_LEVEL_PKT_INTEGRITY, and the RequireIntegrityActivationAuthenticationLevel registry value that used to switch it off no longer does anything. Only cross-machine OPC DA is affected — a client and server on one machine never use DCOM.

The Windows versions underneath are going out of support. Most OPC DA installations sit on older Windows. Support for Windows 10 ended on 14 October 2025; for Windows 10 Enterprise LTSC 2021 the date is 12 January 2027. That is not an OPC DA limit, but it governs the machines OPC DA lives on.

NTLMv1 is being withdrawn. The anonymous callback from a server running as LocalSystem uses NTLMv1, and that authentication method is being removed from Windows. The recommended arrangement above (a named account, NTLMv2) does not carry that risk.