Rymaks, дело в том, что Вы сначала записываете в A текущее время, а затем в цикле сравниваете его с текущим временем, т.е. по сути получается сравнение одинакового времени и цикл крутится бесконечно. Для правильной реализации таймеров через скрипты придется использовать глобальные переменные и делать это нужно так:
- создайте новую внутреннюю (виртуальную) переменную в Редакторе переменных. Тип данных DateTime, шкала от -2147483648 до 2147483648. Имя например vrTime;
- создайте скрипт с типом события "Прошла секунда" и вставьте в него код представленный ниже;
begin
{ прерываем процедуру, если прошло меньше 2 секунд }
if SecondsBetween(Now, vrTime.AsDateTime) < 2 then
Exit;
vrTime.Value := Now;
{ Весь код далее будет выполнен с частотой 2 секунды }
// ...
// ...
end.
Учитывайте, что все скрипты выполняются на сервере, а на клиенты информация передается каждые пол секунды, а значит в некоторые моменты, при просмотре значения на клиенте будет казаться что прошло больше 2 секунд, но частота выполнения таймера на сервере при этом будет правильной. Также ни в коем случае не используйте подобные таймеры для управления важными или опасными процессами, т.к. это поставит процессы в зависимость от скады. В этом случае реализуйте таймер на уровне контроллера.