OPCItemRead SyncItemServerError: -1073479679

Используя коммуникационную библиотеку для Kepware OPC Server v4.0 (OPCServerCommLib.dll), я начал получать эту ошибку при попытке отключиться от OPC-сервера. Информация об этой ошибке доступна из ниоткуда, и служба поддержки Kepware не смогла помочь. Я думаю, что моя программа все еще пытается читать даже после того, как я выполняю операцию отключения, но я не понимаю, почему. Вот как я читаю данные с помощью потока:

Private Sub MonitoringThread()
  If OPCServerConnected Then
  PerformOPCReadOperation()
  End If
System.Threading.Thread.Sleep(100)
End Sub

person Scott Solmer    schedule 02.10.2013    source источник


Ответы (1)


Несмотря на то, что OPCServerConnected становится ложным при отключении, эта переменная не обновляется вовремя, чтобы протектор мог ее увидеть. Вот как я решил проблему. Если кто-то может увидеть лучший способ сделать это, не стесняйтесь опубликовать свой собственный ответ.

Добавьте эту строку непосредственно перед концом потока: ThreadStopped()

В базовый класс добавьте следующее:
Public m_AutoResetEvent As AutoResetEvent = New AutoResetEvent(False)

Protected Sub ThreadStopped()
    m_AutoResetEvent.Set()
End Sub

Наконец, в подпрограммах, где требуется отключение (Shutdown, Exit, Restart и т. д.), добавьте следующую строку перед вызовом метода отключения OPC-сервера:

m_AutoResetEvent.WaitOne() 
person Scott Solmer    schedule 02.10.2013