В этом примере показано, как использовать методы 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