если за 15 секунд переменная T2.Value не изменила значение, то переменной OT.Value :=0.
Это одновибратор с перезапуском. Ниже приведены примеры для одновибратора с перезапуском и повторным пуском.
Пример 1. (переменная TimeCnt типа int64 или integer)
Скрипт "Изменились переменные" (T2):
begin
TimeCnt.Value := 0; // начало отсчета по изменению переменной - перезапуск одновибратора
end.
Скрипт "Прошла секунда"
const INTERVAL = 15;
begin
if TimeCnt.Value >= INTERVAL then
OT.Value := 0 // таймер сработал
else
begin
OT.Value := 1; // если удалить эту команду, то одновибратор будет работать в режиме однократного запуска по OT=1
TimeCnt.Value := TimeCnt.Value + 1;
end;
end.
Пример предполагает последовательное выполнение скриптов из-за переменной TimeCnt, изменяемой в обоих скриптах.
Вполне возможно, что в последующих реализациях Simple-Scada скрипты станут обрабатываться паралллельно.
Пример 2. Аналог примера 1, но с изменениями переменной только в одном скрипте. (переменные TimeCnt и preTimeCnt типа int64 или integer)
Скрипт "Изменились переменные" (T2):
begin
preTimeCnt.Value := TimeCnt.Value; // момент отсчета по изменению переменной - перезапуск одновибратора
end.
Скрипт "Прошла секунда"
const INTERVAL = 15;
begin
if (TimeCnt.Value - preTimeCnt.Value) >= INTERVAL then
OT.Value := 0 // таймер сработал
else
begin
OT.Value := 1; // если удалить эту команду, то одновибратор будет работать в режиме однократного запуска по OT=1
TimeCnt.Value := TimeCnt.Value + 1;
end;
end.
Пример 3. Основная обработка в скрипте по изменению переменных. (переменные TimeCnt и preTimeCnt типа int64 или integer)
Скрипт "Прошла секунда"
begin
TimeCnt.Value := TimeCnt.Value + 1;
end.
Скрипт "Изменились переменные" (T2, TimeCnt):
const INTERVAL = 15;
begin
if Variable.Name = 'T2' then preTimeCnt.Value := TimeCnt.Value;
if Variable.Name = 'TimeCnt' then
if (TimeCnt.Value - preTimeCnt.Value) > INTERVAL then
OT.Value := 0
else
OT.Value := 1;
end.
Пример 4. Один скрипт, необходимое условие - уникальность изменения переменной T2 (например счетчик)
const INTERVAL = 15;
var i: integer;
begin
i := T2.Value;
if i <> preT2.Value then TimeCnt.Value := 0;
preT2.Value := i;
if TimeCnt.Value >= INTERVAL then
OT.Value := 0
else
begin
OT.Value := 1;
TimeCnt.Value := TimeCnt.Value + 1;
end;
end.
Пример 5. С использованием текущего времени. (Переменная ChangeVarTime - типа DateTime)
Скрипт "Изменились переменные" (T2):
begin
ChangeVarTime.Value := NOW(); // начало отсчета по изменению переменной
end.
Скрипт "Прошла секунда"
const INTERVAL = 15;
begin
if SecondsBetween(NOW(), ChangeVarTime.Value) >= INTERVAL then // сравнить с текущим временем события "Прошла секунда"
OT.Value := 0
else
OT.Value := 1;
end.