0
私はOPC connection
を作成しており、次のようなデータが得られます。接続がlost
の場合、操作は続行されません。私は、接続が壊れたときにOPCにreconnect
する必要があります。OPCに再接続
どうすればいいですか?または接続が壊れていることをどのように理解できますか?
public Opc.Da.Server Server { get; set; }
public Opc.Da.Subscription GroupRead { get; set; }
public Result StartListening()
{
Result result = new Result(true);
try
{
var surl = string.Format("opcda://{0}", MyOpcClientClass.ServerName);
var url = new Opc.URL(surl);
Server = new Opc.Da.Server(new OpcCom.Factory(), null);
Server.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential()));
Server.ServerShutdown += ServerShutdown;
var group = new Opc.Da.SubscriptionState();
group.Name = MyOpcClientClass.GroupName;
group.UpdateRate = MyOpcClientClass.Period;
group.Active = true;
GroupRead = (Opc.Da.Subscription)Server.CreateSubscription(group);
GroupRead.DataChanged += new Opc.Da.DataChangedEventHandler(DataChanged);
var items = this.MyOpcClientClassFieldMappingList.Select(i => new Opc.Da.Item
{
ItemName = i.OpcTagName
}).ToList();
GroupRead.AddItems(items.ToArray());
}
catch (Exception e)
{
// error log
}
return result;
}
private void DataChanged(object subscriptionHandle, object requestHandle, Opc.Da.ItemValueResult[] values)
{
try
{
// do smth...
}
catch (Exception e)
{
// error log
}
}
cmd.exeから> NetStat -aは、すべての接続とステータスを表示します。再接続する前に、現在の接続を閉じる必要があります。 – jdweng
@jdweng私は手動で再接続できます。これで結構です。しかし、私はコードでこれをやろうとしています。接続が失われたときに自動的に再接続します。 – Cer
サーバーは再接続できません。サーバーは、クローズして再オープンし、クライアントの再接続を待つ必要があります。したがって、サーバーは切断イベントをキャプチャする必要があります。これで、切断イベントなしで接続を閉じることができます。したがって、通常、クライアントが送信したデータのないメッセージであるキープアライブを実装します。一定期間キープ・アライブを取得しないと、接続を切断せずに接続を閉じたとみなして接続をクローズします。 – jdweng