******************* Обнаружение фронтов ******************* Функциональные блоки обнаружения фронтов используются для генерации коротких импульсов при изменении состояния входного сигнала. .. _r-trig-edge: R_TRIG — Детектор переднего фронта ================================== Генерирует импульс при переходе входного сигнала из FALSE в TRUE. **Входные параметры:** - ``CLK`` (BOOL) — входной сигнал **Выходные параметры:** - ``Q`` (BOOL) — импульс длительностью один цикл **Описание работы:** Блок R_TRIG отслеживает состояние входного сигнала CLK. Внутри блока хранится предыдущее состояние сигнала. Импульс на выходе Q формируется только в том случае, если текущее значение CLK равно TRUE, а предыдущее значение было FALSE. Длительность импульса составляет один цикл выполнения программы. **Пример использования:** .. code-table:: 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 **Внутренняя реализация:** Исходный код блока: .. code-table:: 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-edge: F_TRIG — Детектор заднего фронта ================================ Генерирует импульс при переходе входного сигнала из TRUE в FALSE. **Входные параметры:** - ``CLK`` (BOOL) — входной сигнал **Выходные параметры:** - ``Q`` (BOOL) — импульс длительностью один цикл **Описание работы:** Блок F_TRIG отслеживает состояние входного сигнала CLK. Внутри блока хранится предыдущее состояние сигнала. Импульс на выходе Q формируется только в том случае, если текущее значение CLK равно FALSE, а предыдущее значение было TRUE. Длительность импульса составляет один цикл выполнения программы. **Пример использования:** .. code-table:: 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 **Внутренняя реализация:** Исходный код блока: .. code-table:: 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 .. seealso:: :doc:`data_types` - для информации о типе BOOL.