В этом примере показано, как использовать методы System object™ с дискретными событиями для создания пользовательского блока хранения сущностей, который имеет один входной порт, один выходной порт и один элемент хранения. Дискретный Системный объект события является экземпляром matlab.DiscreteEventSystem класс, который позволяет использовать методы реализации и обслуживания, предоставляемые этим классом. Затем вы используете блок MATLAB Discrete-Event System, чтобы интегрировать системный объект в SimEvents® модель.
Пользовательский блок MATLAB Discrete-Event System принимает сущность из его входного порта и пересылает его к своему выходному порту с заданной задержкой. Рисунок визуализирует блок с помощью среды системы дискретных событий.
Чтобы открыть модель и наблюдать за поведением пользовательского блока, смотрите CustomEntityStorageBlockExample.

Создайте новый скрипт и унаследовайте matlab.DiscreteEventSystem класс.
classdef CustomEntityStorageBlock < matlab.DiscreteEventSystemДобавьте пользовательское описание к блоку.
% A custom entity storage block with one input, one output, and one storage.Объявите два неотключаемых параметра Capacity и Delay для представления емкости хранилища и задержки удаления сущности из хранилища.
% Nontunable properties properties (Nontunable) % Capacity Capacity = 1; % Delay Delay = 4; end
Параметры захватывают свойства блока.
Настраиваемые параметры могут быть настроены во время исполнения.
Ненастраиваемые параметры не могут быть настроены во время выполнения.
Задайте эти методы и установите доступ к защищенному.
methods (Access = protected)
% Specify the number of input ports.
function num = getNumInputsImpl(~)
num = 1;
end
% Specify the number of output ports.
function num = getNumOutputsImpl(~)
num = 1;
end
% Specify a new entity type Car.
function entityTypes = getEntityTypesImpl(obj)
entityTypes = obj.entityType('Car');
end
% Specify Car as the entity type that is used in
% input and output ports.
function [inputTypes,outputTypes] = getEntityPortsImpl(obj)
inputTypes = {'Car'};
outputTypes = {'Car'};
end
% Specify the storage type, capacity, and connection to
% the input and output ports.
function [storageSpecs, I, O] = getEntityStorageImpl(obj)
storageSpecs = obj.queueFIFO('Car', obj.Capacity);
% First element of I indicates the entity storage index 1 that is
% connected to input 1.
I = 1;
% First element of O indicates the entity storage index 1 that is
% connected to output 1.
O = 1;
end
endТолько одно хранилище сортирует автомобили первым (FIFO) способом. The Capacity параметр объекта определяет емкость сервера.
Метод getEntityStorageImpl() также задает соединения между портами и хранилищем, I и O.
Значение возврата I является вектором элементов i = 1,... n, где его длина n равна количеству входных портов.
В этом примере n является 1 потому что объявлен только один входной порт.
The ith элемент указывает индекс хранилища сущностей, который ith входной порт соединяется с.
В этом примере входной порт 1 соединяется с системой хранения данных 1.
Если вход порт является сигнальным портом, соответствующий элемент 0.
Точно так же возвращается значение O используется для определения соединений между хранилищем и портом выхода.
Задайте eventForward событие для пересылки сущности типа Car на выход при входе в хранилище.
function [entity,event] = CarEntry(obj,storage,entity,source) % Specify event actions when entity enters storage. event = obj.eventForward('output', 1, obj.Delay); end
A Car вход в хранилище вызывает действие события и событие obj.eventForward вперед Car в выход с индексом 1 с задержкой, заданной obj.Delay.
Можно использовать входные параметры этого метода для создания пользовательского поведения. Аргумент obj - Системный объект дискретного события, унаследованная методом. Аргумент storage - индекс элемента хранения, в который входит сущность. Аргумент entity является сущностью, которая входит в хранилище и имеет два поля, entity.sys и entity.data. Аргумент source - исходное местоположение сущности, которая входит в хранилище.
Примечание
Вы не можете управлять данными сущности в рамках выходного действия.
Назовите свои Системные объекты дискретного события CustomEntityStorageBlock и сохраните его как CustomEntityStorageBlock.m.
Пользовательский блок представляет собой упрощенную АЗС, которая может обслуживать по одному автомобилю за раз. Машина прибывает на заправку и обслуживается в течение 4 минут перед вылетом со станции.
Смотрите код для генерации пользовательского блока хранения сущностей
Создайте модель с помощью блока Entity Generator, MATLAB Discrete-Event System блока и блока Entity Terminator.

Откройте блок MATLAB Discrete-Event System и установите Discrete-event System object name равным CustomEntityStorageBlock.

Дважды кликните блок MATLAB Discrete-Event System, чтобы наблюдать его емкость и задержку.

Выведите статистику Number of entities arrived, a из блока Entity Terminator и соедините ее с возможностями
Увеличьте время симуляции, чтобы 20 и запустите симуляцию. Наблюдайте сущности, поступающие в блок Entity Terminator с задержкой 4.

entry | getEntityPortsImpl | getEntityStorageImpl | getEntityTypesImpl | matlab.DiscreteEventSystem | matlab.System