Class: matlab.DiscreteEventSystem
Package: matlab

Create entity timer event




event=eventTimer(tag,delay) creates an event to delay an entity for a period of time. You can then schedule the timer by returning it as the output argument when implementing an event action method, such as entry.

Input Arguments

expand all

Custom tag of this entity timer event.

Time delay between current simulation time and the time that this timer event will be executed.

Output Arguments

expand all

Event that delays the entity in current event action context for a period of time.


Define Timer Event

Define a timer event.

function [entity,event] = entry(obj,storage,entity,src)        
    % Define a timer event
    % - The event is regarding the entity in current event action context
    % - The event has a custom tag 'timeout'
    % - The event will be executed 3.0 seconds later
    event = obj.eventTimer('timeout', 3.0);     

Custom Block with Timer Events

This example uses a custom entity storage block with one input, two outputs, and a storage element. An entity of type Part with TimeOut attribute enters the storage of the custom block to be processed. TimeOut determines the maximum allowed processing time of the parts. When a part enters the storage, two timer events are activated. One timer tracks the processing time of the part in the oven. When this timer expires, the entity is forwarded to output 1. Another timer acts as a fail-safe and tracks if the maximum allowed processing time is exceeded or not. When this timer expires, the process is terminated and the entity is forwarded to the output 2.

For more information, see Custom Entity Storage Block with Multiple Timer Events.

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;
    methods (Access=protected)       
        function num = getNumInputsImpl(~)
            num = 1;
        function num = getNumOutputsImpl(~)
            num = 2;
        function entityTypes = getEntityTypesImpl(obj)
            entityTypes = obj.entityType('Part');
        function [inputTypes,outputTypes] = getEntityPortsImpl(obj)
            inputTypes = {'Part'};
            outputTypes = {'Part' 'Part'};

        function [storageSpecs, I, O] = getEntityStorageImpl(obj)
            storageSpecs = obj.queueFIFO('Part', obj.Capacity);
            I = 1;
            O = [1 1];

        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];

        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);


Introduced in R2016a