1

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

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

4

1 回答 1

0

我不是很肯定,但我不认为你所要求的总是可能的(没有调试器)。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

于 2016-09-02T21:23:24.337 回答