Возникла проблема при установки верхней предупредительной границы на 2-х (возможно и более, пока не обнаружено) переменных.
В процедуру SetTagsSPs передаётся индекс объекта системы, по этому индексу в цикле определяются необходимые переменные spTag, значения mConstTag и тип spType границы, и данные передаются в SetSPToTag. Там уже идёт изменение граничного значения. На скрине видно, что значения на вход SetSPToTag поступают одни, а значение предупредительной границы не меняется - остаётся "10". С остальными переменными всё работает идеально.
Подскажите, пожалуйста, в чём может быть загвоздка?
procedure SetSPToTag(spTag: TM_Variable; spValue: double; spType: byte);
begin
DebugSP('[SetSPtoTag] spValue = ' + FloatToStr(spValue));
case spType of
1: begin
spTag.HighWarning := spValue;
DebugSP('[SetSPtoTag] ' + spTag.Name + ' SP1 set: ' + FloatToStr(spTag.HighWarning));
end;
2: begin
spTag.HighAlarm := spValue;
DebugSP('[SetSPtoTag] ' + spTag.Name + ' SP2 set: ' + FloatToStr(spTag.HighAlarm));
end;
end;
end;
procedure SetTagsSPs(objIndex: byte);
var
spTag, mConstTag: TM_Variable;
spNum, spType: byte;
objectId, mConstNumStr: string;
begin
DebugSP('[SetTagsSPs] in: objIndex = ' + IntToStr(objIndex));
objectId := GetObjectIdByIndex(objIndex);
for spNum := 1 to MCONST_SP_COUNT do
begin
spTag := GetVariableByName(objectId + '_' + mConstSPTag[spNum]);
if Assigned(spTag) then
begin
spType := 2;
repeat
mConstTag := GetVariableByName(objectId + '_MCONST_' + intToStr(mConstSPNum[spType, spNum]));
if Assigned(mConstTag) then
begin
DebugSP('[SetTagsSPs] ' + mConstTag.Name + ' = ' + mConstTag.AsStr);
SetSPToTag(spTag, mConstTag.AsFloat, spType);
end;
Dec(spType);
until spType = 0;
end;
end;
end;