【问题标题】:Close OPC DA Connections关闭 OPC DA 连接
【发布时间】:2016-08-22 14:28:43
【问题描述】:

我正在使用 OPC Foundation 的 OpcNetApi.dll 与 OPC DA 服务器进行通信。

我很好奇是否有一种编程方式可以使用此库或类似库终止服务器上当前处于活动状态的特定连接。

【问题讨论】:

  • 这些连接是否订阅了 OPC 服务器?如果是这种情况,您可能会尝试以编程方式删除这些。
  • 我开始认为它们是订阅。我的同事说他能够终止所有连接,但是当我重新启动服务时它们立即重新出现。我想我做错了什么。但是,我的问题的答案仍然很有趣。
  • 您能否分享您用于从 OPC DA 服务器检索数据的代码?这可以帮助我们了解出了什么问题。
  • @jdecuyper 感谢您的评论,但我不再关心特定问题我只关心如何以编程方式识别和终止与 OPC 服务器的连接。我将修改我的问题,使其更笼统。
  • @JaredBeach 我正在断开连接,但客户端在 opc 服务器端仍然处于活动状态。你解决了这个问题吗?

标签: opc opc-da


【解决方案1】:

我不肯定,但我不认为你所要求的总是可能的(没有调试器)。 OPC 基于 Microsoft COM。 COM 有两种实现方式:进程内和进程外。选择取决于 OPC 服务器供应商。

通过进程内实现,如果您在与 OPC 服务器相同的机器上运行 OPC 客户端,那么 OPC 服务器只是一个 dll,它直接加载到 OPC 客户端的内存空间中。此 dll 公开了 OPC 接口,如 CreateGroup、ReadAllItems 等。现在它可能通过其他一些机制(命名管道、TCP/IP 等)获取实际数据,但这再次取决于 OPC 服务器实现。真正强制停止此 OPC 服务器的唯一方法是结束 OPC 客户端或获取 OPC 客户端程序。当然 OPC 客户端或 OPC 服务器可能已经实现了结束机制,但不能保证。

如果它是进程外 OPC 实现,那么 OPC 服务器将在单独的可执行文件中运行,因此您可以找到该可执行文件的名称并终止它。 (您可以在 regedit 中搜索 OPC 服务器的名称以找到对应的可执行文件名称)。如果我没记错的话,可以设计 OPC 服务器,使所有客户端共享一个可执行文件,或者每个 OPC 客户端获取自己的可执行文件实例。

如果您正在远程运行 OPC 服务器,那么如果它是一个进程内实现,那么它可能会被加载到存根程序中,然后绑定到 RPC。如果您阻止 RPC 通信的端口,我认为大多数客户端会在一段时间后决定断开连接,尽管没有保证他们以后不会尝试重新连接。

以下是更多信息: https://www.opcsupport.com/link/portal/4164/4590/Article/711/May-I-get-a-In-Proc-and-Out-Of-Proc-explanation

【讨论】:

  • 感谢您的回答。假设我们正在讨论进程内。另外,除了停止线程之外,如何从接口获得一个数字或活动连接列表?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-07
  • 2016-09-29
  • 1970-01-01
  • 2020-07-26
  • 1970-01-01
  • 1970-01-01
  • 2021-08-04
相关资源
最近更新 更多