Здравствуйте.
Нужно, чтобы если качество исходной переменной "бэд", то и у внутренних выставлялось "бэд".
Так сделать не получится. Качество переменной недоступно для изменения. Можно разложить переменную на биты в OPC-сервере и считывать в скаду отдельные битовые переменные, тогда качество этих переменных всегда будет соответствовать качеству на OPC-сервере.
как писать в тренд с учетом коэффициента трансформации, т.е. значение переменной умножить на число и его уже писать в тренд?
Для этого нужно создать новую внутреннюю переменную, в скрипте произвести необходимые вычисления с исходной переменной и записать результат во внутреннюю переменную. У внешней переменной архивацию выключить, а у внутренней включить и использовать ее в трендах. Универсальный скрипт для подобной задачи можно применить если переменные, в которые нужно записывать рассчитываемые значения будут иметь однотипные имена, например исходная переменная имеет имя "Var1", а пересчитанная переменная имеет имя "Var1_Calc" и т.д. Тогда в скрипте можно использовать поиск переменной по имени через
GetVariableByName. В этом случае, можно создать скрипт с типом события "
Изменились переменные", добавить в список скрипта нужные переменные, которые требуется умножать на коэффициент и написать такой универсальный скрипт:
var
aVar: TM_Variable;
begin
{ ищем переменную, в которую нужно записать преобразованное значение }
aVar := GetVariableByName(Variable.Name + '_Calc');
{ если переменная найдена, то записать в нее значение переменной умноженное на коэффициент }
if aVar <> nil then
aVar.Value := Variable.Value * 0.89;
end.
, где 0.89 - это коэффициент, на который нужно умножить переменную, Variable - переменная, изменение которой привело к выполнению скрипта.