Обнаружение фронтов
Функциональные блоки обнаружения фронтов используются для генерации коротких импульсов при изменении состояния входного сигнала.
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.