Этот пример показывает, как использовать дискретную систему событий 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). Параметр Capacity
объекта задает мощность сервера.
Метод getEntityStorageImpl()
также задает связи между портами и устройством хранения данных, I
и O
.
I
возвращаемого значения является вектором элементов i = 1
... n, где его длина n равна количеству входных портов.
В этом примере n
является 1
, потому что только один входной порт объявляется.
i th элемент указывает на индекс устройства хранения данных сущности, с которым соединяется i th входной порт.
В этом примере входной порт 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
Запись 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