【问题标题】:Connect remote OPC server using QuickOPC使用 QuickOPC 连接远程 OPC 服务器
【发布时间】:2017-12-22 21:56:00
【问题描述】:

我目前正在使用来自 OPC Labs 的 QuickOPC 库。我目前的目的是编写一个 .NET 控制台应用程序来从 Matrikon Simulation OPC 服务器读取项目值。

模拟服务器正在远程机器上运行,IP地址可用,我需要输入用户名和密码才能登录到这台远程机器。

我目前的代码如下:

NetworkSecurity networkSecurity = new NetworkSecurity(UserName, Password, MachineName);
ServerDescriptor serverDescriptor = new ServerDescriptor("\\\\xxx.xxx.xxx.xxx\\Matrikon.OPC.Simulation.1", networkSecurity);
serverDescriptor.Scheme = "opcda";
DAItemDescriptor itemDescriptor = new DAItemDescriptor(ItemID);

Console.WriteLine(client.ReadItemValue(serverDescriptor, itemDescriptor));

例外情况如下:

异常:OPC 操作失败,错误代码为 -1073442759 (0xC0049039) occ urred,源自 'OpcLabs.EasyOpcRaw.DataAccess.RawEasyDAClient'。内在的例外 包含有关问题的详细信息。内部异常:没有方法 可用于将 ProgID 转换为 CLSID。

如果我尝试使用 CLSID

ServerDescriptor("\\\\xxx.xxx.xxx.xxx\\{F8582CF2-88FB-11D0-B850-00C0F0104305}", networkSecurity);

异常变成:

异常:OPC 操作失败,错误代码为 -2147024891 (0x80070005) occ urred,源自 'OpcLabs.EasyOpcRaw.DataAccess.RawEasyDAClient'。内在的例外 包含有关问题的详细信息。内部异常:访问被拒绝。

【问题讨论】:

  • 我代表 OPC Labs,一家 QuickOPC 制造商。正如其他用户在此处的答案和 cmets 中指出的那样,这是一个 DCOM 安全问题。为了解释最初的错误信息,如果 OPCEnum 方法不起作用,QuickOPC 还会尝试使用所谓的 Remote Registry 解析 ProgID。如果没有方法成功,您会收到此错误消息。如果您的管理员不愿意启用 DCOM,他很可能也不愿意启用远程注册表 - 而且,无论如何,您仍将 DCOM 用于实际的 OPC 通信。
  • @ZbynekZ 感谢您的回复。您的回答绝对有道理,尽管我们决定将我的 OPC 客户端安装在服务器的同一台机器上。因此,它现在可以在不启用 DCOM 的情况下正常工作。

标签: .net opc


【解决方案1】:

“内部异常:访问被拒绝”,意味着您必须启用服务器和客户端之间的 DCOM 通信。用于服务器应用程序和 OPCEnum 服务(用于将 ProgID 转换为 CLSID)。

https://www.google.com/search?q=dcom+configuration+for+opc

【讨论】:

  • 感谢您的回答。我联系了服务器的管理员。他确认 DCOM 可能是原因,但由于安全策略问题,他无法启用它。还是谢谢大家。
  • 如果无法打开 DCOM(这是可以理解的),可以考虑使用隧道 OPC,例如通过OPC UA Gateway 或类似产品。这样你就可以在服务器和客户端之间只打开一个专用的IP端口,这比打开整个DCOM要安全得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
  • 2011-08-24
  • 2015-06-20
相关资源
最近更新 更多