0
나는 OPC connection
을 만들고 있는데 다음과 같은 데이터를 얻습니다. 연결이 lost
이면 작업이 계속되지 않습니다. 연결이 끊어진 경우 OPC에 reconnect
이 필요합니다.OPC에 다시 연결
어떻게하면됩니까? 또는 연결이 끊어짐을 어떻게 알 수 있습니까? 당신은 항상 (하트 비트 같은) 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
}
}
From cmd.exe> NetStat -a는 모든 연결과 상태를 제공합니다. 다시 연결하려면 현재 연결을 닫아야합니다. – jdweng
@jdweng 수동으로 다시 연결할 수 있습니다. 괜찮아. 하지만 코드로이 작업을 수행하려고합니다. 연결이 끊어지면 자동으로 다시 연결하십시오. – Cer
서버를 다시 연결할 수 없습니다. 서버가 닫히고 다시 열리고 클라이언트가 다시 연결될 때까지 기다려야합니다. 따라서 서버는 연결 해제 이벤트를 캡처해야합니다. 이제 연결 끊기 이벤트없이 연결을 종료 할 수 있습니다. 그래서 보통 클라이언트가 보낸 데이터가없는 메시지 인 keep-alive를 구현합니다. 일정 시간 동안 연결 유지가되지 않으면 연결을 끊지 않고 연결이 닫힌 것으로 가정하여 연결을 닫습니다. – jdweng