Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: TrEsT130 от 14 Августа 2025, 09:59:25

Название: Цвет по биту переменной
Отправлено: TrEsT130 от 14 Августа 2025, 09:59:25
Добрый день, нарисовал трехходовой клапан из TM_Shape, нужно давать ему цвета по биту переменной(инкремент открытия/закрытия клапана).

Есть переменная STA в ней биты:

:12   Y_C   Выходной сигнал на закрытие
:13   Y_O   Выходной сигнал на открытие

Сделал скрипты:
Для Круга
Код: (delphi)
begin
  if Sender is TM_Object then   // проверяем, что Sender это объект
    with Sender as TM_Object do // приводим Sender к типу "TM_Object"
      begin
        if GetBit(AsInt, 12) = TRUE then  Color := RGB(139,69,19);  // Brown/closed
        if GetBit(AsInt, 13) = TRUE then  Color := RGB(21,162,39);  // Green/opened
     end;
end.
При открытии и закрытии правильно дает цвета, но в момент остановки клапана(среднее положение), остается крайний цвет, который был дан. Как сделать, чтобы в
промежуточное положение он не имел цвета? Точнее имел стандартный цвет.

PS. "Снимок2" так должен показывать круг во время среднего положения. "Снимок 4" это так показывает во время среднего положения сейчас.

"Среднее положение" - момент остановки клапана, а не момент открытия/закрытия.
С треугольниками такая же история, но я пока спрашиваю про круг, остальное сам доделаю.
Мне кажется не хватает одной строчки в скрипте, подскажите пожалуйста. Уже перепробовал многое.

"Круг" - показывает инкремент открытия/закрытия клапана
"Треугольник" - показывает открыт/закрыт, только положения 0 или 100
Название: Re: Цвет по биту переменной
Отправлено: Simple Scada от 14 Августа 2025, 18:01:20
Здравствуйте.

Чтобы не писать отдельные скрипты для каждого клапана и его частей, можно использовать следующий способ:
1. Разбейте целочисленные внешние переменные на биты, как это описано по ссылке (https://simple-scada.com/help/manual/extvarbits.html). Тогда с каждым битом переменной можно будет работать как с отдельной переменной.
2. Переменную бита закрытия укажите в свойстве "Переменная (https://clck.ru/3NfK7b)" фигуры.
3. Переменную бита открытия укажите в свойстве "Доп. переменная (https://clck.ru/3NfK9P)" фигуры.
4. Создайте скрипт (https://simple-scada.com/help/script/via-script-editor.html) с типом события "Универсальный скрипт (https://simple-scada.com/help/script/universal-event.html)" и следующим кодом:
Код: (delphi)
begin
  if Sender is TM_Object then         // проверяем, что Sender это объект
    with Sender as TM_Object do       // приводим Sender к типу "TM_Object"
    begin
      if AsBool then                  // если основная переменная объекта = true, то
        Color := RGB(139, 69, 19)     // Brown/closed
      else                            // иначе
      if VariableEx.AsBool then       // если доп. переменная объекта = true, то
        Color := RGB(21, 162, 39)     // Green/opened
      else                            // иначе
        SetInitialColor;              // вернуть изначальный цвет
    end;
end.
5. Данный скрипт назначьте на два события объекта (https://simple-scada.com/help/script/general-events.html): "OnDataChange" и "OnDataChangeEx" – это нужно для того, чтобы скрипт выполнялся по изменению двух переменных.
6. Готово.

Данный скрипт универсальный  (https://simple-scada.com/help/script/script-types.html)и его можно использовать для всех Ваших фигур, у которых необходимо менять цвет по аналогичным условиям. Так как в проекте предполагается использовать однотипные объекты, то рекомендуем применить систему шаблонов (https://simple-scada.com/help/manual/template.html).