Таймеры

Таймеры используются для задержки сигналов или измерения времени.

Примечание

В реализации таймеров используется системная переменная 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 показывает текущее значение времени.

Временная диаграмма:

../_images/ton.png

Пример использования:

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 показывает текущее значение времени.

Временная диаграмма:

../_images/tof.png

Пример использования:

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 поступают новые импульсы во время работы таймера, они игнорируются.

Временная диаграмма:

../_images/tp.png

Пример использования:

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.