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