Здравствуйте.
Для начала нужно убедиться, что от ОРС-сервера не поступают ошибочные данные. Индикация наличия ошибочных - скрипт "Изменились переменные":
// ОТЛОВ МИНИМАЛЬНЫХ ЗНАЧЕНИЙ
begin
with Variable do
// выбор минимального порога
// if (Value <= LowAlarm) and (not IsFirstChange) then // индивидуальный
if (Value <= 5) and (not IsFirstChange) then // общий
AddMessage(Now, mkAlarm, Name + '=' + AsStr, True, True);
end.
При наличии ошибок желательно их ликвидировать как явление.
И как последнее средство - введение фильтра минимальных значений перед архивированием. Т.е. переменная разделяется на входную (не архивируемую), по изменению которой происходит контроль величины и выходную (архивируемую), перезаписываемую из входной при прохождении контроля.
При условии, что имена входной и выходной переменной отличаются только суффиксом у выходной переменной - скрипт по событию "Изменились переменные":
// ФИЛЬТР МИНИМАЛЬНЫХ ЗНАЧЕНИЙ
begin
with Variable do
// выбор минимального порога
// if (Value > LowAlarm) and (not IsFirstChange) then
if (Value > 5) and (not IsFirstChange) then
GetVariableByName(Name + '_out').Value := Value;
end.
См. пример.