加载表单后,计时器将在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()));
如果连接断开,如何避免程序挂起并开始重新连接?
答案 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。