Задержите сущности с пользовательским блоком системы хранения сущности

Этот пример показывает, как использовать дискретную систему событий object™ методы, чтобы создать пользовательский блок системы хранения сущности, который имеет один входной порт, один выходной порт и один запоминающий элемент. Объект дискретной системы событий является инстанцированием класса matlab.DiscreteEventSystem, который позволяет вам использовать методы реализации и обслуживания, предоставленные этим классом. Затем вы используете блок MATLAB Discrete-Event System, чтобы интегрировать Системный объект в модель SimEvents®.

Пользовательский блок MATLAB Discrete-Event System принимает сущность от своего входного порта и вперед этого к ее выходному порту с заданной задержкой. Фигура визуализирует блок с помощью среды дискретной системы событий.

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

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

  1. Создайте новый скрипт и наследуйте класс matlab.DiscreteEventSystem.

    classdef CustomEntityStorageBlock < matlab.DiscreteEventSystem
  2. Добавьте пользовательское описание в блок.

    % A custom entity storage block with one input, one output, and one storage.
  3. Объявите, что два ненастраиваемых параметра Capacity и Delay представляют емкость памяти и исходную задержку сущности от устройства хранения данных.

    % Nontunable properties 
        properties (Nontunable)
        % Capacity
            Capacity = 1;
        % Delay
            Delay = 4;
        end

    Параметры получают свойства блока.

    • Настраиваемые параметры могут быть настроены в течение времени выполнения.

    • Ненастраиваемые параметры не могут быть настроены в течение времени выполнения.

  4. Задайте эти методы и установите доступ к защищенному.

        methods (Access = protected)   
    
            % Specify the number of input ports.     
            function num = getNumInputsImpl(~)
                num = 1;
            end
            % Specify the number of output ports.
            function num = getNumOutputsImpl(~)
                num = 1;
            end      
            % Specify a new entity type Car.
            function entityTypes = getEntityTypesImpl(obj)
                entityTypes = obj.entityType('Car');
            end
            % Specify Car as the entity type that is used in 
            % input and output ports.
            function [inputTypes,outputTypes] = getEntityPortsImpl(obj)
                inputTypes = {'Car'};
                outputTypes = {'Car'};
            end
            % Specify the storage type, capacity, and connection to 
            % the input and output ports.
            function [storageSpecs, I, O] = getEntityStorageImpl(obj)
                storageSpecs = obj.queueFIFO('Car', obj.Capacity);
                % First element of I indicates the entity storage index 1 that is
                % connected to input 1. 
                I = 1;
                % First element of O indicates the entity storage index 1 that is
                % connected to output 1.
                O = 1;
            end
           
        end

    Только один автомобиль видов устройства хранения данных способом метода "первым пришел - первым вышел" (FIFO). Параметр Capacity объекта задает мощность сервера.

    Метод getEntityStorageImpl() также задает связи между портами и устройством хранения данных, I и O.

    • I возвращаемого значения является вектором элементов i = 1... n, где его длина n равна количеству входных портов.

      В этом примере n является 1, потому что только один входной порт объявляется.

    • i th элемент указывает на индекс устройства хранения данных сущности, с которым соединяется i th входной порт.

      В этом примере входной порт 1 соединяется с устройством хранения данных 1.

    • Если входной порт является портом сигнала, соответствующим элементом является 0.

    Так же возвращаемое значение O используется, чтобы задать связи между устройством хранения данных и выходным портом.

  5. Задайте событие eventForward, чтобы передать сущность типа Car к выводу, когда это введет устройство хранения данных.

        function [entity,event] = CarEntry(obj,storage,entity,source)
            % Specify event actions when entity enters storage.       
            event = obj.eventForward('output', 1, obj.Delay);         
        end

    Запись Car в устройство хранения данных вызывает действие события и событие obj.eventForward вперед Car к выводу с индексом 1 с задержкой, заданной obj.Delay.

    Можно использовать входные параметры этого метода, чтобы создать пользовательское поведение. Аргумент obj является объектом дискретной системы событий, наследованным методом. Аргумент storage является индексом запоминающего элемента, который вводит сущность. Аргумент entity является сущностью, которая вводит устройство хранения данных, и это имеет два поля, entity.sys и entity.data. Аргумент source является исходным местоположением сущности, которая вводит устройство хранения данных.

    Примечание

    Вы не можете управлять данными сущности в рамках выходного действия.

  6. Назовите свой объект CustomEntityStorageBlock дискретной системы событий и сохраните его как CustomEntityStorageBlock.m.

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

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

Реализация пользовательского блока системы хранения сущности

  1. Создайте модель с помощью блока Entity Generator, блока MATLAB Discrete-Event System и блока Entity Terminator.

  2. Откройте блок MATLAB Discrete-Event System и установите Discrete-event System object name на CustomEntityStorageBlock.

  3. Дважды кликните блок MATLAB Discrete-Event System, чтобы наблюдать его способность и задержку.

  4. Выведите статистическую величину Number of entities arrived, a от блока Entity Terminator и соедините его с осциллографом

  5. Увеличьте время симуляции до 20 и запустите симуляцию. Наблюдайте сущности, прибывающие в блок Entity Terminator с задержкой 4.

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

| | | | |

Похожие темы