exponenta event banner

Блок хранилища настраиваемых сущностей с несколькими событиями таймера

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

Сведения об открытии модели и наблюдении за поведением пользовательского блока см. в разделе CustomEntityStorageBlockWithTwoTimerEventsExample.

Создание системного объекта дискретного события с несколькими событиями таймера

Предположим, что object™ системы с дискретным событием используется для представления объекта, который обрабатывает металлические детали с помощью печи. Время обработки изменяется в зависимости от обнаруженного металла. Для безопасности детали имеют максимально допустимое время обработки.

  • Если время обработки в печи меньше допустимого максимального времени, детали обрабатываются и выходят из печи и оборудования.

  • При наличии ошибки в обнаруженном металле время обслуживания превышает максимально допустимое время обработки, процесс останавливается, и детали извлекаются из печи для повторной маршрутизации для дальнейшей обработки.

Для представления этого поведения в этом примере используется пользовательский блок хранения объектов с одним входом, двумя выходами и элементом хранения. Объект типа Part с TimeOut входит в хранилище обрабатываемого пользовательского блока. TimeOut определяет максимально допустимое время обработки позиций. При поступлении компонента в хранилище активируются два события таймера. Один таймер отслеживает время обработки детали в печи. Когда этот таймер истекает, объект перенаправляется на выход 1. Другой таймер действует как отказоустойчивый и отслеживает, превышается ли максимально допустимое время обработки. По истечении этого таймера процесс завершается, и объект пересылается на выход. 2.

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

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

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

  1. Создайте пользовательский блок с одним входом, двумя выходами и элементом хранения. Дополнительные сведения о создании базового элемента хранения см. в разделе Реализация объекта системы дискретных событий с помощью блока системы дискретных событий 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
  2. Вызов двух таймеров с тегами '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
  3. Таймер, который истекает первым, определяет поведение объекта при пересылке.

        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

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

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

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

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

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

    2. На вкладке Действия с событиями в поле Создать действие:

      entity.TimeOut = 10;
  4. В блоках Entity Terminator и Entity Terminator1 выведите Число поступивших объектов, статистику и соедините их с областями.

  5. Увеличение времени моделирования до 100 и смоделировать модель. Обратите внимание, что объекты пересылаются на соответствующий выход на основании истечения соответствующего таймера.

См. также

| | | | | | |

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