我在使用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);
}
}
答案 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>