Дискретная система событий object™ может содержать несколько типов событий для управления сущностями, действующими на устройства хранения данных и управление ресурсами. Когда событие подлежит выполнению, дискретная система событий может ответить на то событие путем вызова действий события. Цель этого примера состоит в том, чтобы показать, как работать с событиями и действиями события при создании пользовательского блока. Чтобы видеть список обеспеченного события и действий события, смотрите, Настраивают Поведение Дискретной Системы событий Используя Действия События и События.
Чтобы открыть модель и наблюдать поведение пользовательского блока, смотрите CustomEntityStorageBlockWithIterationEventExample
.
В этом примере пользовательский блок позволяет сущностям вводить свой запоминающий элемент через его входной порт. Запоминающий элемент сортирует сущности на основе их Diameter
атрибут в порядке возрастания. Каждая запись сущности в устройство хранения данных блока вызывает событие итерации, чтобы отобразить диаметр и позицию каждой сущности в устройстве хранения данных.
Запоминающий элемент позволяет вам задавать свою возможность сохранить и отсортировать сущности, во время которых к любой сущности можно получить доступ и управлять. В этом примере, устройстве хранения данных со способностью 5
используется, чтобы сохранить и отсортировать автомобильные колеса на основе их Diameter
припишите в порядке по возрастанию. Когда новое колесо вводит устройство хранения данных, событие eventIterate
итерации вызывается, который инициировал действие события итерации
iterate
отобразить положения колеса в устройстве хранения данных и их диаметре.
См. код, чтобы сгенерировать пользовательский блок системы хранения с событием итерации
Задайте устройство хранения данных со способностью obj.Capacity
, какие колеса видов, базирующиеся в их приоритетном значении. Приоритетные значения получены от Diameter
атрибуты сущностей и сортируются в порядке возрастания.
function [storageSpecs, I, O] = getEntityStorageImpl(obj) storageSpecs = obj.queuePriority('Wheel',obj.Capacity, 'Diameter','ascending'); I = 1; O = []; end
Запись колеса в устройство хранения данных вызывает выполнить итерации событие.
function [entity, event] = WheelEntry(obj,storage,entity, source) % Entity entry invokes an iterate event. event = obj.eventIterate(1, ''); end
Входной параметр 1
индекс устройства хранения данных для выполнить итерации события и ''
имя тега.
Выполнить итерации событие вызывает выполнить итерации действие события.
% The itarate event action function [entity,event,next] = WheelIterate(obj,storage,entity,tag,cur) % Display wheel id, position in the storage, and diameter. coder.extrinsic('fprintf'); fprintf('Wheel id %d, Current position %d, Diameter %d\n', ... entity.sys.id, cur.position, entity.data.Diameter); if cur.size == cur.position fprintf('End of Iteration \n') end next = true; event=[]; end
В коде, coder.extrinsic('fprintf')
объявляет функциональный fprintf()
как внешняя функция для генерации кода. Для каждой итерации код отображает новый ID колеса, текущее положение и диаметр, который используется в качестве сортирующий атрибут.
Сохраните .m
файл как CustomEntityStorageBlockIteration
. Соедините Системный объект с моделью SimEvents® при помощи блока MATLAB Discrete-Event System. Для получения дополнительной информации о соединении, смотрите, Создают Пользовательские блоки Используя Блок Дискретной Системы событий MATLAB.
Создайте модель SimEvents включая блок MATLAB Discrete-Event System и блок Entity Generator.
В блоке Entity Generator:
Во вкладке Entity type, набор Attribute Name как Diameter
.
Атрибут Diameter
используется к сущностям вида в блоке MATLAB Discrete-Event System.
Во вкладке Event actions, в поле Generate action, добавляет этот код, чтобы рандомизировать размер входящих сущностей.
entity.Diameter = randi([1 10]);
Во вкладке Statistics, выход статистическая величина Number of entities departed, d и подключение к осциллографу.
Соедините блоки как показано и симулируйте модель.
Заметьте, что блок Entity Generator генерирует 5
сущностями начиная со способности блока системы хранения является 5
.
Диагностическое Средство просмотра отображает событие итерации для каждой записи колеса в устройство хранения данных. Каждая итерация отображает ID, положение и диаметр колес. Наблюдайте, как каждая запись колеса изменяет порядок сохраненных колес. В последней итерации, 5
сущности в устройстве хранения данных сортируются в порядке возрастания.
entry
| eventIterate
| getEntityPortsImpl
| getEntityStorageImpl
| getEntityTypesImpl
| iterate
| matlab.DiscreteEventSystem
| matlab.System