PDA

Просмотр полной версии : "Озвучка" аварийных сообщений.



Hemann
08.04.2023, 18:55
Коллеги, приветствую!

Как можно сделать так, чтобы при возникновении аварии с приоритетом выше некоторого значения сработал звуковой сигнал (я думаю, через колонки компьютера) и отключился только после квитирования этой аварии оператором? Такое должно происходить только на АРМе главного диспетчера
Если можно обойтись без скрипта - прошу подсказать как. Если же нужен скрипт - прошу привести пример

VladGC
09.04.2023, 10:01
Коллеги, приветствую!

Как можно сделать так, чтобы при возникновении аварии с приоритетом выше некоторого значения сработал звуковой сигнал (я думаю, через колонки компьютера) и отключился только после квитирования этой аварии оператором? Такое должно происходить только на АРМе главного диспетчера
Если можно обойтись без скрипта - прошу подсказать как. Если же нужен скрипт - прошу привести пример

Без скрипта никак наверное
1)
Сначала, вам надо отфильтровать сообщения/аварию и отследить ее появление, я это делал счетчиком
fb:
GetActualEvents или EventsCounter или GetNewEvents


(*Получаем статус предупредительной сигнализации*)
filterSeverityWarning:='["Active=TRUE", "Severity = 500"]';

EventsCounter_1(Filter:=filterSeverityWarning, IsGlobal:= true, Ack:= , UserName:= , Comment:= );



2)
Далее формируете звуковой сигнал
fb:
PlaySound


Для начала попробуйте манипуляции с этими fb по отдельности, особенно PlaySound

Hemann
09.04.2023, 14:03
Без скрипта никак наверное
Спасибо! Я тоже подумал что без скрипта никак. Есть, правда, 2 момента. Во-первых, я не силен в C# (2 раза начинал изучать по Шилдту, но доходил до 13 главы и пропадало время на дальнейшее изучение :) ), хотя С и С++ знаю неплохо. А во-вторых, не знаю ни объекты MS4D, ни их свойства, события, методы...
И еще. Этот скрипт должен выполняться в какой задаче, чтобы только на АРМе диспетчера это все работало (на других АРМах не нужно)? Архив проекта здесь: https://cloud.mail.ru/public/JAAq/KtGF1aUHq

VladGC
10.04.2023, 08:46
Спасибо! Я тоже подумал что без скрипта никак. Есть, правда, 2 момента. Во-первых, я не силен в C# (2 раза начинал изучать по Шилдту, но доходил до 13 главы и пропадало время на дальнейшее изучение :) ), хотя С и С++ знаю неплохо. А во-вторых, не знаю ни объекты MS4D, ни их свойства, события, методы...
И еще. Этот скрипт должен выполняться в какой задаче, чтобы только на АРМе диспетчера это все работало (на других АРМах не нужно)? Архив проекта здесь: https://cloud.mail.ru/public/JAAq/KtGF1aUHq

Все можно сделать на ST, более того, в случае alarm sound в вашем сценарии, только ST и пойдет, так как c# в задаче экрана не работает


Как вам писали в другой теме, надо изменить архитектуру
Что бы было понятнее немного набросал схему

Переименуйте АРМ в сервер,
АРМ это в вашем случае это клиент(браузер)
Добавьте пользователей и роли в разделе безопасность,
Для каждого пользователя в отдельности можно настроить его стартовое окно



Рекомендую пройти экспресс курс
https://stepik.org/course/121740/promo

Hemann
10.04.2023, 18:59
Как вам писали в другой теме, надо изменить архитектуру
Что бы было понятнее немного набросал схему

Большое спасибо!

Сегодня, еще не успев прочитать Ваше сообщение, тоже дошел до того что нужно изменить структуру системы. Это я и сделал. Поскольку "озвучка" не самый приоритетный (но необходимый) элемент системы, то занимался другими вещами. Хотел бы узнать, Вы считаете создание пользователей обязательным? В постановке задаче такого требования нет - есть сервер, который собирает данные, и есть 4 рабочих места (диспетчер и 3 инженера по направлениям). И еще. Уперся не то в какой-то свой косяк, не то просто не возможно корректно проверить работоспособность всей системы на одном ПК: у инженеров на их АРМах должны появляться аварийные сообщения (кроме того что и конкретные показания приборов они могут видеть), а у диспетчера на АРМе - только всякие сообщения. У диспетчера на АРМе, на главном окне, расположен Архивный журнал 1 с признаком "Глобальный" , но кроме сообщений о входе в систему ничего не отображает. Правда, если нажать на АРМе инженера "На главный экран", то в этом Архивном журнале начинают отображаться сообщения того АРМа, с которого был совершен переход. Я уже архивы всех объектов назначил на архивы, хранящиеся на сервере (думаю, при нашей структуре системы это правильно), но сообщения со всех направлений все равно не отображаются.
Вот ссылка на текущую версию проекта: https://cloud.mail.ru/public/3KsJ/cAi3AabjE
Ну и скриншоты, на всякий случай (1-ый - Главный экран диспетчера после перехода на него с экрана электроснабжения, 2-ой - Главный экран диспетчера после перехода на него с экрана водоснабжения, 3-ий - Главный экран диспетчера сразу после запуска системы). На 1-ом скриншоте заметно наличие ошибки "Unknown error", она и на 2-ом скриншоте есть, просто не влезла

VladGC
11.04.2023, 08:33
Большое спасибо!

Сегодня, еще не успев прочитать Ваше сообщение, тоже дошел до того что нужно изменить структуру системы. Это я и сделал. Поскольку "озвучка" не самый приоритетный (но необходимый) элемент системы, то занимался другими вещами. Хотел бы узнать, Вы считаете создание пользователей обязательным? В постановке задаче такого требования нет - есть сервер, который собирает данные, и есть 4 рабочих места (диспетчер и 3 инженера по направлениям). И еще. Уперся не то в какой-то свой косяк, не то просто не возможно корректно проверить работоспособность всей системы на одном ПК: у инженеров на их АРМах должны появляться аварийные сообщения (кроме того что и конкретные показания приборов они могут видеть), а у диспетчера на АРМе - только всякие сообщения. У диспетчера на АРМе, на главном окне, расположен Архивный журнал 1 с признаком "Глобальный" , но кроме сообщений о входе в систему ничего не отображает. Правда, если нажать на АРМе инженера "На главный экран", то в этом Архивном журнале начинают отображаться сообщения того АРМа, с которого был совершен переход. Я уже архивы всех объектов назначил на архивы, хранящиеся на сервере (думаю, при нашей структуре системы это правильно), но сообщения со всех направлений все равно не отображаются.
Вот ссылка на текущую версию проекта: https://cloud.mail.ru/public/3KsJ/cAi3AabjE
Ну и скриншоты, на всякий случай (1-ый - Главный экран диспетчера после перехода на него с экрана электроснабжения, 2-ой - Главный экран диспетчера после перехода на него с экрана водоснабжения, 3-ий - Главный экран диспетчера сразу после запуска системы). На 1-ом скриншоте заметно наличие ошибки "Unknown error", она и на 2-ом скриншоте есть, просто не влезла

В вашем текущем проекте - 5 серверов
Оставьте один сервер
Добавьте
Роли диспетчера и инженера
Добавьте пользователей
Пользователям назначьте стартовые экраны
У диспетчера будет доступ к главному экрану, у инженера только его




Вам надо пофиксить преобразования, 3к предуреждений все таки много( по крайней мере в версии 1.3 столько вылезает), даже если на 1.2 все окей, лучше исправить, что бы в будущих обновлениях исправить, тем более актуальная версия 1.3
С помощью таблицы это делается за 10 минут

VladGC
11.04.2023, 08:43
В вашем текущем проекте - 5 серверов
Оставьте один сервер
Добавьте
Роли диспетчера и инженера
Добавьте пользователей
Пользователям назначьте стартовые экраны
У диспетчера будет доступ к главному экрану, у инженера только его




Вам надо пофиксить преобразования, 3к предуреждений все таки много( по крайней мере в версии 1.3 столько вылезает), даже если на 1.2 все окей, лучше исправить, что бы в будущих обновлениях исправить, тем более актуальная версия 1.3
С помощью таблицы это делается за 10 минут

В дополнение
Исправляется поэтапно, легко( думаю в совокупности за час другой можно исправить))

Hemann
11.04.2023, 10:58
В вашем текущем проекте - 5 серверов
Оставьте один сервер
Добавьте
Роли диспетчера и инженера
Добавьте пользователей
Пользователям назначьте стартовые экраны
У диспетчера будет доступ к главному экрану, у инженера только его

Огромное спасибо!

Тут еще вводная прилетела. Нужно чтобы инженеры могли смотреть свои экраны с телефонов. Как в указанной Вами структуре это можно реализовать? Или они будут просто обращаться к серверу по IP-шнику, а затем на основе идентификации пользователя попадать на нужный экран?

b_aleks2
11.04.2023, 11:36
Нужно чтобы инженеры могли смотреть свои экраны с телефонов. Как в указанной Вами структуре это можно реализовать? Или они будут просто обращаться к серверу по IP-шнику, а затем на основе идентификации пользователя попадать на нужный экран?

Если нет вайфая на предприятии, то нужен белый IP, который на роутере будете пробрасывать на сервак со скадой. Если есть вайфай, то айпишники должны раздаваться из той же подсети, где сервак находится, гостевую сеть не надо использовать.

Hemann
11.04.2023, 12:29
Если нет вайфая на предприятии, то нужен белый IP, который на роутере будете пробрасывать на сервак со скадой. Если есть вайфай, то айпишники должны раздаваться из той же подсети, где сервак находится, гостевую сеть не надо использовать.

Спасибо большое! Я примерно так и думал. Судя по всему, нужно будет порты пробрасывать, т.к. инженеры и из вне офиса будут смотреть что и как. Но это пусть сисадмины мудрят.

VladGC
11.04.2023, 13:01
Огромное спасибо!

Тут еще вводная прилетела. Нужно чтобы инженеры могли смотреть свои экраны с телефонов. Как в указанной Вами структуре это можно реализовать? Или они будут просто обращаться к серверу по IP-шнику, а затем на основе идентификации пользователя попадать на нужный экран?

Тут по сути две задачи
Реализовать можно на той структуре где один сервак, идентификация как обычно по пользователям
Можно добавить еще роль что то вроде "Мобильный пользователь" к нему прикрепить "Мобильный тепло" и для юзеров с телефонами накидать экран с книжной ориентацией с какой нибудь сводкой. При подключении, пользователь будет выбирать что смотреть, основную или мобильную версию.
Попробуйте со своего телефона подключиться к визуализации и поймете на сколько удобно не удобно смотреть

Организация доступа к ip сервака сугубо админская, и зависит от степени паранойи службы безопасности

Hemann
11.04.2023, 19:13
Можно добавить еще роль что то вроде "Мобильный пользователь" к нему прикрепить "Мобильный тепло" и для юзеров с телефонами накидать экран с книжной ориентацией с какой нибудь сводкой. При подключении, пользователь будет выбирать что смотреть, основную или мобильную версию.

Тоже классная мысль! Пока это делать не буду, но возьму на заметку. А пока что поставил ребятам на демо-версии на пробу, пусть сделают замечания-пожелания, тогда в комплексе и буду дорабатывать. Еще раз Вам спасибо!

Сергей0629
24.04.2023, 10:58
Добрый день.
Помогите, пожалуйста, я чего-то явно не понимаю....
Я сделал в ST код:

filterSeverityWarning:='["Active=TRUE", "Severity=500"]';

EventsCounter_1(Filter:= filterSeverityWarning, IsGlobal:= TRUE, Ack:= , UserName:= , Comment:= , Archive:= );
где filterSeverityWarning переменная типа String

Создал переменную Параметр 1 которую вывожу в журнал с приоритетом 500
Проблема в том, что выхода счётчика Coint = 1 и Exist = True, когда Параметр 1 = True. Даже если я сквитировал сообщение выхода счётчика Coint = 1 и Exist = True и становятся неактивны только тогда когда Параметр 1 = False. То есть этот код на квитирование внимание не обращает.
Вопрос, как его доработать?
Спасибо.

Сергей0629
24.04.2023, 16:06
Нашёл свойство Acked, код выглядит следующим образом:

filterSeverityWarning:='["Acked=FALSE", "Severity=500 or Severity=700"]';

EventsCounter_1(Filter:=filterSeverityWarning, IsGlobal:=TRUE, Ack:= , UserName:= , Comment:= , Archive:= , Exists =>Старт);

Сергей0629
25.04.2023, 10:26
Обнаружилась проблема в работоспособности счётчика/фильтра.
Использую следующий код:

filterSeverityWarning:='["Acked=FALSE", "Severity=500 or Severity=700"]';

EventsCounter_1(Filter:=filterSeverityWarning, IsGlobal:=TRUE, Ack:= , UserName:= , Comment:= , Archive:= , Exists =>Старт);
Проблема заключается в следующем:
Когда я запускаю RT и происходит событие параметр с приоритетом 500 или 700 меняет своё значение с FALSE на TRUE, счётчик значения не видит, потом параметр меняет значение с TRUE на FALSE, и счётчик срабатывает когда параметр уже во второй раз меняет значение с FALSE на TRUE. И так для каждого отдельного параметра. То есть программа ждёт положительного фронта для каждого события в отдельности, а первое событие пропускает
Пробовал менять "Acked=FALSE" на "Active=TRUE" всё аналогично.
Подскажите, пожалуйста, как исправить данный косяк.
Спасибо

AlexBut
31.07.2023, 06:17
Похожая проблема- не работает EventsCounter
-Вызываю программу ST :
EventsCounter_1(Filter:=EventCount_Filter , IsGlobal:=False , Ack:=Acked_Glob , UserName:="Оператор 1" , Comment:= , Archive:= );
Sound_On:=EventsCounter_1.Exists;
Counter_Event:=EventsCounter_1.Count;

где Filter="Acked=FALSE","Active=True"

И не работает -т.е. могу квитировать задав параметру Ack значение True, но при квитировании аварий в объекте
ничего не меняется- EventsCounter_1.Count всегда 37,EventsCounter_1.Exists всегда True.
Задача- родит объекта а у него тоже родит объекта(Объект КНС-13 вложен в корень Объекты).
Может с заданием параметров при вызове что не так?

Спасибо

AlexBut
31.07.2023, 06:26
И ещё позвольте вопрос- при изменении параметра Rep из True в False в PlaySound в он-лайн (привязан параметр Bool )-
остановка не происходит, корректно работает только через Stop.
Это нормально?

AlexBut
31.07.2023, 10:54
Извините-по поводу EventsCounter- невнимательно смотрел пример вызова

Так работает в Яндекс-бразере(а в Edge как-то через раз-может настройки нужны какие)

EventCount_Filter:='["Active=TRUE","Acked=False"]';
Sound_rep:=TRUE;
EventsCounter_1(Filter:=EventCount_Filter , IsGlobal:=False , Ack:=Acked_Glob , UserName:="Оператор 1" , Comment:= , Archive:= );
Sound_Off:=not EventsCounter_1.Exists;
Sound_On:=EventsCounter_1.Exists;
Counter_Event:=EventsCounter_1.Count;

Теперь бы клавишей пробел квитировать- пока не понял где работа с клавой

AlexBut
01.08.2023, 08:25
Хочу как привык в InTouch квитировать все аварии нажатием клавиши пробел, но не пойму как заставить программу выдать импульс на параметр
Ack FB EventsCounter при нажатии пробела.
Есть у каждого элемента во вкладке действия параметры Нажатие клавиши и Ввод символа, есть в библиотеке BaseIcons окно Ввод текста.
, есть у каждого этого параметра действие выдать импульс,но не получается.

Нужно, чтобы на Ack приходил импульс при нажатии пробела, независимо от фокуса.
Не подскажете?

И ещё -не получается передать символ или код нажатой клавши параметру из панели действий -не привязывается?

AlexBut
01.08.2023, 08:57
Ещё вопрос -в EventsCounter параметр UserName для чего? В журнале в столбце "Пользователь" это имя не появляется,
что даёт передача этого параметра FB EventsCounter?

А понял это имя записывается в журнал при квитировании через EventsCounter

AlexBut
04.08.2023, 12:52
Извините за настойчивость но как втянуть код нажатой клавиши на клавиатуре,
чтобы проанализировать

Ready
04.08.2023, 16:06
И ещё -не получается передать символ или код нажатой клавши параметру из панели действий -не привязывается?

Для этого к событию, например, "Отпускание клавиши", необходимо добавить действие "Установить параметр" и к его источнику привязать "Символ" или "Код клавиши" из подгруппы "Параметры", а приемник связать с нужным вам параметром. Если нужны и символ и код клавиши, то добавьте еще одно действие "Установить параметр". Но это будет работать только при фокусе на элементе.


Нужно, чтобы на Ack приходил импульс при нажатии пробела, независимо от фокуса.

Есть способ это сделать ч/з пользовательский элемент, но тогда всегда будете получать код пробела или нужной клавиши, даже, если не квитируете, например, при текстовом вводе.

69344 - мануал по пользовательскому элементу
69345 - пример проекта в MS4D с передачей кода клавиши на основе пользовательского элемента