Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: ART63 от 17 Января 2022, 15:32:15

Название: Границы переменных
Отправлено: ART63 от 17 Января 2022, 15:32:15
Добрый день!

Есть ли возможность формировать сообщение при возвращении значения переменной в допустимые пределы?
Название: Re: Границы переменных
Отправлено: Simple Scada от 17 Января 2022, 19:44:45
Здравствуйте.
Есть ли возможность формировать сообщение при возвращении значения переменной в допустимые пределы?
Для решения данной задачи можно использовать функцию GetValueZone (https://simple-scada.com/help/script/getvaluezone.html), которая возвращает номер нарушенной границы. Нужно создать новый скрипт с событием "Нарушена граница (https://simple-scada.com/help/script/borderviol.html)", добавить в список скрипта нужные переменные (как это описано в примере (https://simple-scada.com/help/script/changemulvar.html)) и написать такой код:

Код: (delphi)
begin
  if Variable.GetValueZone = 0 then
  AddMessage(Now, mkMessage, 'Сообщение', True, False);
end.
Название: Re: Границы переменных
Отправлено: ART63 от 18 Января 2022, 09:25:31
Большое спасибо!

Как пожелание к разработчикам: может быть данную функциональность можно добавить в настройки границ?
Добавить combobox "Формировать сообщение при восстановлении данных" и поле с текстом сообщения.
Это проще для использования. Да и полагаю, что дополнительные скрипты могут сказаться на времени обработки других данных. Особенно тех, которые кроме как скриптами обработать нельзя. Также при большом количестве тегов это тоже может оказаться критично.

А данная функция очень полезна для записи альтернативной переменной при построении отчета о выходе параметров за допустимые пределы.
Название: Re: Границы переменных
Отправлено: Simple_Scada от 18 Января 2022, 20:03:16
Здравствуйте.

Цитировать
может быть данную функциональность можно добавить в настройки границ?
Сейчас мы разрабатываем новую систему архивации, в которой появятся изменения в интерфейсе просмотра сообщений, например будут добавлены новые колонки с временем возникновения и завершения сообщения. Это позволит в строке любого сообщения увидеть время его завершения, т.е. время когда значение переменной вышло из нарушенной границы.
Название: Re: Границы переменных
Отправлено: knskey от 03 Февраля 2022, 00:20:34
Здравствуйте.
Цитировать
может быть данную функциональность можно добавить в настройки границ?
.. например будут добавлены новые колонки с временем возникновения и завершения сообщения. Это позволит в строке любого сообщения увидеть время его завершения...

о. это очень хорошие новости и очень важное улучшение.
Название: Re: Границы переменных
Отправлено: AndreyA от 17 Апреля 2025, 15:15:54
Добрый день!
Необходимо чтобы по превышению  аварийных уставок становилось видимой форма ( прямоугольник),
небольшой скрипт "Нарушена граница":
Код: (delphi)
begin
  if not IsFirstChange then
    Shape5.Visible := True
  else if temperatura.GetValueZone = 0 then
  begin
    Shape5.Visible := False;
    AddMessage(Now, mkMessage, 'Температура в норме ', True, False);
  end;
end.


Проблема в том что форма остается видимой на экране, даже при том что значение переменной ушло в допустимые пределы.

upd:
Код: (delphi)
begin
  if not IsFirstChange then
  begin
    if temperatura.GetValueZone = 2 then
      Shape5.Visible := True
    else if temperatura.GetValueZone = 0 then
      Shape5.Visible := False;
  end;
end.

Работает так. И немного поменял % зоны нечувствительности
Название: Re: Границы переменных
Отправлено: AndreyA от 24 Апреля 2025, 09:33:55
В продолжение предыдущего поста :
Столкнулся с непонятной ситуацией : в скрипте я описывал ситуацию, при изменении Верхней аварийной границы появляется баннер, но баннер пропадает только если
Предупредительная граница не нарушена.  Прописывал условие для предупредительной границы -1 и +1. Ниже скрипт, но не помогает это условие:
Код: (delphi)
begin
  if not IsFirstChange then
  begin
    if temperatura.GetValueZone = 2 then
      Shape5.Visible := True
    else if temperatura.GetValueZone = 0 or
             temperatura.GetValueZone = 1 or
             temperatura.GetValueZone = -1 then
      Shape5.Visible := False;
  end;
end.
Название: Re: Границы переменных
Отправлено: ZWolol от 24 Апреля 2025, 10:20:02
В первом скрипте ты постоянно присваиваешь ей видимость, потому она и не пропадает.
Во втором скрипте ты ее гасишь когда войдет в норму и пишешь что, работает.

А что тебе в третьем скрипте нужно не понятно.
Там все условия проверки нужно заключать в скобки, типа: (temperatura.GetValueZone = 0) or (...

Возможно тебе нужно это: temperatura.GetValueZone >= 0
Название: Re: Границы переменных
Отправлено: AndreyA от 24 Апреля 2025, 10:33:21
Да, наверно запутал))
Вот текущий скрипт:
Суть такая: если значение переменной выходит за пределы Аварийных границ как HH или LL - баннер появляется, при  выходе переменной из аварийных уставок баннер пропадает.
Но! У меня баннер не пропадает пока он находиться между HighHigh и High  уставкой, хотя предупреждение отключено (Нigh) 
Код: (delphi)
begin
  if IsFirstChange then  // Выход, если это первое изменение
    Exit;

  if power1.Value < 100 then   // Выход, если мощность меньше 100
    Exit;

  // Основная логика (выполняется только если IsFirstChange=False и power1 >= 100)
  if (Pressure.GetValueZone = 2) or
   (temperatura.GetValueZone = 2) or
   (Pressure.GetValueZone = -2) or
   (temperatura.GetValueZone = -2) then
    Shape5.Visible := True
  else if (Pressure.GetValueZone >= 0) or (temperatura.GetValueZone >= 0) then
    Shape5.Visible := False;
end.

Пока нет не помогло
Название: Re: Границы переменных
Отправлено: Simple_Scada от 24 Апреля 2025, 10:46:01
Здравствуйте.

Цитировать
Столкнулся с непонятной ситуацией : в скрипте я описывал ситуацию, при изменении Верхней аварийной границы появляется баннер, но баннер пропадает только если предупредительная граница не нарушена.
См. описание события "Нарушена граница (https://simple-scada.com/help/script/borderviol.html)": "событие не срабатывает при переходе значения из аварийной зоны в предупредительную (т.к. условия улучшились, а не ухудшились)."

Если требуется управлять видимостью при переходе из аварийной зоны в предупредительную, то событие "Нарушена граница" не подойдет. Можно использовать скрипт  "Изменились переменные (https://simple-scada.com/help/script/changed-the-variables.html)" и сравнивать текущее значение переменной с нужными границами (https://simple-scada.com/help/script/extra-properties.html). Но следует учитывать, что в этом случае зона нечувствительности переменной не будет учитываться и при колебаниях значения на границах, видимость будет постоянно меняться.
Название: Re: Границы переменных
Отправлено: AndreyA от 24 Апреля 2025, 10:50:21
Понятно. Благодарю
Название: Re: Границы переменных
Отправлено: pan2000 от 25 Апреля 2025, 00:57:48
   Здравствуйте.

Появление баннера при нарушении "Верхней аварийной" границы и пропадание по выходу из зоны нечувствительности:

1.Если для прочих нужд проекта не используется "Верхняя предупредительная" граница, скрипт "Нарушена граница":
Код: (delphi)
begin
  Shape5.Visible := Variable.GetValueZone = 2;
end.
, в вариациях задания зоны нечувствительности:
- "Только аварийные" границы - сама "Зона нечувствительности";
- "Аварийные и предупредительные" границы - либо нижняя граница зоны нечувствительности задается "Верхней предупредительной" границей при "Зоне нечувствительности"=0, либо "Зоной нечувствительности" при "Верхней предупредительной"="Верхней аварийной".

2. Без использования стандартной процедуры контроля границ, скрипт "Изменилась переменная":
- с нулевой зоной:
Код: (delphi)
begin
  Shape5.Visible := Variable.AsFloat >= Variable.HighAlarm;
end.
- с ненулевой зоной:
Код: (delphi)
const hist = 4.00;  // величина зоны в единицах измерения переменной
begin
  if (Variable.AsFloat >= Variable.HighAlarm) then Shape5.Visible := true;
  if Shape5.Visible and (Variable.AsFloat < (Variable.HighAlarm - hist)) then Shape5.Visible := false;
end.
.
Вариант 1 более предпочтительный, т.к. и скрипт проще, и событий меньше. Примеры для некоторых вариантов во вложении.
Название: Re: Границы переменных
Отправлено: AndreyA от 25 Апреля 2025, 12:34:50
Коллеги, Благодарю!
Я сделал кнопку на сброс, т.е. когда выскакивает баннер по превышению(понижению) уставки на главном окне, то оператор выбирает окно с объектом на котором аварийная ситуация и уже открыв окно он сбрасывает состояние Visible у баннера.