generate

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

Действие события при создании сущности

Синтаксис

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

Описание

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

[entity,events,out1,...]=generate(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] = generate(obj,storage,entity,tag)
    % Specify event actions when entity generated in storage.
    % - For entitiy generation event of tag 'Adam', initialize the
    %   entity so that its attribute 'gender' has value '0', and its
    %   priority is '200'.
    % - For entity generation event of tag 'Eve', initialize the
    %   entity so that its attribute 'gender' has value '1', and its
    %   priority is '100'.
    % - An event is returned to forward the entity to storage
    %   element 2 with a time delay of 0.6.
    switch tag
        case 'Adam'
            entity.data.gender = 0;
            entity.sys.priority = 200;
        case 'Eve'
            entity.data.gender = 1;
            entity.sys.priority = 100;
    end
    events = obj.eventForward('storage',2,0.6);
end

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

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

Для получения дополнительной информации смотрите Пользовательский блок Генератора сущностей с входным сигналом и выходным сигналом.

classdef CustomEntityStorageBlockGeneration < matlab.DiscreteEventSystem...
                                            & matlab.system.mixin.Propagates
    % A custom entity generator block.
    
    % Nontunable properties 
    properties (Nontunable)
        % Generation period
        period = 1;
    end

    properties(DiscreteState)
        % Entity priority
        priority;
        % Entity value
        value;
    end

    % Discrete-event algorithms
    methods
        function [events, out1] = setupEvents(obj)
            % Set up entity generation events at simulation start.
            events = obj.eventGenerate(1,'mygen',obj.period,obj.priority);
            % Set up the initial value of the output signal.
            out1 = 10;
        end

        function [entity,events,out1] = generate(obj,storage,entity,tag,in1)            
            % Specify event actions when entity is generated in storage.            
            entity.data = obj.value;
            % The priority value is assigned from the input signal.
            obj.priority = in1;
            % Output signal is the assigned priority value.
            out1 = obj.priority;
            events = [obj.eventForward('output',1,0) ...
                      obj.eventGenerate(1,'mygen',obj.period,obj.priority)];
        end
    end

    methods(Access = protected)
        
        function entityTypes = getEntityTypesImpl(obj)
            entityTypes = obj.entityType('Material');
        end
        
        function [inputTypes,outputTypes] = getEntityPortsImpl(obj)
            % Specify entity input and output ports. Return entity types at
            % a port as strings in a cell array. Use empty string to
            % indicate a data port.
            inputTypes = {''};
            outputTypes = {'Material',''};
        end

        function resetImpl(obj)
            % Initialize / reset discrete-state properties.
            obj.priority = 10;
            obj.value = 1:12;            
        end
        
        function [storageSpecs, I, O] = getEntityStorageImpl(obj)
            storageSpecs = obj.queueFIFO('Material', 1);
            I = 0;
            O = [1 0];
        end   

        function num = getNumInputsImpl(obj)
            % Define total number of inputs for system with optional
            % inputs.
            num = 1;
        end
        
        function num = getNumOutputsImpl(~)
            % Define total number of outputs.
            num = 2;
        end  
        function [out1 out2] = getOutputSizeImpl(obj)
            % Return size for each output port.
            out1 = [1 12];
            out2 = 1;
        end

        function [out1 out2] = getOutputDataTypeImpl(obj)
            % Return data type for each output port.
            out1 = "double";
            out2 = "double";
        end

        function [out1 out2] = isOutputComplexImpl(obj)
            % Return true for each output port with complex data.
            out1 = false;
            out2 = false;
        end

        function [sz,dt,cp] = getDiscreteStateSpecificationImpl(obj,name)
            % Return size, data type, and complexity of discrete-state
            % specified in name.
            switch name
                case 'priority'
                    sz = [1 1];
                case 'value'
                    sz = [1 12];
            end
            dt = "double";
            cp = false;           
        end
    end
end
Введенный в R2016a