PDA

Просмотр полной версии : Квитирование сообщений в журнале



Dima1991
23.05.2016, 11:41
Здравствуйте, у вас на форуме выложен срипт квитирования сообщений в журнале. Но данный скрипт не работает. На мнемосхему поместил кнопку квитировать и связал ее с входной переменной "Квитировать". И еще мне не совсем понятно что означает переменная "пред" булевого типа? Можно ли сделать так, чтобы квитировались сразу все сообщения без указания их числа(в данном случае я так понимаю их 200)? Спасибо.
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using MasterSCADA.Hlp.Events;
using FB;
using System.Linq;

public partial class ФБ : ScriptBase
{
bool? пред;

public override void Execute()

{
if (Квитировать == true && пред != true)

{

var alarms = HostFB.TreeItemHlp.Project.AlarmManager;
var filter = new EventFilterData();
filter.OnlyNotAcked = true;
var events = alarms.GetEvents(HostFB.TreeItemHlp.Parent,filter,
200);// последняя цифра показывает какое количество сообщений будет квитированно за один раз.

foreach (var ev in events)

{
alarms.AckEvents(new [] {ev.EventID}, "");

}
}
пред = Квитировать;
}
}

SCADAMaster
23.05.2016, 13:59
У нас все работает. При каких обстоятельствах у вас не выполняется квитирование?
Также нужно иметь ввиду, что данный скрипт квитирует сообщения из кэша. Если нужно квитировать сообщения из архива (например прошлые сообщения переменной), то тогда используются другие методы - для работы с архивом сообщений.

Dima1991
23.05.2016, 14:05
А переменные которые добавляются в журнал они из архива или из кэша?

SCADAMaster
23.05.2016, 14:26
По умолчанию - из обоих. В настройках (Продвинутый уровень - общие - Производительность сообщений - Источник архива сообщений) можно задать конкретных источник.

Dima1991
23.05.2016, 14:39
А как выглядит скрипт для квитирования сообщений из архива?

SCADAMaster
23.05.2016, 15:07
Что-то вроде этого (квитирование всех сообщений конкретного события)
var project = HostFB.TreeItemHlp.Project;
var filter = new EventFilterData();
var eventItem=HostFB.TreeItemHlp.Parent.GetChild(Имя_С ообщения);
var _eventID=eventItem.ID;
filter.OnlyNotAcked=true;
var server=project.GetService<EventServer>();
var enumerator = server.CreateEnumerator(HostFB.TreeItemHlp.Parent, filter, true);
//получение последних 50 сообщений
var archEvents = enumerator.Next(50);
foreach (var id in archEvents)
{
if (id.EventID.SourceID != _eventID) continue;
MasterSCADA.Interfaces.EventID[] oo =new[] {id.EventID};

HostFB.TreeItemHlp.Project.AlarmManager.AckEvents( oo,"Comment)");
}