В этом примере показано, как использовать действия события блока Entity Queue, блок Simulink Function и блок Entity Gate для моделирования системы хранения бутылок с ограниченной емкостью.
Этот пример использует блоки Сущности Generator, Сущность Queue, Сущности Server и Сущности Terminator, чтобы смоделировать линию сборки для системы хранения бутылок с ограниченной емкостью по весу. Блок Entity Generator представляет поступление бутылок. Каждая бутылка имеет gallons атрибут, значение которого варьируется от 0 и 10, для указания количества жидкости, которую она несет. Блок Entity Queue представляет хранилище с ограниченной емкостью. Блок Entity Server представляет обработку бутылок до того, как они покинут объект.
Система управления хранением жидкости развертывается с помощью блока Simulink Function и блока Entity Gate, чтобы позволить бутылкам входить в систему хранения, пока общее хранимое количество галлона меньше 50 галлонов. Это количество соответствует максимально допустимому весу памяти. Принято, что вес бутылки незначителен. Блок Entity Gate имеет два состояния: открытое и закрытое. Блок Simulink Function контролирует количество жидкости в хранилище и управляет состоянием блока Entity Gate.

Цель построения системы управления хранением жидкости состоит в том, чтобы позволить бутылкам заходить в хранилище очереди, пока общее количество галлона для хранения не превышает 50 галлонов.
Чтобы создать систему управления хранением жидкости:
Блок Simulink Function используется с сигнатурой функции check_capacity(value,direction) для управления блоком Entity Gate. Когда блок отправляет сообщение со значением 1откроется окно Enable Gate, в котором будут разрешены контейнеры в хранилище. В противном случае, когда блок отправляет сообщение со значением 0, ворота остаются закрытыми.
В блоке Entity Queue, в полях действие входа и Exit action, check_capacity(entity.gallons,1) и check_capacity(entity.gallons,-1) отправьте значение галлона контейнера в блок Simulink Function. Второй вход check_capacity(~,~) функция принимает значение 1 когда сущность входит в очередь и -1 когда сущность выходит из очереди.
В блоке Simulink Function блок MATLAB Function создает логику, чтобы управлять ключами. Блок принимает три входов.
v - значение gallon атрибут для каждой сущности, который входит или выходит из блока.
direction принимает значение 1 или -1 чтобы указать, входит ли сущность в блок или выходит из него.
myLimit - емкость емкости для жидкости в галлонах.

Блок MATLAB Function имеет два выхода.
y принимает значение 1 открыть ворота, когда достаточно хранилища, и 0 в противном случае.
t - количество галлонов жидкости в хранилище.
Блок MATLAB Function содержит следующую логику, чтобы открыть и закрыть ворота.
function [y,t] = fcn(v,d,myLimit) % Initialize the persistent variable total that represents the total % number of gallons of liquid in the storage. persistent total % Initialize the variable total. if isempty(total) total = 0; end % Add or subtract the gallons carried by the entering or exiting % entity. d is 1 if the entitiy enters the storage and -1 otherwise. total = total + d*v; % Update total number of gallons in the storage. t = total; % Compare the total value with myLimit. Containers can have maximum 10 % gallons of liquid. if total > (myLimit-10) % Keep the gate closed. y = 0; else % Open the gate to allow containers. y = 1; end end
Симулируйте модель. Наблюдайте количество контейнеров в жидком хранилище.

Также наблюдайте количество жидкости в хранилище на протяжении всей симуляции, которое не превышает 50 галлонов.
