Прочие функциональные блоки
Прочие стандартные функциональные блоки, не вошедшие в другие категории.
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.