Здравствуйте.
Можно использовать виртуальную переменную dtNextStart типа DateTime с автоматическим восстановлением. В переменной хранится дата-время начала очередной работы скрипта. Скрипт " Прошла секунда/Прошел час".
begin
if dtNextStart.value < Now then exit;
dtNextStart.value := IncHour(dtNextStart.value, 48); // начало следующего цикла
// выполняемая часть
. . .
end.
Для реального проекта необходимо определить:
1. Как получить начальное значение dtNextStart при первом запуске проекта.
2. Правила работы скрипта при повторном открытии Скада после остановки на время большее чем период.