PDA

Просмотр полной версии : Журнал в MasterSCADA



Назаров Александр
22.06.2010, 14:46
каким образом из журнала событий объекта извлечь наличие и количество неквитированных сообщения для дальнейшего их использования? если несложно пожалуйста с примером. спасибо.

Sniper007
22.06.2010, 15:30
ну наличие можно проверить при помощи фб "состояние окна сообщений", а вот количество... штатных средств не нашел. в техподдержку писали?

Назаров Александр
22.06.2010, 19:51
посмотрел фб "состояние окна сообщений". туда валится все по всей системе. а хотелось бы иметь некий фб или скрипт, привязанный к конкретному объекту, по переменным которого можно было бы судить о наличии неквитированных сообщений. причем неквитированных не только системой, т.е. нет конца события, но и квитированных системой (процессом), но неквитированных (просмотренных) оператором.
тут на мой взгляд существует задвоение терминов. например, в фб "состояние окна сообщений" неквитированными считаются сообщения не имеющими "конца". а оператор там вообще не причем.

Sniper007
22.06.2010, 21:06
свяжитесь с техподдержкой. после ухода мамотовой оперативность ответов у них конечно снизилась, но отвечают.
поговорят с программистами, либо добавят в следующей версии, либо скажут по каким процедурам обращаться, чтобы свой блок написать.

Назаров Александр
24.06.2010, 20:03
в техподдержку пишу, периодически. но там отвечают вяло. нет той оперативности,оторая наблюдается здесь. уже сам до чего то допрешь, а потом получишь ответ из инсата. грустно как то. вот и сейчас уже кое что нашел в примерах для скриптов, а ответа от производителя 0.

Sniper007
24.06.2010, 21:07
ну тут может еще сезон отпусков сказывается...
я вообще в инсат пишу если баги обнаруживаю или предложения если есть. с проблемами сам справляюсь. а так, можете задавать вопросы здесь, думаю на 90% получите ответы. :)
а задавали им вопрос насчет неквитированных сообщений?

Назаров Александр
25.06.2010, 09:17
Задавал. Но ответа пока не получил. Кое что нашел в примерах:
var alarms = HostFB.TreeItemHlp.Project.AlarmManager;
var filter = new EventFilterData();
filter.OnlyNotAcked (или OnlyActual)= true;
var events = alarms.GetEvents(HostFB.TreeItemHlp.Parent, filter, 100);
events.Count - количество тех самых сообщений, определенные фильтром. 100 - размер массива событий.
Было бы хоть мало мальское описание объектов и их методов, вопросов было бы гораздо меньше.

Sniper007
26.06.2010, 18:07
Я хотел еще в пятницу сделать, но времени не было, только сейчас освободился.
Ну вот. Ваш пример вообщем рабочий. Нужно только чуть-чуть кое что подправить.
Делаем так. Вставляем модуль "скрипт". Создаем переменную "запись" типа "целое" или вещественное это и будет наш выход. Ну и собственно код:
public partial class ФБ : ScriptBase
{
public override void Execute()
{
var alarms = HostFB.TreeItemHlp.Project.AlarmManager;
var filter = new MasterSCADA.Hlp.Events.EventFilterData();
filter.OnlyNotAcked = true;
var events = alarms.GetEvents(HostFB.TreeItemHlp.Parent, filter, 100);
Количество=events.Count(); // это непосредственно выход ФБ
}
}
Проверил - нормально вроде работает. Опрос обязательно периодический!

Назаров Александр
29.06.2010, 09:59
все вроде бы работает нормально. для определения наличия сообщений достаточно вместо 100 поставить 1. а вот как определить наличие конкретного сообщения от переменной "событие". за активность, понятно, отвечает сама переменная. а наличие не квитирования?

Sniper007
29.06.2010, 13:14
Александр. Ну во первых, надо однозначно написать в техподдержку, чтобы они реализовали такую функцию.
Сейчас можно поступить так.
Мы сформировали коллекцию event
var events = alarms.GetEvents(HostFB.TreeItemHlp.Parent, filter, 100);
теперь можно обращаться, к ее элементам используя индекс.
Например:
Параметр1=events[z].ConditionName; //тип - строка
вернет нам имя элемента, имеющего неквитированную аварию, где z - индекс (номер в коллекции, нумерация с нуля). Только обращаться нужно когда в коллекции есть хотя бы одно сообщение. Проще говоря контролировать:
if events.Count()>0 и после уже обращаться к коллекции
Ну а дальше - дело техники. Можно через цикл перебрать всю коллекцию, и найти есть ли имя функционального блока в списке.

Назаров Александр
29.06.2010, 13:17
Выяснился такой побочный эффект. Количество неквитированных сообщений в events.Count отображает только количество разных событий, т.е. если события/сообщения возникают у одной и той же переменной, то events.Count будет равна 1. Причем эта единица указывает на последнее событие. Все события произошедшие ранее Count-ом (и коллкцией events) не учитываются и не отслеживаются.

Sniper007
29.06.2010, 13:37
Я что-то вообще запутался. Вам что нужно знать?
Я думал вам нужно висит ли еще какое то сообщение от события или нет.
Ну если вам нужно знать, какое именно сообщение выдало событие. То сделайте так:
Параметр1=events[z].Message;
Получите какое сообщение лежит в нем.
Вы в скрипте введите events[0] нажимите точку, появится окошко со всеми свойствами и методами, ну и пошерстите его.

nklim
24.04.2019, 16:03
Скажите, я могу в Masterscada посмотреть на сервере сетевого проекта когда подключался любой из клиентов?
Если да,то как?
Спасибо!

SCADAMaster
24.04.2019, 18:27
В версии 3.10 можно в журнале действий выбрать компьютер (см. приложение)

nklim
25.04.2019, 12:11
На эту вкладку я выходил. Информации по компьютерам там нет. Сегодня при первом просмотре была информация только по текущему компьютеру.После нескольких попыток изменений фильтров по компам исчезла и она.
Понаблюдаю дальше.

SCADAMaster
25.04.2019, 12:43
Есть - мы проверяли.
Версия то какая?

nklim
25.04.2019, 15:33
Версия Masterscada 3.10

SCADAMaster
25.04.2019, 15:51
Тогда должно работать. Приложите несколько скриншотов с проблемой и сам проект (Проект - Экспортировать)