Доброго всем времени суток
Вообще глобально стоит задача подсчитывать количество и длительность простоя механизма, длительностью от 3 до 5 минут.
Алгоритм сейчас такой: по сигналу Var2 остановки механизма запускается таймер отсчёта простоя Timer, в переменную Vremya записывается время начала простоя
Если таймер простоя находится в интервале от 180 до 300 секунд и механизм продолжает стоять, то в переменную Var1 нужно записать true во время начала простоя
Если таймер простоя перешагнул отметку 300 секунд, в переменную Var1 нужно записать false во время начала простоя, т.е. этот простой не учитывать
Код (скрипт выполняется каждую секунду):
Var
Vremya, Timer:TDateTime;
Var1, Var2, AlwTrue, AlwFalse: Boolean;
K:integer;
Begin
AlwTrue.Value:=true;
AlwFalse.Value:=false;
K:=TimerGetState(Timer);
if ((Var2.value=false) and (K=-1)) then
begin
TimerStart(Timer,0);
Vremya:=Now;
end;
if ((Var2.value=true) and (K=1)) then
begin
TimerReset(Timer);
Var1.Value:=false;
end;
if ((Var2.value=false) and ((SecondsBetween(0, Timer.AsDateTime)>180) and (SecondsBetween(0, Timer.AsDateTime)<300))) then ArchiveValueByTime(Alwtrue,Var1, Vremya);
if ((Var2.value=false) and (SecondsBetween(0, Timer.AsDateTime)>300)) then ArchiveValueByTime(Alwfalse,Var1, Vremya);
end.