Прочие функциональные блоки

Прочие стандартные функциональные блоки, не вошедшие в другие категории.

SEMA — Семафор

Используется для управления доступом к общим ресурсам в многозадачной среде.

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

  • CLAIM (BOOL) — запрос на захват семафора

  • RELEASE (BOOL) — освобождение семафора

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

  • BUSY (BOOL) — сигнал занятости (TRUE, если семафор захвачен)

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

Блок SEMA реализует простой семафор для синхронизации доступа к общим ресурсам. Когда вход CLAIM становится TRUE, семафор захватывается, и выход BUSY устанавливается в TRUE. Когда вход RELEASE становится TRUE, семафор освобождается, и выход BUSY устанавливается в FALSE. Если оба входа активны одновременно, CLAIM имеет приоритет.

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

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
        

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

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

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 — Часы реального времени

Предоставляет текущее время и дату.

Примечание

Блок RTC требует наличия аппаратных часов или поддержки со стороны платформы. Доступность блока зависит от конкретной реализации компилятора.

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

  • EN (BOOL) — включение часов

  • PDT (DATE_AND_TIME) — установка даты и времени

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

  • CDT (DATE_AND_TIME) — текущая дата и время

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

Блок RTC предоставляет доступ к часам реального времени. При активации входа EN блок начинает отслеживать текущее время. Вход PDT позволяет установить начальное значение даты и времени. Выход CDT всегда содержит текущую дату и время.

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

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
        

См. также

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