SEMA - семафор

Назначение.
Функциональный блок SEMA применяется в качестве семафора для организации взаимоисключающего доступа элементов программы к определенным ресурсам (выводит состояние занятости ресурса).
Состав структурной переменной.
Переменная со структурным типом SEMA будет добавлена в локальный словарь автоматически при добавлении блока SEMA в редактор.

Описание алгоритма.
Выходной дискретный сигнал BUSY сообщает состояние занятости запрашиваемого ресурса. При BUSY=TRUE ресурс занят, при BUSY=FALSE ресурс свободен (запрашивается впервые или уже освобожден вызовом RELEASE=TRUE). По умолчанию выходное значение BUSY=FALSE.
Переключение состояния занятости осуществляется через подачу управляющих дискретных сигналов на входы CLAIM и RELEASE:
-
BUSY=TRUE - ресурс занят, для включения состояния занятости необходимо изменить входной сигнал CLAIM по переднему фронту (из логического нуля в логическую единицу). Сигнал занятости сохраняется на выходе блока до поступления сигнала освобождения RELEASE.
-
BUSY=FALSE - ресурс свободен, сигнал свободного состояния формируется на выходе блока при CLAIM=FALSE и RELEASE=TRUE, и сохраняется до поступления сигнала занятости CLAIM.
Пример синтаксиса на языке ST.
//вызов функционального блока
Block.SEMA(CLAIM, RELEASE);
//чтение состояния блока: true - занят, false - свободен
BUSY := Block.BUSY;
|
