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

Скрипты Simple-Scada

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

Подмена переменных у объектов

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

Важно! Для создания однотипных объектов, страниц, окон, сообщений, следует использовать систему шаблонов. Примеры с использованием подмены переменных у объектов приведенные ниже, можно использовать только в случаях, когда задачу невозможно решить при помощи системы шаблонов. Также, следует учитывать, что подмена переменных происходит одновременно на всех клиентах, поэтому в проектах с несколькими клиентами использовать подмену переменных не рекомендуется.

В некоторых случаях может понадобиться изменить переменную объекта прямо во время работы проекта. Для этого нужно использовать свойство "Variable", например:

begin
  Field1.Variable := MyVariable; // связываем поле "Field1" с переменной "MyVariable" 
end.

Важно! Если после подмены переменной требуется выполнить скрипты OnDataChange/OnDataChangeEx для объектов связанных с этой переменной, то нужно использовать метод OnDataChangeEvent.

 

Рассмотрим более сложную задачу: допустим, необходимо, чтобы при клике на исполнительный механизм открывалось однотипное окно регулятора и у объектов окна переменные подменялись на соответствующие переменные исполнительного механизма. Для этого можно использовать функцию "GetVariableByName", которая возвращает переменную по имени:

var
  aVar: TM_Variable;
begin
  { ищем переменную с именем "MyVariable" и 
    результат поиска записываем в "aVar" }
  aVar := GetVariableByName('MyVariable');
 
  if Assigned(aVar) then      // если переменная с таким именем найдена
    Field1.Variable := aVar;  // связываем поле "Field1" с найденной переменной
end.

 

Для нашей задачи при создании переменных необходимо именовать их в одном стиле, например:

переменные для механизма 1: Var1_SP, Var1_PV, Var1_MAN;

переменные для механизма 2: Var2_SP, Var2_PV, Var2_MAN;

У изображений исполнительных механизмов можно использовать свойство "Тег", как номер механизма (или группы переменных). У одного механизма ставим "Тег" = 1, у другого "Тег" = 2. Затем, пишем универсальный скрипт по клику на исполнительный механизм ("OnClick"):

var
  aVar: TM_Variable;
  aName: string;
begin
  { получаем приставку к имени переменной в зависимости от свойства "Тег" объекта (например "Var1") }
  aName := 'Var' + IntToStr(Sender.Tag);
  
  aVar := GetVariableByName(aName + '_SP');  // получаем SP переменную
  FieldSP.Variable := aVar;                  // связываем поле "FieldSP" с переменной "VarX_SP"
 
  aVar := GetVariableByName(aName + '_PV');  // получаем PV переменную
  FieldPV.Variable := aVar;                  // связываем поле "FieldPV" с переменной "VarX_PV"
 
  aVar := GetVariableByName(aName + '_MAN'); // получаем MAN переменную
  FieldMAN.Variable := aVar;                 // связываем поле "FieldMAN" с переменной "VarX_MAN"
end.

 

Теперь можно создать множество исполнительных механизмов и у каждого выставить свойство "Тег" (соответствующее группе переменных). Также, у каждого механизма нужно выставить универсальный скрипт описанный выше на событие "OnClick". В результате, при клике по механизму будет появляться окно, в котором у объектов будут переменные этого механизма. При этом не приходится писать отдельные скрипты и создавать отдельные окна для каждого механизма.