Applies To:
  • CitectSCADA
  • CitectHMI

Summary:
A large proportion of OPC Clients provided by third-party vendors fail to communicate with a Citect OPC server remotely via DCOM.

Some of these clients include:

Fix

Factory Soft Test Client

RSLinx OPC Test Client

It should be noted that these clients are able to connect to a Citect OPC server running locally.

The Matrikon OPC client is a more advanced client that is able to successfully communicate with a Citect.OPC sever remotely via DCOM.

This article does not discuss Windows security issues associated with enabling DCOM communications. It is assumed that security has been correctly configured.

This article extends on information already provided on how to configure Citect OPC for DCOM.

 

Solution:
The solution is to delete the following registry value:

HKEY_CLASSES_ROOT\CLSID\{BA198B61-32E3-11d1-A1B5-00805F35623C}\InprocServer32

This issue arises due to the complication of registering a DCOM server with the same AppID (Application ID) as the CLSID (Class ID) of the COM Server. It then becomes dependent on the client to correctly instantiate the COM server either locally or remotely as intended by the user since the registry settings cannot be relied on.

The problem arises because there is an InprocServer32 entry that overrides both the LocalServer32 and LocalService entries. The value of the InprocServer32 key equals "C:\Citect\Bin\CtOpc32.dll". Even though the DCOM App is configured to run remotely, the OPC Clients that fail are attempting to run in-process as defined by this key. In this situation, the OPC client attempts to connect to a locally running Citect.

Removing the InprocServer32 key will resolve the issue and the DCOM settings will apply as expected.

Description of Registry Entries

DCOM applications are configured using DCOMCNFG.EXE. On the properties for a DCOM application there is a Location tab. This tab allows you to specify where the application should run when a client calls CoCreateInstance on the relevant CLSID. If you select the "Run Application on the Following Computer" check box and enter a computer name, then a RemoteServerName value is added under the AppID for that application.

The value of the LocalService key is equal to the name of the service. If this value exists, it is used instead of the LocalServer32 key under the CLSID. When running a server locally, the LocalServer32 key under the CLSID is used. Clearing the "Run Application on this Computer" check box renames the LocalService value to _LocalService and, thereby, disables it.

Conversely, using DCOMCNFG to specify that your application should be run on a different computer renames your LocalServer32 key to _LocalServer32.

The next major release of CitectHMI/SCADA will resolve this issue.

 

Keywords:
 

Attachments