Таймеры
Таймеры используются для задержки сигналов или измерения времени.
Примечание
В реализации таймеров используется системная переменная vs_timer,
которая увеличивается на T#@__PLC_TIME__@ms каждый цикл. Это
обеспечивает измерение времени с точностью до одного цикла.
TON — Таймер включения
Задерживает включение выходного сигнала после подачи входного сигнала.
Входные параметры:
IN(BOOL) — входной сигнал для запуска таймераPT(TIME) — время задержки
Выходные параметры:
Q(BOOL) — выходной сигнал (TRUE после задержки)ET(TIME) — текущее время (прошедшее с момента запуска)
Описание работы:
Блок TON (Timer On-Delay) используется для задержки включения выходного сигнала. Когда вход IN становится TRUE, таймер начинает отсчет времени. Пока текущее время V меньше PT, выход Q остается FALSE. Когда V достигает PT, выход Q становится TRUE. Если вход IN становится FALSE до окончания отсчета, таймер сбрасывается в 0. Выход ET показывает текущее значение времени.
Временная диаграмма:
Пример использования:
PROGRAM Example
VAR
ton1 : TON;
start_signal : BOOL;
output_signal : BOOL;
elapsed_time : TIME;
END_VAR
ton1(IN := start_signal, PT := T#5s);
output_signal := ton1.Q;
elapsed_time := ton1.ET;
END_PROGRAM
|
Внутренняя реализация:
Исходный код блока:
FUNCTION_BLOCK TON
VAR_INPUT
IN : BOOL;
PT : TIME;
END_VAR
VAR_OUTPUT
Q : BOOL;
ET : TIME;
END_VAR
VAR
V : TIME;
END_VAR
IF IN THEN
IF V < PT AND vs_timer THEN
V := V + T#@__PLC_TIME__@ms;
END_IF;
ELSE
V := t#0ms;
END_IF;
IF V < PT THEN
Q := FALSE;
ELSE
Q := TRUE;
END_IF;
ET := V;
END_FUNCTION_BLOCK
|
TOF — Таймер выключения
Задерживает выключение выходного сигнала после снятия входного сигнала.
Входные параметры:
IN(BOOL) — входной сигналPT(TIME) — время задержки
Выходные параметры:
Q(BOOL) — выходной сигнал (FALSE после задержки)ET(TIME) — текущее время
Описание работы:
Блок TOF (Timer Off-Delay) используется для задержки выключения выходного сигнала. Когда вход IN становится TRUE, выход Q сразу становится TRUE, а таймер сбрасывается в 0. Когда вход IN становится FALSE, таймер начинает отсчет. Пока V меньше PT, выход Q остается TRUE. Когда V достигает PT, выход Q становится FALSE. Выход ET показывает текущее значение времени.
Временная диаграмма:
Пример использования:
PROGRAM Example
VAR
tof1 : TOF;
start_signal : BOOL;
output_signal : BOOL;
elapsed_time : TIME;
END_VAR
tof1(IN := start_signal, PT := T#3s);
output_signal := tof1.Q;
elapsed_time := tof1.ET;
END_PROGRAM
|
Внутренняя реализация:
Исходный код блока:
FUNCTION_BLOCK TOF
VAR_INPUT
IN : BOOL;
PT : TIME;
END_VAR
VAR_OUTPUT
Q : BOOL;
ET : TIME;
END_VAR
VAR
V : TIME;
END_VAR
IF IN THEN
V := t#0ms;
ELSE
IF V < PT AND vs_timer THEN
V := V + T#@__PLC_TIME__@ms;
END_IF;
END_IF;
IF V < PT THEN
Q := TRUE;
ELSE
Q := FALSE;
END_IF;
ET := V;
END_FUNCTION_BLOCK
|
TP — Таймер-импульс
Формирует импульс заданной длительности при появлении входного сигнала.
Входные параметры:
IN(BOOL) — входной сигнал (реагирует на передний фронт)PT(TIME) — длительность импульса
Выходные параметры:
Q(BOOL) — импульс заданной длительностиET(TIME) — текущее время
Описание работы:
Блок TP (Timer Pulse) формирует импульс заданной длительности при обнаружении переднего фронта на входе IN. Когда на входе IN появляется TRUE, внутренний флаг SQ устанавливается в TRUE, и начинается отсчет времени. Пока SQ = TRUE и V < PT, выход Q остается TRUE. Когда V достигает PT, SQ сбрасывается в FALSE, и выход Q становится FALSE. Если на вход IN поступают новые импульсы во время работы таймера, они игнорируются.
Временная диаграмма:
Пример использования:
PROGRAM Example
VAR
tp1 : TP;
trigger : BOOL;
pulse_output : BOOL;
elapsed_time : TIME;
END_VAR
tp1(IN := trigger, PT := T#2s);
pulse_output := tp1.Q;
elapsed_time := tp1.ET;
END_PROGRAM
|
Внутренняя реализация:
Исходный код блока:
FUNCTION_BLOCK TP
VAR_INPUT
IN : BOOL;
PT : TIME;
END_VAR
VAR_OUTPUT
Q : BOOL;
ET : TIME;
END_VAR
VAR
SQ : BOOL;
V : TIME;
END_VAR
IF SQ THEN
IF V < PT AND vs_timer THEN
V := V + T#@__PLC_TIME__@ms;
END_IF;
ELSE
IF IN THEN
SQ := TRUE;
ELSE
V := t#0ms;
END_IF;
END_IF;
IF V >= PT THEN
SQ := FALSE;
END_IF;
Q := SQ;
ET := V;
END_FUNCTION_BLOCK
|
См. также
Встроенные типы данных - для информации о типах TIME и BOOL.