Пожалуйста, включите JavaScript для просмотра этого сайта.

Скрипты Simple-Scada

История: Примеры скриптов

Скрипт по изменению переменных

Пред. Вверх След. Еще

В скриптах с типом "Изменились переменные" можно использовать функции IsFirstChange, PrevAsBool, PrevAsInt, PrevAsFloat, PrevAsStr.

Пример 1:

Допустим, в проекте имеются переменные aVar1, aVar2, aVar3 и необходимо при изменении значения любой из переменных записывать результат их сложения в переменную aResult. Для этого перейдем в редактор скриптов и создадим скрипт с типом события "Изменились переменные".

В левой части параметров скрипта отображается список переменных проекта, в правой части отображается список выбранных переменных, по изменению которых будет выполняться скрипт. Для добавления переменных в список скрипта, необходимо выбрать требуемые переменные кликая по флажкам рядом с именами переменных. Для добавления всех переменных группы, необходимо кликнуть по флажку рядом с именем группы. Для удаления переменной из списка скрипта, необходимо снять флажок рядом с именем переменной. Для редактирования списка переменных в уже созданном скрипте, необходимо выбрать нужный скрипт на панели скриптов и нажать кнопку редактирования(с иконкой карандаша).  

Добавим в список скрипта наши переменные и нажмем кнопку "Создать":

 

Далее можно написать код скрипта:

begin
  aResult.Value := aVar1.Value + aVar2.Value + aVar3.Value;
end.

 

Теперь в переменную aResult будет записываться результат сложения наших переменных, причем скрипт будет выполняться не постоянно, а только при изменении переменных. Для получения доступа к переменной, изменение которой привело к выполнению скрипта можно использовать параметр "Variable". К примеру, добавим в скрипт выдачу сообщения с именем и значением переменной, которая изменилась:

begin
  aResult.Value := aVar1.Value + aVar2.Value + aVar3.Value;
  AddMessage(Now, mkWarning, 'Изменилась переменная: ' + Variable.Name + ' Значение = ' + Variable.AsStr,  True, True);
end.

 

Пример 2:

Пусть имеются переменные с типом данных Boolean. Необходимо создать общую аварию - если любая из переменных принимает значение True, то изображение мигает красным цветом, иначе цвет изображения должен быть зеленым. Для этого, создадим новую внутреннюю переменную с типом данных Integer и именем "vrCounter", которая будет служить счетчиком аварий. Далее, аналогично первому примеру, создадим скрипт с типом события "Изменились переменные" и добавим в список скрипта требуемые переменные. После этого можно написать код скрипта:

begin
  if Variable.AsBool then                     // если переменная, которая изменилась = True
    vrCounter.Value := vrCounter.Value + 1    // увеличиваем счетчик аварий на 1
  else                                        // иначе...
    if vrCounter.Value > 0 then               // условие для пропуска изменений при старте проекта
      vrCounter.Value := vrCounter.Value - 1// уменьшаем счетчик аварий на 1
 
  if vrCounter.Value > 0 then                 // если счетчик аварий > 0
  begin
    Image1.Color := clNone;                   // изменяем цвет на "без цвета"
    Image1.FlashColor := clRed;               // включаем мигание красным цветом
  end else                                    // иначе...
    begin
      Image1.Color := clGreen;                // изменяем цвет на зеленый
      Image1.FlashColor := clNone;            // отключаем мигание
    end;
end.

 

Пример 3:

Изменим условия второго примера. Допустим имеются три переменные: vrA, vrB, vrC с типом данных Integer. Необходимо сделать общую аварию - если vrA = 10 или vrB > 5 или vrC < 2, то цвет изображения красный , иначе цвет изображения должен быть зеленым. Для этого создадим новую внутреннюю переменную с типом данных Boolean, например с именем vrAlarm, в которую будем записывать True, когда любое из условий выполнится. Затем создадим скрипт с типом события "Изменились переменные" и добавим в список скрипта наши переменные. Напишем скрипт:

begin
  if (vrA.AsInt = 10or (vrB.AsInt > 5or (vrC.AsInt < 2then
    vrAlarm.Value := True
  else
    vrAlarm.Value := False;
end.

 

В данном примере проверяются условия для трех переменных. При необходимости, в скрипт можно добавить любое количество переменных. Далее, остается только связать изображение с переменной vrAlarm и на событие OnDataChange написать следующий код:

begin
  if vrAlarm.AsBool = True then
    Image1.Color := clRed
  else
    Image1.Color := clGreen;
end.

 

Пример 4:

В скриптах с типом "Изменились переменные" можно использовать функции IsFirstChange, PrevAsBool, PrevAsInt, PrevAsFloat, PrevAsStr. Допустим, в списке скрипта имеется три переменных: vrA, vrB, vrC. Требуется в зависимости от предыдущего значения переменной vrA полученного через функцию PrevAsInt выполнить какие-либо действия. Но как определить, по изменению какой именно переменной выполнился скрипт и для какой переменной вернет значение функция PrevAsInt? Для этого можно использовать параметр Variable - в него помещается та переменная, которая вызвала выполнение скрипта. Именно ее предыдущее значение вернет функция PrevAsInt. Пример:

begin
  if Variable = vrA then  // если изменилась переменная vrA (а не какая-то другая переменная из списка!)
    if PrevAsInt = 1 then // и ее предыдущее значение равно 1, то
    begin
      // выполняем требуемые действия
    end;
end.