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

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

Автор Тема: Присвоить значение переменной из других переменных по условию  (Прочитано 58 раз)

raiman

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Добрый день!
Необходимо помощь в реализации скрипта или другого решения по следующему вопросу:
Имеются почти однотипные переменные:
- %Название реагента%_%Номер стадии%_auto - Названий 6 шт., стадий в каждом названии от 1 до 7. ручной режим
- %Название реагента%_%Номер стадии%_manual - Названий 6 шт., стадий в каждом названии от 1 до 7. авто режим
- %Название реагента%_%Номер стадии%_trend - Названий 6 шт., стадий в каждом названии от 1 до 7. переменные для тренда

Необходимо попробовать реализовать так, что бы при ручном режиме переменные "*_manual" из него записывались в "*_trend", а при автоматическом режиме аналогично.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1400
    • Просмотр профиля
Здравствуйте.

Подобные задачи и другую логику работы оборудования гораздо проще и надежнее решать на ПЛК, а не на скада-системе.

Вы можете прислать на support@simple-scada.com текущую версию проекта из директории "..\Simple-Scada 2\Projects\" и подробнее описать задачу: по каким именно условиям должна выполняться запись в переменную "_trend? По изменению другой переменной, отвечающей за переключение режимов работы (укажите какой)? Для каждого реагента/номера стадии используется отдельная переменная переключения режимов работы? После проверки проекта, возможно сможем предложить решение.

Если в проекте имеются конфиденциальные данные, то создайте копию проекта, удалите все лишнее и пришлите нам полученный проект.

pan2000

  • Постоялец
  • ***
  • Сообщений: 226
    • Просмотр профиля
   Здравствуйте.

Если Вашу задачу не удается перенести на ПЛК, то её можно решить с помощью трёх скриптов по изменению переменных: первые два отвечают за присвоение значения изменившейся переменной из выбранной группы (auto или manual) соответствующей переменной из выходной группы (trend), а третий - за перезапись всей группы (auto или manual) в выходную по изменению значения переменной выбора режима.
Код: (delphi)
// запись по изменению переменной из группы auto, если она выбрана
begin
  if not vrMode.AsBool then exit;    // выбрана группа manual
  with Variable do                   // запись для группы auto
    GetVariableByName(Copy(Name, 1, Length(Name) - 4) + 'trend').Value := Value;
end.
Код: (delphi)
// запись по изменению переменной из группы manual, если она выбрана
begin
  if vrMode.AsBool then exit;    // выбрана группа auto
  with Variable do               // запись для группы manual
    GetVariableByName(Copy(Name, 1, Length(Name) - 6) + 'trend').Value := Value;
end.       
Код: (delphi)
const ListName: array[1..2] of string [32] = ('Cucumber_','Alcohol_');
var i, j: integer;
    aStr: string;
begin
  for i := 1 to High(ListName) do            // цикл по реагентам
    for j := 1 to 3 do                       // цикл по номеру стадии
    begin
      aStr := ListName[i] + IntToStr(j);     // префикс имени переменной = %Название реагента%_%Номер стадии%
      if vrMode.AsBool then                  // выбор переменной-источника по переменной режима
        GetVariableByName(aStr + '_trend').Value := GetVariableByName(aStr + '_auto').Value
      else
        GetVariableByName(aStr + '_trend').Value := GetVariableByName(aStr + '_manual').Value;
    end;
end.
Пример двух реагентов по три стадии во вложении.