Здравствуйте.
Если Вашу задачу не удается перенести на ПЛК, то её можно решить с помощью трёх скриптов по изменению переменных: первые два отвечают за присвоение значения изменившейся переменной из выбранной группы (auto или manual) соответствующей переменной из выходной группы (trend), а третий - за перезапись всей группы (auto или manual) в выходную по изменению значения переменной выбора режима.
// запись по изменению переменной из группы auto, если она выбрана
begin
if not vrMode.AsBool then exit; // выбрана группа manual
with Variable do // запись для группы auto
GetVariableByName(Copy(Name, 1, Length(Name) - 4) + 'trend').Value := Value;
end.
// запись по изменению переменной из группы manual, если она выбрана
begin
if vrMode.AsBool then exit; // выбрана группа auto
with Variable do // запись для группы manual
GetVariableByName(Copy(Name, 1, Length(Name) - 6) + 'trend').Value := Value;
end.
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. Пример двух реагентов по три стадии во вложении.