OPC Client зависает в случае потери соединения - PullRequest
0 голосов
/ 24 января 2019

Когда форма загружена, в методе 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-сервер отключен или неожиданно по какой-либо причине перезагружается, программа просто зависает и может быть убита только через Менеджер.Ошибка возникает в этой строке:

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

Как избежать зависания программы, если соединение потеряно, и начать переподключение?

1 Ответ

0 голосов
/ 24 января 2019

Прежде чем утверждать, что программа полностью зависла, дайте ей время. Подождите 6 минут, время ожидания DCOM очень велико. Скорее всего, вы получите исключение после этого времени. (http://www.opclabs.com/resources/technology-opc/opc-q-a/1075-what-is-the-6-minute-dcom-timeout)

Единственное решение этой проблемы для лучшей отзывчивости состоит в том, чтобы затем выполнить действие в отдельном потоке и реализовать собственную, намного более короткую, логику тайм-аута вокруг этого. Или используйте библиотеку OPC / toolkit.component, в которую уже встроена эта логика.

...