В этом примере показано, как использовать методы discrete-event System object™ для создания пользовательского блока хранения объектов, который имеет один входной порт, один выходной порт и один элемент хранения. Объект дискретного события System представляет собой экземпляр matlab.DiscreteEventSystem класс, который позволяет использовать методы реализации и сервиса, предоставляемые этим классом. Затем используется блок Система дискретных событий MATLAB для интеграции объекта System в модель SimEvents ®.
Пользовательский блок системы дискретных событий MATLAB принимает объект из своего входного порта и направляет его в свой выходной порт с заданной задержкой. На рисунке показан блок с использованием структуры системы дискретных событий.
Сведения об открытии модели и наблюдении за поведением пользовательского блока см. в разделе 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). Capacity параметр объекта определяет емкость сервера.
Метод getEntityStorageImpl() также определяет соединения между портами и хранилищем, I и O.
Возвращаемое значение I является вектором элементов i = 1,... n, где его длина n равна числу входных портов.
В этом примере: n является 1 потому что объявлен только один входной порт.
i-й элемент указывает индекс хранилища объектов, к которому подключен i-й входной порт.
В этом примере порт ввода 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 является исходным расположением сущности, входящей в хранилище.
Примечание
Нельзя манипулировать данными объекта в рамках действия выхода.
Присвойте имя объекту System дискретного события CustomEntityStorageBlock и сохраните его как CustomEntityStorageBlock.m.
Заказной блок представляет собой упрощенную заправку, которая может обслуживать по одному автомобилю за раз. Автомобиль прибывает на заправку и обслуживается в течение 4 минут перед отъездом на станцию.
См. раздел Код для создания блока хранения настраиваемых сущностей
Создайте модель с помощью блока генератора объектов, блока системы дискретных событий MATLAB и блока терминатора объектов.

Откройте блок системы дискретных событий MATLAB и установите имя объекта системы дискретных событий в значение CustomEntityStorageBlock.

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

Выведите число полученных объектов, статистику из блока терминатора объектов и подключите его к области
Увеличение времени моделирования до 20 и запустите моделирование. Наблюдение за объектами, поступающими в блок терминатора объектов с задержкой 4.

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