Вопросы по скриптам в Simple-Scada 2

Автор Simple-Scada, 29 января 2016, 15:19:20

Simple-Scada

В этой теме будут размещаться примеры с использованием скриптов Simple-Scada 2 и подробным описанием. Задавайте вопросы, если что-то непонятно.

Simple_Scada

#1
Рассмотрим случай когда нам нужно изменять цвет объекта при изменении значения связанной с ним переменной.
  • В свойстве "Переменная" объекта выбираем нужную нам переменную.
  • В инспекторе объектов переходим на вкладку События и дважды кликаем по событию OnDataChange (изменение значения переменной связанной с объектом).
  • Пишем скрипт. Можно использовать if... then если у Вас будет одно условие, если условий несколько рекомендуем использовать case...of.  например для изменения цвета поля:
Код: pascal
begin
  // цвет можно указывать в виде констант цветов (например clRed), в виде HTML кода (например $FFFF00), в виде RGB (например RGB(0,0,255));
  case Field1.ValueAsInt of                  // если значение переменной поля равно:
    1..3: Field1.Color := clRed;             // от 1 до 3 - изменить цвет поля на красный;
    4   : Field1.BorderColor := clGreen;     // 4 - изменить цвет рамки поля на зеленый;
    5   : Field1.FontColor := $FFFF00;       // 5 - изменить цвет шрифта поля на желтый;
    6   : Field1.Color := RGB(0,0,255);      // 6 - изменить цвет поля на синий;
  end;
end.

Если Вам необходимо, например, чтобы множество однотипных объектов меняли цвет по одинаковым условиям не обязательно писать скрипт для каждого объекта отдельно. Для этого необходимо:
  • В свойстве "Переменная" одного из объектов выбрать требуемую переменную.
  • В инспекторе объектов перейти на вкладку События и кликнуть по событию OnDataChange.
  • Написать скрипт такого вида:
Код: pascal
begin
   // Sender - это тот объект который вызвал скрипт 
   if Sender is TM_Object then                   // если Sender это компонент то(например - уровень, поле и т.д.)
       case TM_Object(Sender).ValueAsInt   of    // если значение переменной связанной с объектом равно:
           1..5: Sender.Color := clDarkBlue;     // от 1 до 5, то изменить цвет на темно синий
           6, 7: Sender.Color := clGray;         // 6 или 7 - изменить цвет на серый
           8   : Sender.Color := clYellow;       // 7 - изменить цвет на желтый
       end;
end.

Теперь можно любому объекту выбрать этот скрипт, для этого:
1. У любого объекта через инспектор объектов переходим на вкладку "События" .
2. В свойстве OnDataChange выбираем из списка наш созданный скрипт.

Теперь все объекты у которых в событии OnDataChange мы выбрали наш скрипт будут менять свой цвет в соответствии с условиями скрипта. Чтобы последний способ работал у Вас должна быть версия не позднее 29.01.2015.

Simple_Scada

#2
Добавили несколько видеоуроков по созданию скриптов.  Задавайте вопросы если что-то непонятно.

Рассмотрено создание простых скриптов:


Рассмотрено создание универсального скрипта:

Andrey1883

Может глупый вопрос, но все же...А как помигать одним цветом?

toreto

По событию  OnDataChange пробую скрывать изображение с помощью прозрачности(Alpha) работает, а вот через событие видимость(Visible) нет.

Simple-Scada

#5
Цитироватьчерез событие видимость(Visible) нет.
Проверяем.

ЦитироватьМожет глупый вопрос, но все же...А как помигать одним цветом?
В текущей версии мигания нет. Но мы добавим всем объектам новое свойство для мигания.

Simple-Scada

#6
Цитироватьа вот через событие видимость(Visible) нет.
Проверили, все работает вот так (изображение скрывается при изменении переменной, которая с ним связана):
Код: pascal
begin
  Image1.Visible := False;
end.
Можете написать подробнее о последовательности Ваших действий? Вы не забыли выбрать Переменную объекту, у которого пишите OnDataCahnge скрипт?

toreto

Все работает, вопрос закрыт, мой косяк. Другой вопрос в окнах почему то скрипты не работают.

Simple-Scada

Какие именно? По какому событию? Если OnShow и OnClose, то они просто ограничены beta-версией

toreto

Про эти события я понял что ограничены, а не получается к примеру смена цвета по событию OnDataCahnge

Simple_Scada

Теперь понятно. Да, действительно не работает - исправим!

TeNQ

Событие OnDataChange привязано к конкретной переменной и объекту, а если мне надо использовать несколько переменных по изменению которых нужно изменить свойство объекта? Например, отобразить цвет красный на кнопке, если переменные изменились и равны M0= 1 или M1=1 соответственно  и цвет серый, если они равны 0. Или просто крутить в OnSecondTimer условие проверки и там менять цвет?

Simple-Scada

#12
Самый правильный вариант - выделить под эту задачу третью переменную на контроллере. Эта переменная должна в итоге принимать только два состояния, для красного цвета (допустим значение 0) и для серого (допустим значение 1). Вот эту переменную и нужно использовать в скаде.

Но, к примеру, если Вы не можете сделать это на контроллере, то Вы должны создать виртуальную переменную в скаде и в OnSecondTimer описать условия по которым она будет принимать эти два состояния (как в примере выше). Затем эту переменную Вы связываете со всеми объектами, которые должны менять цвет и описываете смену цвета в OnDataChange. Для этого лучше всего написать один универсальный скрипт и поставить его всем объектам в OnDatachange.

На контроллере это делать правильнее. Вообще, по возможности, нужно делать так, чтобы скада работала с переменными состояний, а не с переменными из которых нужно вычислять состояния. Если такой возможности нет, то тогда уже использовать вариант 2.

TeNQ

Спасибо, подробно и понятно, как в учебнике)

Andrey1883

ЦитироватьВ текущей версии мигания нет. Но мы добавим всем объектам новое свойство для мигания.

Спасибо!!Это свойство очень пригодится!!