Дискретная система событий позволяет реализацию отличных типов событий для управления сущностями и устройствами хранения данных. Иногда, желаемое поведение включает больше чем одно событие, действующее на то же устройство хранения данных или сущность. В этом примере показано, как обработать несколько событий, действующих на ту же цель в среде дискретной системы событий. В этом примере пользовательский блок системы хранения сущности сгенерирован, чтобы реализовать tag
, который является одним из идентификаторов, когда несколько событий таймера действуют на ту же сущность. Чтобы видеть список идентификаторов события, смотрите, Настраивают Поведение Дискретной Системы событий Используя Действия События и События.
Чтобы открыть модель и наблюдать поведение пользовательского блока, смотрите CustomEntityStorageBlockWithTwoTimerEventsExample
.
Предположим, что дискретная система событий object™ используется, чтобы представлять средство что металлические детали процессов с помощью духовки. Время вычислений варьируется на основе обнаруженного металла. Для безопасности части имеют максимальное позволенное время вычислений.
Если время вычислений духовки меньше позволенного максимального времени, части обрабатываются и отбывают из духовки и средства.
Если существует ошибка в обнаруженном металле, время обслуживания превышает максимальное позволенное время вычислений, остановки процесса и части вынуты из духовки, которая будет перенаправлена для последующей обработки.
Чтобы представлять это поведение, этот пример использует пользовательский блок системы хранения сущности с одним входом, двумя выходными параметрами и запоминающим элементом. Сущность типа Part
с TimeOut
атрибут вводит устройство хранения данных пользовательского блока, который будет обработан. TimeOut
определяет максимальное позволенное время вычислений частей. Когда часть вводит устройство хранения данных, два события таймера активируются. Один таймер отслеживает время вычислений части в духовке. Когда этот таймер истекает, сущность передается выходу 1
. Другой таймер действует как отказоустойчивое и дорожки, если максимальное позволенное время вычислений превышено или нет. Когда этот таймер истекает, процесс отключен, и сущность передается выходу 2
.
Этот пример, который генерирует пользовательский блок и однозначно определяет эти два события таймера предназначение на той же сущности с помощью пользовательских тегов.
См. код, чтобы сгенерировать пользовательский блок системы хранения с Событиями таймера
Сгенерируйте пользовательский блок с одним входом, двумя выходными параметрами и запоминающим элементом. Для получения дополнительной информации о создании основного запоминающего элемента, смотрите Реализацию Объект Дискретной Системы событий с Блоком Дискретной Системы событий MATLAB.
function num = getNumInputsImpl(~) num = 1; end function num = getNumOutputsImpl(~) num = 2; end function entityTypes = getEntityTypesImpl(obj) entityTypes = obj.entityType('Part'); end function [inputTypes,outputTypes] = getEntityPortsImpl(obj) inputTypes = {'Part'}; outputTypes = {'Part' 'Part'}; end function [storageSpecs, I, O] = getEntityStorageImpl(obj) storageSpecs = obj.queueFIFO('entity1', obj.Capacity); I = 1; O = [1 1]; end
Вызовите два таймера с тегами 'TimeOut'
и 'ProcessComplete'
когда сущность вводит устройство хранения данных.
function [entity,event] = PartEntry(obj,storage,entity,source) % Specify event actions when entity enters storage. ProcessingTime = randi([1 15]); % The TimeOut attribute specifies the expiration time of the timer with tag TimeOut event1 = obj.eventTimer('TimeOut', entity.data.TimeOut); % The expiration time of the timer ProcessComplete is a random integer between % 1 and 15. event2 = obj.eventTimer('ProcessComplete', ProcessingTime); event = [event1 event2]; end
Таймер, который истекает первое, определяет сущность прямое поведение.
function [entity, event] = timer(obj,storage,entity,tag) % Specify event actions for when scheduled timer completes. event = obj.initEventArray; switch tag case 'ProcessComplete' % If ProcessComplete expires first, entities are forwarded to output 1. event = obj.eventForward('output', 1, 0); case 'TimeOut' % If TimeOut expires first, entities are forwarded to output 2. event = obj.eventForward('output', 2, 0); end end
Сохраните .m
файл как CustomEntityStorageBlockTimer
. Соедините Системный объект с моделью SimEvents® при помощи блока MATLAB Discrete-Event System. Для получения дополнительной информации о соединении, смотрите, Создают Пользовательские блоки Используя Блок Дискретной Системы событий MATLAB.
Создайте модель SimEvents включая блок MATLAB Discrete-Event System, блок Entity Generator, два блока Entity Terminator. Соедините блоки как показано в модели.
В блоке Entity Generator:
Во вкладке Entity type, набор Attribute Name как TimeOut
.
Во вкладке Event actions, в поле Generate action:
entity.TimeOut = 10;
В Entity Terminator и блоках Entity Terminator1, выводит статистическая величина Number of entities arrived, a и соединять их с осциллографами.
Увеличьте время симуляции до 100
и симулируйте модель. Заметьте, что сущности передаются соответствующему выходу на основе соответствующего истечения таймера.
entry
| eventTimer
| getEntityPortsImpl
| getEntityStorageImpl
| getEntityTypesImpl
| matlab.DiscreteEventSystem
| matlab.System
| timer