【问题标题】:OPC Client hangs in case of loss of connection连接丢失时 OPC 客户端挂起
【发布时间】:2019-01-24 12:03:44
【问题描述】:

加载表单后,GetItemsnaliv() 方法中会启动一个计时器,该方法连接到远程 OPC 服务器并检索所需的数据。 代码:

bool GetItemsNaliv()
{
  IsWork2 = true;
  try {
    if (_opcServer2 != null && !_opcServer2.IsConnected) {
      _opcServer2.Connect(url2, new Opc.ConnectData(new System.Net.NetworkCredential()));
    }
  }
  catch (Exception ex)
  {
    //MessageBox.Show(ex.Message);
    IsWork2 = false;
    return false;
  }

如果 OPC-server 断开连接或由于某种原因突然重新启动,程序就会冻结,只能通过 Manager 杀死。错误出现在这一行:

_opcServer2.Connect(url2, new Opc.ConnectData(new System.Net.NetworkCredential()));

如果连接丢失并开始重新连接,如何避免程序挂起?

【问题讨论】:

    标签: c# winforms opc


    【解决方案1】:

    在声称程序完全冻结之前,请稍等片刻。等待 6 分钟,有一个 DCOM 超时,就是这么长。在那之后你很可能会得到一个例外。 (http://www.opclabs.com/resources/technology-opc/opc-q-a/1075-what-is-the-6-minute-dcom-timeout)

    为了更好的响应,唯一的解决方案是在单独的线程上运行活动,并围绕它实现你自己的、更短的超时逻辑。或者,使用已内置此逻辑的 OPC 库/工具包.component。

    【讨论】:

    • 感谢您的回答。等待 10 分钟后程序仍然冻结。我得到的异常:OpcNetApi.dll 中的 System.Runtime.InteropServices.ExternalException"
    • 你能说清楚点吗?您是否遇到异常,或者程序是否冻结?我认为你不能同时拥有两者。和。如果有异常,消息文本是什么?
    猜你喜欢
    • 1970-01-01
    • 2015-08-17
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 2014-03-17
    • 2019-02-20
    相关资源
    最近更新 更多