无法连接到ABB Freelance OPC服务器[不支持此类接口(HRESULT异常:0x80004002(E_NOINTERFACE))]

时间:2016-06-09 16:24:14

标签: .net windows com dcom opc

我在使用OPC NET API 2.00的OPC客户端应用程序中遇到问题,因此当我想连接到ABB Freelance OPC Server时,它会在调用Opc.Server.Connect(Opc.ConnectData)方法时抛出异常。

例外:

  

无法转换类型为' System .__ ComObject'的COM对象。至   界面类型' OpcRcw.Comn.IOPCServerList2'。此操作失败   因为QueryInterface调用COM组件的接口   与IID' {9DD0B56C-AD9E-43EE-8305-487F3188BF7A}'由于失败而失败   以下错误:不支持此类接口(来自HRESULT的异常:   0x80004002(E_NOINTERFACE))。

问题可能与IOPCServerList2界面有关:

#region Assembly OpcRcw.Comn.dll, v1.10.2.0
// C:\Windows\assembly\GAC_MSIL\OpcRcw.Comn\1.10.2.0__9a40e993cbface53\OpcRcw.Comn.dll
#endregion

using System;
using System.Runtime.InteropServices;

namespace OpcRcw.Comn
{
    [Guid("9DD0B56C-AD9E-43EE-8305-487F3188BF7A")]
    [InterfaceType(1)]
    public interface IOPCServerList2
    {
        void CLSIDFromProgID(string szProgId, out Guid clsid);
        void EnumClassesOfCategories(int cImplemented, Guid[] rgcatidImpl, int cRequired, Guid[] rgcatidReq, out IOPCEnumGUID ppenumClsid);
        void GetClassDetails(ref Guid clsid, out string ppszProgID, out string ppszUserType, out string ppszVerIndProgID);
    }
}

2 个答案:

答案 0 :(得分:1)

IOPCCServerList2是OPCEnum服务的一部分,不是服务器本身的一部分。

如果从远程连接,则应用程序正在访问与服务器在同一台计算机上运行的OPCEnum服务。

IOPCCServerList2是IOPCCServerList的新版本,最可能的是与ABB Freelance一起安装的OPCEnum服务版本太旧了。

您可以通过安装OPC Foundation website中提供的最新OPC核心组件来更新OPCEnum服务。

答案 1 :(得分:0)

E_NOINTERFACE这里是一个通用的COM错误(对于指出真正的问题没那么有用)。

检查:

  • 在客户端:“OPC Core组件可再发行”和RCWs mergemodule安装?

  • 在客户端:防火墙设置?

  • 在服务器上:abb opc服务器的dcom设置是否正确?

只需查看IOPCCServerList2的源代码,我的IOPCServerList2版本与您的版本不同。 我猜你试图使用为OPC DA 1.0设计的旧合并模块/ api(这是一个非常古老和过时的opc标准),大多数opc服务器都期望OPC DA 2.0客户端连接。

这是我的:

git fetch upsteam
git checkout <branchname>
git merge <branchname> <upstream/branchname>
git push <branchname>