Создайте пользовательский блок системы хранения сущности с событием итерации

Дискретная система событий object™can содержит несколько типов событий для управления сущностями, действующими на устройства хранения данных и управление ресурсами. Когда событие подлежит выполнению, дискретная система событий может ответить на то событие путем вызова действий события. Цель этого примера состоит в том, чтобы показать, как работать с событиями и действиями события при создании авторского блока. Чтобы видеть список обеспеченного события и действий события, смотрите, Настраивают Поведение Дискретной Системы событий Используя Действия События и События.

Чтобы открыть модель и наблюдать поведение авторского блока, смотрите CustomEntityStorageBlockWithIterationEventExample.

Создайте объект Дискретной Системы событий

В этом примере авторский блок позволяет сущностям вводить свой запоминающий элемент через его входной порт. Запоминающий элемент сортирует сущности на основе их атрибута Diameter в порядке возрастания. Каждая запись сущности в устройство хранения данных блока вызывает событие итерации, чтобы отобразить диаметр и позицию каждой сущности в устройстве хранения данных.

Запоминающий элемент позволяет вам задавать свою возможность сохранить и отсортировать сущности, во время которых к любой сущности можно получить доступ и управлять. В этом примере устройстве хранения данных со способностью 5 используется, чтобы сохранить и отсортировать автомобильные колеса на основе их атрибута Diameter в порядке по возрастанию. Когда новое колесо вводит устройство хранения данных, событие eventIterate итерации вызывается, который инициировал действие события итерации iterate, чтобы отобразить положения колеса в устройстве хранения данных и их диаметре.

 См. код, чтобы сгенерировать пользовательский блок системы хранения с событием итерации

Задайте поведение авторского блока

  1. Задайте устройство хранения данных со способностью obj.Capacity, который колеса видов, базирующиеся в их приоритетном значении. Приоритетные значения получены от атрибутов Diameter сущностей и сортируются в порядке возрастания.

        function [storageSpecs, I, O] = getEntityStorageImpl(obj)
                storageSpecs = obj.queuePriority('Wheel',obj.Capacity, 'Diameter','ascending');
                I = 1;
                O = [];        
        end
  2. Запись колеса в устройство хранения данных вызывает выполнить итерации событие.

        function [entity, event] = WheelEntry(obj,storage,entity, source)
                % Entity entry invokes an iterate event.      
                event = obj.eventIterate(1, '');
        end

    Входной параметр 1 является индексом устройства хранения данных для выполнить итерации события и '', является именем тега.

  3. Выполнить итерации событие вызывает выполнить итерации действие события.

        % 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 колеса, текущее положение и диаметр, который используется в качестве сортирующий атрибут.

Реализуйте авторский блок

  1. Сохраните файл .m как CustomEntityStorageBlockIteration. Соедините Системный объект с моделью SimEvents® при помощи блока MATLAB Discrete-Event System. Для получения дополнительной информации о соединении, смотрите, Создают Авторские блоки Используя Блок Дискретной Системы событий MATLAB.

  2. Создайте модель SimEvents включая блок MATLAB Discrete-Event System и блок Entity Generator.

  3. В блоке Entity Generator:

    1. Во вкладке Entity type, набор Attribute Name как Diameter.

      Атрибут Diameter используется к сущностям вида в блоке MATLAB Discrete-Event System.

    2. Во вкладке Event actions, в поле Generate action, добавляет этот код, чтобы рандомизировать размер входящих сущностей.

      entity.Diameter = randi([1 10]);
    3. Во вкладке Statistics, вывод статистическая величина Number of entities departed, d и подключение к осциллографу.

  4. Соедините блоки как показано и моделируйте модель.

    1. Заметьте, что блок Entity Generator генерирует сущности 5, поскольку способностью блока системы хранения является 5.

    2. Диагностическое Средство просмотра отображает событие итерации для каждой записи колеса в устройство хранения данных. Каждая итерация отображает ID, положение и диаметр колес. Наблюдайте, как каждая запись колеса изменяет порядок сохраненных колес. В последней итерации сущности 5 в устройстве хранения данных сортируются в порядке возрастания.

Смотрите также

| | | | | | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте