如果失去连接,OPC客户端会挂起

时间:2019-01-24 12:03:45

标签: c# winforms opc

加载表单后,计时器将在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服务器断开连接或由于某种原因突然重新启动,则该程序将冻结,并且只能通过Manager终止。该行中发生错误:

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

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

1 个答案:

答案 0 :(得分:0)

在声明程序完全冻结之前,请给它一点时间。等待6分钟,那么长的DCOM超时。在那之后,您很可能会得到例外。 (http://www.opclabs.com/resources/technology-opc/opc-q-a/1075-what-is-the-6-minute-dcom-timeout

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