******** Триггеры ******** Триггеры используются для хранения состояния (вкл./выкл.) с приоритетом одного из входов. .. _rs-flipflop: RS — Триггер с доминантой RESET =============================== Приоритет имеет вход RESET: если RESET = TRUE, выход всегда FALSE. **Входные параметры:** - ``SET`` (BOOL) — вход установки - ``RESET`` (BOOL) — вход сброса (приоритетный) **Выходные параметры:** - ``Q`` (BOOL) — выход триггера **Описание работы:** Блок RS реализует триггер, у которого вход RESET имеет приоритет над входом SET. Если вход RESET активен (TRUE), выход Q всегда равен FALSE, независимо от состояния входа SET. Если RESET неактивен (FALSE), то при активации SET выход Q устанавливается в TRUE. При отсутствии сигналов на обоих входах выход Q сохраняет предыдущее состояние. **Таблица истинности:** .. list-table:: :header-rows: 1 :widths: 20, 20, 20 * - SET - RESET - Q (новое) * - FALSE - FALSE - Без изменений * - FALSE - TRUE - FALSE (приоритет) * - TRUE - FALSE - TRUE * - TRUE - TRUE - FALSE (приоритет) **Пример использования:** .. code-table:: PROGRAM Example VAR rs1 : RS; set_signal : BOOL; reset_signal : BOOL; output_state : BOOL; END_VAR rs1(SET := set_signal, RESET := reset_signal); output_state := rs1.Q; END_PROGRAM **Внутренняя реализация:** Исходный код блока: .. code-table:: FUNCTION_BLOCK RS VAR_INPUT SET : BOOL; RESET : BOOL; END_VAR VAR_OUTPUT Q : BOOL; END_VAR VAR SQ : BOOL; END_VAR SQ := NOT RESET AND (SQ OR SET); Q := SQ; END_FUNCTION_BLOCK .. _sr-flipflop: SR — Триггер с доминантой SET ============================= Приоритет имеет вход SET: если SET = TRUE, выход всегда TRUE. **Входные параметры:** - ``SET`` (BOOL) — вход установки (приоритетный) - ``RESET`` (BOOL) — вход сброса **Выходные параметры:** - ``Q`` (BOOL) — выход триггера **Описание работы:** Блок SR реализует триггер, у которого вход SET имеет приоритет над входом RESET. Если вход SET активен (TRUE), выход Q всегда равен TRUE, независимо от состояния входа RESET. Если SET неактивен (FALSE), то при активации RESET выход Q сбрасывается в FALSE. При отсутствии сигналов на обоих входах выход Q сохраняет предыдущее состояние. **Таблица истинности:** .. list-table:: :header-rows: 1 :widths: 20, 20, 20 * - SET - RESET - Q (новое) * - FALSE - FALSE - Без изменений * - FALSE - TRUE - FALSE * - TRUE - FALSE - TRUE * - TRUE - TRUE - TRUE (приоритет) **Пример использования:** .. code-table:: PROGRAM Example VAR sr1 : SR; set_signal : BOOL; reset_signal : BOOL; output_state : BOOL; END_VAR sr1(SET := set_signal, RESET := reset_signal); output_state := sr1.Q; END_PROGRAM **Внутренняя реализация:** Исходный код блока: .. code-table:: FUNCTION_BLOCK SR VAR_INPUT SET : BOOL; RESET : BOOL; END_VAR VAR_OUTPUT Q : BOOL; END_VAR VAR SQ : BOOL; END_VAR SQ := (NOT RESET AND SQ) OR SET; Q := SQ; END_FUNCTION_BLOCK .. seealso:: :doc:`data_types` - для информации о типе BOOL.