*************************** Прочие функциональные блоки *************************** Прочие стандартные функциональные блоки, не вошедшие в другие категории. SEMA — Семафор ============== Используется для управления доступом к общим ресурсам в многозадачной среде. **Входные параметры:** - ``CLAIM`` (BOOL) — запрос на захват семафора - ``RELEASE`` (BOOL) — освобождение семафора **Выходные параметры:** - ``BUSY`` (BOOL) — сигнал занятости (TRUE, если семафор захвачен) **Описание работы:** Блок SEMA реализует простой семафор для синхронизации доступа к общим ресурсам. Когда вход CLAIM становится TRUE, семафор захватывается, и выход BUSY устанавливается в TRUE. Когда вход RELEASE становится TRUE, семафор освобождается, и выход BUSY устанавливается в FALSE. Если оба входа активны одновременно, CLAIM имеет приоритет. **Пример использования:** .. code-table:: PROGRAM Example VAR sema1 : SEMA; request_access : BOOL; release_access : BOOL; shared_resource : INT; END_VAR sema1(CLAIM := request_access, RELEASE := release_access); IF NOT sema1.BUSY THEN request_access := TRUE; shared_resource := shared_resource + 1; request_access := FALSE; release_access := TRUE; END_IF; END_PROGRAM **Внутренняя реализация:** Исходный код блока: .. code-table:: FUNCTION_BLOCK SEMA VAR_INPUT CLAIM : BOOL; RELEASE : BOOL; END_VAR VAR_OUTPUT BUSY : BOOL; END_VAR VAR X : BOOL := FALSE; END_VAR BUSY := X; IF CLAIM THEN X := TRUE; ELSIF RELEASE THEN BUSY := FALSE; X := FALSE; END_IF; END_FUNCTION_BLOCK RTC — Часы реального времени ============================ Предоставляет текущее время и дату. .. note:: Блок RTC требует наличия аппаратных часов или поддержки со стороны платформы. Доступность блока зависит от конкретной реализации компилятора. **Входные параметры:** - ``EN`` (BOOL) — включение часов - ``PDT`` (DATE_AND_TIME) — установка даты и времени **Выходные параметры:** - ``CDT`` (DATE_AND_TIME) — текущая дата и время **Описание работы:** Блок RTC предоставляет доступ к часам реального времени. При активации входа EN блок начинает отслеживать текущее время. Вход PDT позволяет установить начальное значение даты и времени. Выход CDT всегда содержит текущую дату и время. **Пример использования:** .. code-table:: PROGRAM Example VAR rtc1 : RTC; enable_clock : BOOL := TRUE; set_time : DATE_AND_TIME := DT#2026-01-01-00:00:00; current_time : DATE_AND_TIME; END_VAR rtc1(EN := enable_clock, PDT := set_time); current_time := rtc1.CDT; END_PROGRAM .. seealso:: :doc:`data_types` - для информации о типах TIME, DATE, DT и BOOL.