Здравствуйте.
Можно использовать следующие способы:
1. Если требуется преобразовать значение из одной шкалы в другую, то можно использовать
режим масштабирования переменной.
2.1. Создать
внутреннюю переменную (в которую будем записывать результат вычисления) с именем, как у исходной переменной + приставка "_Corr". Например, для переменной "vrTemp" -> "vrTemp_Corr". Далее создать скрипт с типом события "
Изменились переменные", добавить внешнюю переменную, изменение которой необходимо отслеживать, в список скрипта и написать такой скрипт:
var
aTemp_Corr: TM_Variable;
begin
aTemp_Corr := GetVariableByName(Variable.Name + '_Corr'); // выполняем поиск переменной vrTemp_Corr
if aTemp_Corr <> nil then // если переменная существует, то
aTemp_Corr.Value := Variable.AsInt + corr.AsInt; // записываем в нее значение переменной vrTemp + значение переменной "corr"
end.
Теперь в переменную "vrTemp_Corr" будет записываться значение переменной "vrTemp" + значение переменной "vrTemp_Corr". Данный скрипт универсальный, если таких переменных несколько, то их все можно добавить в список скрипта и он будет выполняться для каждой переменной отдельно.
Данный пример подойдет для группы переменных с одинаковым значением корректировки.
2.2. Если для каждой внешней переменной будет уникальное значение корректировки, то для переменных корректировки также нужно задать однотипные имена, например "CorrValue_" + имя исходной переменной, и использовать следующий код скрипта:
var
aTemp_Corr, aCorr: TM_Variable;
begin
aTemp_Corr := GetVariableByName(Variable.Name + '_Corr'); // выполняем поиск переменной vrTemp_Corr
aCorr := GetVariableByName('CorrValue_' + Variable.Name); // выполняем поиск переменной CorrValue_vrTemp
if (aTemp_Corr <> nil) and (aCorr <> nil) then // если переменные существуют, то
aTemp_Corr.Value := Variable.AsInt + aCorr.AsInt; // в переменную vrTemp_Corr записываем значение переменной vrTemp + значение переменной CorrValue_vrTemp
end.
3. Если эту переменную не требуется выводить в
тренды,
отчеты, генерировать по ней сообщения о нарушении границ и т.д., то можно использовать следующий способ: выводить значение переменной в компонент "
Текст" (см. пример №5
по ссылке), с прибавлением необходимого значения. Для этого внешнюю переменную нужно указать в свойстве "Переменная", а переменную корректировки в свойстве "Доп. переменная", и на событие "
OnDataChange" использовать следующий код:
begin
if Sender is TM_Text then // проверяем, что Sender это текст
with Sender as TM_Text do // приводим Sender к типу "TM_Text"
Text := IntToStr(AsInt + VariableEx.AsInt); // записываем в текст значение основной переменной + значение доп. переменной
end.
Если необходимо выполнять скрипт после изменения значения переменной корректировки, то данный скрипт также необходимо назначить на событие "
OnDataChangeEx".