exponenta event banner

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

Системный object™ с дискретными событиями может содержать несколько типов событий для манипулирования объектами, работы с хранилищами и управления ресурсами. Когда событие должно быть выполнено, система дискретных событий может реагировать на это событие, вызывая действия события. Цель этого примера - показать, как работать с событиями и действиями с событиями при создании пользовательского блока. Список предоставленных действий с событиями см. в разделе Настройка поведения системы с дискретными событиями с использованием событий и действий с событиями.

Сведения об открытии модели и наблюдении за поведением пользовательского блока см. в разделе 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. Событие iterate вызывает действие события iterate.

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

Внедрение пользовательского блока

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

  2. Создайте модель SimEvents, включающую блок системы дискретных событий MATLAB и блок генератора объектов.

  3. В блоке «Генератор объектов»:

    1. На вкладке Тип объекта (Entity type) задайте для параметра Наименование атрибута (Attribute Name) значение Diameter.

      Признак Diameter используется для сортировки объектов в блоке системы дискретных событий MATLAB.

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

      entity.Diameter = randi([1 10]);
    3. На вкладке Статистика (Statistics) выведите значение Количество отклоненных объектов (Number of entities leaded), d statistic (Статистика) и соединитесь с областью.

  4. Подключите блоки, как показано на рисунке, и смоделируйте модель.

    1. Обратите внимание, что блок «Генератор объектов» генерирует 5 сущности, поскольку емкость блока хранения равна 5.

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

См. также

| | | | | | |

Связанные темы