exponenta event banner

таймер

Класс: matlab. DiscreteEventSystem
Пакет: matlab

Действие события по завершении таймера

Синтаксис

[entity,events]=timer(obj,storage,entity,tag)
[entity,events,out1,...]=timer(obj,storage,entity,tag,in1,...)

Описание

[entity,events]=timer(obj,storage,entity,tag) указывает действия с событиями при завершении запланированного таймера.

[entity,events,out1,...]=timer(obj,storage,entity,tag,in1,...) определяет такие действия события, когда блок имеет один или более входных сигнальных портов и/или выходных сигнальных портов.

Входные аргументы

развернуть все

Объект системы дискретных событий.

Индекс элемента хранения.

Объект для события таймера. Сущность имеет следующие поля:

  • sys (MATLAB structure) - Имеет следующие поля:

    • id (double) - Идентификатор объекта

    • priority (double) - Приоритет объекта

  • data - Данные объекта

Тег исполняемого события таймера.

Любые входные данные объекта. Эти входные аргументы существуют только в том случае, если объект имеет входные данные.

Выходные аргументы

развернуть все

Сущность с измененным значением.

События, запланированные после возврата метода. Использовать matlab.DiscreteEventSystem методы класса для создания событий. Каждое событие имеет следующие поля:

  • type (character vector) - Тип события

  • delay (double) - Задержка перед событием

  • priority (double) - Приоритет события

  • Storage (double) - Индекс элемента хранения

  • tag (character vector) - Тег события

  • location (MATLAB structure) - исходное или конечное расположение объекта;

Выходные данные объекта. Необходимо указать эти выходные аргументы, если объект имеет выходные данные.

Примеры

Действие события по завершении таймера

Пересылка объекта по завершении таймера для объекта системы с дискретными событиями.

function [entity,events] = timer(obj,storage,entity,tag)
    % Check which timer of the entity has expired, and forward the
    % entity to the next location accordingly.
    switch tag
        case 'ServiceComplete'
            entity.done = 1;
            events = obj.eventForward('output', 1, 0);                    
        case 'Timeout'
            entity.done = 0; 
            events = obj.eventForward('storage', 2, 0);
    end
end

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

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

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

classdef CustomEntityStorageBlockTimer < matlab.DiscreteEventSystem
                        
    % A custom entity storage block with one input port, two output ports, and one storage. 
 
    % Nontunable properties 
    properties (Nontunable)
    % Capacity
        Capacity = 1;
    end
    
    methods (Access=protected)       
 
        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('Part', obj.Capacity);
            I = 1;
            O = [1 1];
        end
          
    end
  
    
   methods

        function [entity,event] = PartEntry(obj,storage,entity,source)
            % Specify event actions when entity enters storage.
             ProcessingTime=randi([1 15]);
             event1 = obj.eventTimer('TimeOut', entity.data.TimeOut);
             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'
                    event = obj.eventForward('output', 1, 0);
                case 'TimeOut'
                    event = obj.eventForward('output', 2, 0);
            end

        end
            
    end
    
end
Представлен в R2016a