Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: ILSHAT8 от 09 Декабря 2024, 09:53:02

Название: Управление границами переменных
Отправлено: ILSHAT8 от 09 Декабря 2024, 09:53:02
Добрый день!
В проекте имеются около 30 аналоговых переменных( тип данных double), которые необходимо управлять отдельно для каждой переменной аварийными границами( выключить, аварийные, авар-предупредительные).Это реализовали  в текущем проекте.
Теперь вопрос, возможно ли сделать для всех 30 переменных сделать общую настройки и управлять границами( возможно нужно написать скрипт для всех имеющихся переменных).
Заранее благодарен за ответ.
Название: Re: Управление границами переменных
Отправлено: Simple Scada от 09 Декабря 2024, 13:39:13
Здравствуйте.

Как управлять границами переменных из клиента, рассмотрено по ссылке (https://simple-scada.com/help/manual/managing-bounds-var.html).).

Если Вам требуется управлять типами границ или отключать границы переменных (https://clck.ru/3F7oRC) через скрипты, то можно использовать свойство LimitType (https://simple-scada.com/help/script/varlimittype.html). Для изменения граничных значений переменных можно использовать свойства HighAlarm (https://simple-scada.com/help/script/varhighalarm.html), HighWarning (https://simple-scada.com/help/script/varhighwarning.html), LowWarning (https://simple-scada.com/help/script/varlowwarning.html) и LowAlarm (https://simple-scada.com/help/script/varlowalarm.html). При однотипном наименовании переменных (например myVariable1, myVariable2 … myVariable30) можно использовать цикл для прохода по всем переменным (привести имена переменных к однотипному наименованию можно с помощью группового переименования (https://simple-scada.com/help/manual/variable-editor.html?anchor=bulkren)).

Например, можно создать четыре внутренних переменных (https://simple-scada.com/help/script/var-types.html#:~:text=%D0%92%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D1%8F%D1%8F%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F) с типом данных "Integer" (например с именами "vrHighAlarmAll", "vrHighWarningAll", "vrLowWarningAll" и "vrLowAlarmAll"), через которые будут задаваться значения аварийных границ сразу для всех переменных (при необходимости у переменных можно включить опцию "Автоматическое восстановление (https://simple-scada.com/help/manual/varmain.html#:~:text=%E2%80%A2-,%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5%20%D0%B2%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,-%2D%20%D0%BF%D1%80%D0%B8%20%D0%B2%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%BD%D0%BE%D0%BC%20%D0%B2%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B8)"). Далее на мнемосхеме необходимо разместить четыре поля и связать их с этими переменными. После чего рядом с полями можно разместить кнопки, которые будут применять указанные в полях аварийные и предупредительные границы, менять типы границ или отключать границы (https://clck.ru/3F7oRC).

Пример скрипта на событие "OnClick (https://simple-scada.com/help/script/general-events.html#:~:text=%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-,OnClick,-%D0%9F%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%20%D0%BA%D0%BB%D0%B8%D0%BA%D0%BD%D1%83%D0%BB(%D0%BD%D0%B0%D0%B6%D0%B0%D0%BB)" кнопки, по нажатию на которую будут изменяться граничные значения, включаться аварийные и предупреждающие границы сразу для 30 переменных:
Код: (delphi)
var
  aVar : TM_Variable;
  i: Integer;
begin
  for i := 1 to 30 do
  begin
    aVar := GetVariableByName('myVariable' + IntToStr(i)); // ищем очередную переменную по имени
    if aVar <> nil then                                    // если переменная существует, то 
    begin
      aVar.HighAlarm := vrHighAlarmAll.AsInt;       // изменить верхнюю аварийную границу переменной
      aVar.HighWarning := vrHighWarningAll.AsInt;   // изменить верхнюю предупредительную границу переменной
      aVar.LowWarning := vrLowWarningAll.AsInt;     // изменить нижнюю предупредительную границу переменной
      aVar.LowAlarm := vrLowAlarmAll.AsInt;         // изменить нижнюю аварийную границу переменной

      aVar.LimitType := ltAlarmsAndWarnings;        // активировать аварийные и предупреждающие границы
    end;
  end;
end.