Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Подсвечивание вкладки с активной аварий.  (Прочитано 2890 раз)

ShinkarukOA

  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Добрый день!
Подскажите пожалуйста как можно лаконично с помощью скриптов реализовать следующую задачу:
На вкладке несколько устройств каждое из которых имеет своё слово состояние с битом об аварии.
Если любое из устройств встало в аварию, то необходимо подсвечивать вкладку меню на которой они находятся.
В идеале даже мигать цветом, а при квитировании оставлять просто светиться, если причина аварии не устранена ???
Можно ли как то привязаться к созданной группе сообщений по устройствам?
« Изменён: 17 Декабря 2022, 19:18:11 от ShinkarukOA »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1400
    • Просмотр профиля
Re: Подсвечивание вкладки с активной аварий.
« Ответ #1 : 19 Декабря 2022, 15:40:56 »
Здравствуйте.

Можно создать для каждой страницы отдельный скрипт с типом события "Изменились переменные", добавить в него переменную(или несколько переменных), которая отвечает за аварии на нужной странице и написать такой код:
Код: (delphi)
begin
  if Variable.AsInt <> 0 then
    Page1.Color := clRed
  else
    Page1.Color := clGray;
end.
Теперь при возникновении любых аварии, которые хранятся в битах переменной добавленной в скрипт, цвет заголовка страницы будет меняться на красный, а при отсутствии аварий на серый.

Если требуется менять цвет заголовка страницы по изменению какого-то конкретного бита переменной, то чтобы извлечь нужный бит из значения переменной, нужно использовать функцию GetBit. Примеры можно найти по ссылке. При наличии множества отдельных переменных, по которым нужно изменять цвет заголовка страницы, проще всего будет объединить их в одну переменную на ПЛК и использовать ее в скаде. Если такой возможности нет, то можно использовать способы описанные в примерах 2 и 3 по ссылке.

Цитировать
В идеале даже мигать цветом.
У страницы нет свойства мигания.

Цитировать
Можно ли как то привязаться к созданной группе сообщений по устройствам?
Такой возможности нет.

ShinkarukOA

  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: Подсвечивание вкладки с активной аварий.
« Ответ #2 : 20 Декабря 2022, 11:17:07 »
Спасибо за ответ!

pan2000

  • Постоялец
  • ***
  • Сообщений: 226
    • Просмотр профиля
Re: Подсвечивание вкладки с активной аварий.
« Ответ #3 : 20 Декабря 2022, 20:14:35 »
   Здравствуйте.
Решить задачу можно посредством шаблона панели страниц, размещаемого на каждой странице вместо стандартной панели (разумеется что страниц много меньше чем 100500).
Индикация управляется двумя векторами панели - ошибок и подтверждений.
На каждой странице для устройств имеется собственный вектор ошибок и производный от него вектор подтверждений, биты которого устанавливаются в 1 при переходе 0->1 соответствующего бита регистра ошибок.
Биты векторов панели изменяются в зависимости от нулевых/ненулевых значений векторов устройств.
Сброс битов вектора подтверждений устройств осуществляется на основе данных таблицы messages версии V2.
Во вложении пример проекта с шаблоном панели страниц. Проект требует подключения базы данных MySQL.

ShinkarukOA

  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: Подсвечивание вкладки с активной аварий.
« Ответ #4 : 21 Декабря 2022, 06:39:12 »
Спасибо большое за такой подробный пример! :o

ShinkarukOA

  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: Подсвечивание вкладки с активной аварий.
« Ответ #5 : 22 Декабря 2022, 03:15:08 »
Было бы конечно удобно, если бы была возможность вытягивать из группы сообщений количество активных, неквитируемых аварий 😊

pan2000

  • Постоялец
  • ***
  • Сообщений: 226
    • Просмотр профиля
Re: Подсвечивание вкладки с активной аварий.
« Ответ #6 : 22 Декабря 2022, 14:16:18 »
                                                                      Нормальные герои всегда идут в обход!
                                                                      В обход идти, понятно, не очень-то легко.
                                                                      Не очень-то приятно, и оочень далекооо!
                                                                      (К/ф "Айболит-66")
   Здравствуйте.
Сообщения есть производные от изменения значений некоторого набора переменных. Следовательно необходимые данные по статистике устройств можно получить на основе обработки значений переменных этого набора. Для этого необходимо написать код эквивалентный настройкам системы сообщений.
Предыдущий пример содержит регистр ошибок устройств, например для получения количества аварий по группам устройств необходимо пересчитать количество 1, выделенных по маске группы из регистра ошибок.
Во вложении пример проекта с подсчетом количества аварий по двум группам устройств.