Обнаружение фронтов

Функциональные блоки обнаружения фронтов используются для генерации коротких импульсов при изменении состояния входного сигнала.

R_TRIG — Детектор переднего фронта

Генерирует импульс при переходе входного сигнала из FALSE в TRUE.

Входные параметры:

  • CLK (BOOL) — входной сигнал

Выходные параметры:

  • Q (BOOL) — импульс длительностью один цикл

Описание работы:

Блок R_TRIG отслеживает состояние входного сигнала CLK. Внутри блока хранится предыдущее состояние сигнала. Импульс на выходе Q формируется только в том случае, если текущее значение CLK равно TRUE, а предыдущее значение было FALSE. Длительность импульса составляет один цикл выполнения программы.

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

PROGRAM Example
VAR
    r_trig1 : R_TRIG;
    input_signal : BOOL;
    pulse_output : BOOL;
END_VAR

    r_trig1(CLK := input_signal);
    pulse_output := r_trig1.Q;

    IF pulse_output THEN
        // Действие при переднем фронте
    END_IF;

END_PROGRAM
        

Внутренняя реализация:

Исходный код блока:

FUNCTION_BLOCK R_TRIG
VAR_INPUT
    CLK : BOOL;
END_VAR
VAR_OUTPUT
    Q : BOOL;
END_VAR
VAR
    M : BOOL := FALSE;
END_VAR

Q := CLK AND NOT M;
M := CLK;

END_FUNCTION_BLOCK
        

F_TRIG — Детектор заднего фронта

Генерирует импульс при переходе входного сигнала из TRUE в FALSE.

Входные параметры:

  • CLK (BOOL) — входной сигнал

Выходные параметры:

  • Q (BOOL) — импульс длительностью один цикл

Описание работы:

Блок F_TRIG отслеживает состояние входного сигнала CLK. Внутри блока хранится предыдущее состояние сигнала. Импульс на выходе Q формируется только в том случае, если текущее значение CLK равно FALSE, а предыдущее значение было TRUE. Длительность импульса составляет один цикл выполнения программы.

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

PROGRAM Example
VAR
    f_trig1 : F_TRIG;
    input_signal : BOOL;
    pulse_output : BOOL;
END_VAR

    f_trig1(CLK := input_signal);
    pulse_output := f_trig1.Q;

    IF pulse_output THEN
        // Действие при заднем фронте
    END_IF;

END_PROGRAM
        

Внутренняя реализация:

Исходный код блока:

FUNCTION_BLOCK F_TRIG
VAR_INPUT
    CLK : BOOL;
END_VAR
VAR_OUTPUT
    Q : BOOL;
END_VAR
VAR
    M : BOOL := FALSE;
END_VAR

Q := NOT CLK AND NOT M;
M := NOT CLK;

END_FUNCTION_BLOCK
        

См. также

Встроенные типы данных - для информации о типе BOOL.