var project = HostFB.TreeItemHlp.Project;
var filter = new EventFilterData();
//получение последнего сообщения в архиве
var eventItem=HostFB.TreeItemHlp.Parent.GetChild(name) ;
var eventItem1=HostFB.TreeItemHlp.Parent.GetChild(name 1);
var eventItem2=HostFB.TreeItemHlp.Parent.GetChild(name 2);
filter.Sources=new List<ITreeObjectHlp> {eventItem};
//filter.Sources=new List<ITreeObjectHlp> {eventItem1};
//filter.Sources=new List<ITreeObjectHlp> {eventItem2};
filter.ChildObjects=false;
var server=project.GetService<EventServer>();
var enumerator = server.CreateEnumerator(HostFB.TreeItemHlp.Parent, filter, true);
var archEvents = enumerator.Next(1);
var LastActiv=false;
DateTime? LastTime=null;
if (archEvents.Count>0)
{
//определяем активность последнего сообщения
LastActiv=archEvents[0].IsActive;
//и метку времени начала
LastTime=archEvents[0].ActiveTime; //запоминает метку последнего сообщения даже при сбросе архива
}
var alarmId = ((IFBEvents)eventItem.FBObject).AlarmID;
var alarmId1 = ((IFBEvents)eventItem1.FBObject).AlarmID;
var alarmId2 = ((IFBEvents)eventItem2.FBObject).AlarmID;
//записываем сообщения в архив
//System.Diagnostics.Debug.Assert(false);
for (int i=0;i<journal.Count;i++)
{
//если метка времени равна null - выходим из цикла
if (journal[i].T1.HasValue==false) break;
//если метка времени сообщения прибора меньше последнего сообщения архива - пропускаем
if (LastTime.HasValue==true && journal[i].T1.Value<LastTime.Value.ToLocalTime().AddSeconds(-1))
continue;
//если метка времени равна последнему сообщению и сообщение неактивно пропускаем
if (LastTime.HasValue==true && journal[i].T1.Value==LastTime.Value.ToLocalTime() &&
//если сообщение активно, но не будет завершено - также пропускаем
(LastActiv==false || (LastActiv==true && journal[i].T2.HasValue==false))) continue;
//получаем значение времени начала
var TimeStart=journal[i].T1.Value.ToUniversalTime();
DateTime? TimeEnd=null;
//если значение есть - получаем значение времени конца
if (journal[i].T2.HasValue==true) TimeEnd=journal[i].T2.Value.ToUniversalTime();
//если это первая запись после старта и архивирование в базу данных - не создаем стартовое сообщение
if ((ActivStart==true && ToSUBD==true)==false &&
//если последнее сообщение - то не создаем стартовое сообщение
(ActivStart==false && LastActiv==true)==false)
{
if (((journal[i].I1.Value >> 0) & 1) == 1)
{
//создаем сообщение
project.AlarmManager.OnFBEventTimed(alarmId1, text1, -1, (short)EventStatus.EventOn, (uint)OpcQuality.Good,TimeStart);
project.AlarmManager.OnFBEventTimed(alarmId1, text1, -1, (short)EventStatus.EventOff, (uint)OpcQuality.Good,TimeEnd);
}
if (((journal[i].I1.Value >> 1) & 1) == 1)
{
project.AlarmManager.OnFBEventTimed(alarmId2, text2, -1, (short)EventStatus.EventOn, (uint)OpcQuality.Good,TimeStart);
project.AlarmManager.OnFBEventTimed(alarmId2, text2, -1, (short)EventStatus.EventOff, (uint)OpcQuality.Good,TimeEnd);
}
ActivStart=false;
LastActiv=false;
}
}