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

В этом примере показано, как создать пользовательский исходный блок, который генерирует сущности и управлять дискретными состояниями при реализации дискретной системы событий 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 out = getOutputSizeImpl(obj)
            % Return size for output port.
            out = [1 12];
        end
    
        function out = getOutputDataTypeImpl(obj)
            % Return data type for output port.
            out = "double";
        end
    
        function out = isOutputComplexImpl(obj)
            % Return true for output port with complex data.
            out = 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);
        end
    
        function [entity,events] = 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;
            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. Определите объем сигнала между блоком Ramp и блоком MATLAB Discrete-Event System.

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

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

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

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

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

    3. Диагностическое Средство просмотра показывает entitySys.priority значения. Приоритетные значения получены от значения сигналов пандуса во времена генерации сущности 1, 2,3, 4, 5, 6, 7, 8, 9, и 10.

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

| | | | |

Похожие темы

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