generate

Класс: mATLAB.
Пакет: 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,...) задает такие действия события объекта, когда блок имеет один или несколько портов входного сигнала и/или выходных портов сигнала.

Входные параметры

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

Объект Discrete-event System.

Индекс запоминающего элемента.

Сущность, чтобы создать внутренний запоминающий элемент. Сущность имеет эти поля:

  • sys (MATLAB structure) — Это имеет эти поля:

    • id 'double') — ID сущности

    • priority 'double') — Приоритет сущности

  • data — Данные сущности

Тег текущего события генерации сущности.

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

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

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

Сущности, созданные с возможно измененными значениями.

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

  • type Символьный вектор) — Тип события

  • delay 'double') — Задерживаются перед событием

  • priority 'double') — Приоритет события

  • Storage 'double') — Индекс запоминающего элемента

  • tag Символьный вектор) — Тег события

  • 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 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