Пользовательский блок генератора сущности с входом сигнала и Выходом Сигнала

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

Предположим, что вы управляете средством, которое производит сырье с фиксируемой детерминированной ставкой. Материалы содержат 12-разрядный штрихкод для управления запасом и приоритетные значения для установления приоритетов порядка. Чтобы представлять это поведение, этот пример показывает, как сгенерировать пользовательский блок системы хранения сущности, сгенерирован с одним входным портом сигнала, одним выходным портом сущности, одним выходным портом сигнала и одним запоминающим элементом. Блок генерирует сущности с отличными приоритетными значениями. Сущности несут данные и отбывают из блока из его выходного порта. Приоритетные значения сущности получены от значений входящего сигнала.

Чтобы открыть модель и наблюдать поведение пользовательского блока, смотрите CustomEntityGeneratorBlockExample.

Создайте объект Дискретной Системы событий

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

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

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

  1. Задайте время между существенными поколениями.

        % Nontunable properties 
        properties (Nontunable)
            % Generation period
            period = 1;
        end
  2. Инициализируйте переменные дискретного состояния.

        function resetImpl(obj)
            % Initialize / reset discrete-state properties.
            obj.priority = 10;
            obj.value = 1:12;            
        end
    

    Переменная priority представляет существенный приоритет и value представляет данные о штрихкоде, которые несут материалы.

  3. Инициализируйте выход для исходного блока.

        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
    
    • Первая функция объявляет выходной размер.

    • Вторая функция объявляет, что типами данных выходного порта является double.

    • Третья функция объявляет false для выходных портов, потому что они не поддерживают комплексные данные.

  4. Объявите размер, данные и сложность дискретных состояний.

        function [sz,dt,cp] = getDiscreteStateSpecificationImpl(obj,name)
            % Return size, data type, and complexity of discrete-state.
                switch name
                    case 'priority'
                        sz = [1 1];
                    case 'value'
                        sz = [1 12];
                end
                dt = "double";
                cp = false;           
        end
    • Дискретное состояние priority isscalar. Типом данных является double и принимает вещественные значения.

    • Дискретное состояние value 1- 12 вектор. Типом данных является double и принимает вещественные значения.

  5. Сгенерируйте материалы с периодом межгенерации, приоритетом и данными, заданными:

    • Параметр obj.period, объявленный как общедоступный параметр, который может быть изменен от диалогового окна блока.

    • Параметр obj.priority значения, заданные сигналом от входного порта.

    • Параметр obj.value, 1- 12 вектор, который представляет данные, которые несут сущности.

        function events = setupEvents(obj)
            % Set up entity generation event for storage 1 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 value from the signal is assigned to the entity priority.
            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

Реализуйте пользовательский блок

  1. Сохраните .m файл как CustomEntityStorageBlockGeneration. Соедините Системный объект с SimEvents® модель при помощи блока MATLAB Discrete-Event System. Для получения дополнительной информации о соединении, смотрите, Создают Пользовательские блоки Используя Блок Дискретной Системы событий MATLAB.

  2. Создайте модель SimEvents, которая включает блок MATLAB Discrete-Event System, блок Ramp, блок Entity Terminator и два блока Осциллографа. Соедините блоки как показано в модели.

  3. В блоке Ramp, набор Slope к 5 и Initial output к 10.

  4. В блоке Entity Terminator можно отобразить приоритетные значения сущностей, прибывающих в блок в Entry action, поле вводит этот код.

    coder.extrinsic('fprintf');
    fprintf('Priority: %d\n', double(entitySys.priority))
  5. Щелкните правой кнопкой по пути сущности от пользовательского Entity Generator до Entity Terminator и выберите Log Selected Signals.

  6. Симулируйте модель.

    1. Наблюдайте выходной сигнал блока Ramp. Например, выходное значение становится 15, 20, 25, и 30 для времени симуляции 1, 2, 3, и 4, соответственно.

    2. Инспектор Данных моделирования показывает, что сущности передаются блоку Entity Terminator с данными размера 1 12.

    3. Можно также заметить, что приоритетные значения от осциллографа пометили Entity Priority в течение времен генерации 1, 2,3, 4, 5, 6, 7, 8, 9, и 10.

Смотрите также

| | | | |

Похожие темы