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

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

Автор Тема: Видимость объекта по условию значений больше двух переменных  (Прочитано 61 раз)

borische

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Добрый день.
Возможно вопрос уже задавался.
Каким образом отобразить видимость объекта (например фигуры) по условию значений больше двух переменных.
Например видимость фигуры Shape1 по условию tag1.AsBool = true and tag2.AsBool = true and tag3.AsBool = true.
Сейчас делаю так. Есть внутренний битовый тег var_Blink_1s, состояние которого меняется 1 раз в секунду (скрипт). Этот тег привязываю к объекту
и по изменению этого тега на событие OnDataChange исполняется скрипт
Код: (delphi)
begin
  If (tag1.AsBool = true) and (tag2.AsBool = true) and (tag3.AsBool = true)
    then Sender.Visible := true else Sender.Visible := false;
end.
Но как то кажется кривоватый способ. Может есть решение получше.

Спасибо.
« Изменён: 12 Августа 2026, 14:05:21 от Simple Scada »

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 293
    • Просмотр профиля
    • Simple-Scada
Здравствуйте.

К объекту можно привязать только две переменные (основная и доп. переменная) и отслеживать их изменение. Отслеживать изменение более двух переменных можно только в скрипте с типом события "Изменились переменные".

Самый простой и правильный способ для описанной задачи – это создать на ПЛК отдельную Boolean переменную, которая будет менять свое значение в зависимости от значений указанных трех переменных. Затем использовать полученную переменную в скада-системе для изменения видимости объекта.

Если на ПЛК это сделать не получается, то можно попробовать реализовать то же самое в скада-системе через скрипт "Изменились переменные" и затем использовать полученную переменную для изменения видимости объекта.

Для этого необходимо создать скрипт с типом события "Изменились переменные", добавить в него переменные "tag1", "tag2", "tag3" и использовать следующий код:
Код: (delphi)
begin
  vrBlink.Value := (tag1.AsBool) and (tag2.AsBool) and (tag3.AsBool);
end.
Далее переменную "vrBlink" нужно связать с требуемым объектом и на событие "OnDataChange" использовать скрипт:
Код: (delphi)
begin
  if Sender is TM_Object then    // проверяем, что Sender это объект
    with Sender as TM_Object do  // приводим Sender к типу "TM_Object"
      Visible := AsBool;         // изменить видимость объекта в зависимости от значения связанной с ним переменной
end.