博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
无法连接到 OPC服务器[无此类接口支持(异常来自HRESULT:0x80004002(E_NOINTERFACE))]...
阅读量:4841 次
发布时间:2019-06-11

本文共 3135 字,大约阅读时间需要 10 分钟。

来源:https://stackoverrun.com/cn/q/10400663

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


1

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

例外:

Unable to cast COM object of type 'System.__ComObject' to interface type 'OpcRcw.Comn.IOPCServerList2'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{9DD0B56C-AD9E-43EE-8305-487F3188BF7A}' failed due to the following error: No such interface supported (Exception from 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

E_NOINTERFACE是一个通用的COM错误(不那么有用,以指示真正的问题)。

检查:

  • 在客户端: “OPC核心组件可再发行组件” 和的RCW mergemodule安装?

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

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

只是看看在IOPCCServerList2的源代码,我IOPCServerList2有不同的版本比你的。 我想你尝试使用为OPC DA 1.0设计的旧合并模块/ api(这是一个非常古老而又不严格的opc标准),大多数opc服务器都期望OPC DA 2.0客户端连接。

这里是我的:

#region Assembly OpcComRcw, Version=2.0.105.1, Culture=neutral, PublicKeyToken=9a40e993cbface53 // C:\WINDOWS\assembly\GAC_MSIL\OpcComRcw\2.0.105.1__9a40e993cbface53\OpcComRcw.dll #endregion using System; using System.Runtime.InteropServices; namespace OpcRcw.Comn { [Guid("9DD0B56C-AD9E-43ee-8305-487F3188BF7A")] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 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 

是的,当连接到其他OPC服务器品牌(如横河电机或Matrikon)时,所有这些都可以正常工作,但不适用于ABB OPC服务器。 –  13 6月. 16

  0 

你有一些opc测试客户端尝试连接吗? –  13 6月. 16

  0 

是的,Matrikon和一些其他商用opc客户端可以连接和读取数据,但.Net API无法连接。 –  13 6月. 16


1

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

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

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

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

  0 

是的,这是我的问题,但对于您的答案,我们无法在OPC服务器站上安装或更新任何软件,我们有工厂限制。 –  14 6月. 16

  0 

然后,您将需要避免使用OPCEnum或修改.NET API,以便它将使用IOPCServerList而不是IOPCServerList2。您可以通过使用服务器的CLSID而不是ProgID来避免它。但我不是100%确定的.NET API。 –  14 6月. 16

  0 

感谢Jouni Aro,为了忽略副作用,'IOPCServerList2'是一个内部接口,我无法改变它使用'IOPCServerList',我们已经解决了将OPC API从.NET API转换为另一种基于Python的API的问题。 –  15 6月. 16

 

需要安装:

OPC Core Components 2.00 Redistributable 2.20.msi

 

转载于:https://www.cnblogs.com/zouhao/p/9979403.html

你可能感兴趣的文章
ASP.NET MVC Controller 编程所涉及到的常用属性成员
查看>>
条款37:绝不重新定义继承而来的缺省参数值(Never redefine a function's inherited default parameter value)...
查看>>
HDU 4288 Coder 【线段树+离线处理+离散化】
查看>>
[K/3Cloud] 如何从被调用的动态表单界面返回数据
查看>>
c# winform读取xml创建菜单
查看>>
设计模式-工厂方法 简单工厂 抽象工厂 模板方法
查看>>
HDU - 6162(Ch’s gift)
查看>>
showModalDialog()方法
查看>>
终端命令对字符串进行sha1、md5、base64、urlencode/urldecode
查看>>
Rxjava+Retrofit2+Okhttp3多文件上传(服务器端代码+客户端代码)
查看>>
Spring系列之bean的使用
查看>>
Mac下lombok无法安装到eclipse mars
查看>>
Mac下为什么有的文件名后带一个* 星号?
查看>>
Hololens入门之语音识别(语音命令)
查看>>
python_day09 多进程 多线程 协程 paramiko模块
查看>>
学习WPF之 Binding
查看>>
Windows7系统下Oracle数据库安装的oracle net configuration assistant失败问题
查看>>
umeditor 踩坑
查看>>
luogu P1854 花店橱窗布置
查看>>
6-6 小球下落 uva679
查看>>