Почему на время одного цикла? Постоянно есть значение d.
В целом я понял, что повторно вызывать таймер наоборот необходимо. И такой вариант лучший получается?
TIMEdoz: TON;
d: TIME;
IF Knopka= TRUE THEN
OUT := TRUE;
TIMEdoz(IN:=TRUE,PT:=t#100s);
END_IF
IF Datchik = TRUE THEN
TIMEdoz();
d:= TIMEdoz.ET;
OUT := FALSE;
TIMEdoz.IN := FALSE;
END_IF