Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Aleksanrus от 31 Октября 2023, 16:15:33

Название: Цвет ячейки таблицы от значения переменной
Отправлено: Aleksanrus от 31 Октября 2023, 16:15:33
Здравствуйте!

Как сделать так чтобы ячейка таблицы меняла свой цвет в зависимости от значения переменной и задавать диапазон чувствительности к значению например от +3 до -3
Название: Re: Цвет ячейки таблицы от значения переменной
Отправлено: Aleksanrus от 01 Ноября 2023, 06:30:06
Допустим в ячейке 1 текущая температура уйдёт за пределы ограничения в три градуса заданной температуры в ячейке два и ячейка один поменяет свой цвет сигнализируя о не штатной ситуации. На каждую ячейку закреплена своя переменная
Название: Re: Цвет ячейки таблицы от значения переменной
Отправлено: Timothy Clement от 01 Ноября 2023, 15:51:41
Добрый день!
Таблица это массив столбцов и строк. Напишите скрипт, который будет обходить все ячейки таблицы в цикле, и если значение отклонилось на заданную величину менять свойство Color ячейки. Скрипт можно вызывать по событию OnCellDataChange или просто раз в секунду.
Название: Re: Цвет ячейки таблицы от значения переменной
Отправлено: Simple_Scada от 02 Ноября 2023, 12:42:42
Здравствуйте.

Для данной задачи проще всего будет применить штатный функционал управления границами переменных (https://simple-scada.com/help/manual/managing-bounds-var.html) без использования дополнительных переменных в столбце "t задание". Для этого нужно, чтобы у переменных "t подача" были включены "Границы (https://simple-scada.com/help/manual/varextra.html)"(если требуется только две границы, то выберите "Только аварийные"), а в столбце "t подача" у ячеек таблицы также должно быть включено свойство "Границы (https://simple-scada.com/help/manual/table.html#:~:text=%D0%B2%20%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B5%20%22%D0%9F%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%22.-,%D0%93%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B,-%D0%9C%D0%B5%D0%BD%D1%8F%D1%82%D1%8C%20%D1%86%D0%B2%D0%B5%D1%82%20%D0%BF%D0%BE)". Тогда при нарушении границ переменной, ячейки таблицы будут автоматически менять цвет. Дополнительно это позволит выдавать автоматические сообщения при нарушении границ переменных (https://simple-scada.com/help/manual/managing-bounds-var.html), если это требуется. Далее, чтобы изменять границы переменной из клиента, нужно эти же переменные из столбца "t подача" указать в столбце "t задание" и в свойстве ячейки "Работать с (https://simple-scada.com/help/manual/table.html#:~:text=%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%B5%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D1%85).-,%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%82%D1%8C%20%D1%81,-%D0%9F%D1%80%D0%B8%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8%20%D0%B4%D0%B0%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE)" указать нужную границу переменной.

Если переменные в столбце "t задание" это внешние переменные с ПЛК и нужно обязательно использовать их, то можно применить следующий способ: также как описано выше, у переменных "t подача" включить границы, а у ячеек таблицы в столбце "t подача" активировать свойство "Границы". Далее, у ячеек столбца "t задание" указать в свойстве "Доп. переменная" переменные температур из столбца "t подача" и создать новый скрипт по событию (https://simple-scada.com/help/script/by-obj-event.html) таблицы OnCellDataChange, в котором из переменной задания формировать аварийные границы для переменной температуры:
Код: (delphi)
var
  aTemp, aZad: TM_Variable;
begin
  // выполняем скрипт только для столбца с уставками и проверяем, что ячейки связаны с переменными
  if (Cell.Col = 2) and (Cell.Variable <> nil) and (Cell.VariableEx <> nil) then
  begin
    aTemp := Cell.VariableEx;             // переменная температуры
    aZad := Cell.Variable;                // переменная задания

    aTemp.HighAlarm := aZad.AsFloat + 3;  // верхняя авар. граница = задание + 3
    aTemp.LowAlarm := aZad.AsFloat - 3;   // нижняя авар. граница = задание - 3
  end;
end.
Следует учитывать, что нумерация столбцов таблицы начинается с нуля. В примере выше, переменные температур расположены в третьем столбце таблицы. Если у Вас они расположены в другом столбце, то нужно внести изменения в скрипт.

Если не разберетесь, то пришлите на support@simple-scada.com текущую версию проекта из директории "..\Simple-Scada 2\Projects\", можем сделать пример для Вашей таблицы.
Название: Re: Цвет ячейки таблицы от значения переменной
Отправлено: teplocom от 03 Ноября 2023, 00:11:01
Код: (delphi)
var
  aTemp, aZad: TM_Variable;
begin
  // выполняем скрипт только для столбца с уставками и проверяем, что ячейки связаны с переменными
  if (Cell.Col = 2) and (Cell.Variable <> nil) and (Cell.VariableEx <> nil) then
  begin
    aTemp := Cell.VariableEx;             // переменная температуры
    aZad := Cell.Variable;                // переменная задания

    aTemp.HighAlarm := aZad.AsFloat + 3;  // верхняя авар. граница = задание + 3
    aTemp.LowAlarm := aZad.AsFloat - 3;   // нижняя авар. граница = задание - 3
  end;
end.

Элегантно, у себя попробую такое сделать. Спасибо.

Подскажите, раз уж в тему:
Если у переменной включены аварийные границы, то де-факто будет и звуковое оповещение и сообщения при нарушении границ переменных в строке активных аварий в журнале.
Есть ли возможность не выдавать звуковое сообщение пользуясь стандартными средствами для определенных переменных (не всех) при их "выходах" за аварийные границы, чтобы например для переменной А формировались только активные аварии в журнале без звука, а для переменной В и звуковое оповещение и активные аварии в журнале.
Название: Re: Цвет ячейки таблицы от значения переменной
Отправлено: Simple_Scada от 03 Ноября 2023, 11:39:05
Цитировать
Есть ли возможность не выдавать звуковое сообщение пользуясь стандартными средствами для определенных переменных (не всех) при их "выходах" за аварийные границы
Такой возможности нет. Настройки для сообщений о нарушении границ (https://simple-scada.com/help/manual/messet.html) общие и изменить их для отдельных переменных нельзя.
Название: Re: Цвет ячейки таблицы от значения переменной
Отправлено: teplocom от 04 Ноября 2023, 16:50:39
Хмм.. А если я для переменной А (где не нужен звук) укажу только Верхняя/нижняя граница предупреждения в Настройки для сообщений о нарушении границ (https://simple-scada.com/help/manual/messet.html) А также укажу в поле: Сообщение для нарушения границ: не выдавать сообщения.
В этом случае для переменной А у меня останется только индикация поля (желтым по-моему) при выходе значений за предупредительные границы без выдачи любых сообщений?
Название: Re: Цвет ячейки таблицы от значения переменной
Отправлено: Simple_Scada от 08 Ноября 2023, 10:01:28
Здравствуйте.

Изначально Вы писали, что сообщения о нарушении границ должны выдаваться для всех переменных, но для некоторых нужно чтобы сообщения выдавались без звука.
Цитировать
чтобы например для переменной А формировались только активные аварии в журнале без звука, а для переменной В и звуковое оповещение и активные аварии в журнале.
Мы ответили именно на этот вопрос.

Если выдавать сообщения при нарушении границ для некоторых переменных не требуется, то Вы можете отключить выдачу сообщений о нарушении границ для таких переменных. Тогда, "для переменной А останется только индикация поля при выходе значений за предупредительные границы без выдачи любых сообщений".