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

В этом примере показано, как использовать дискретную систему событий 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.

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

| | | | |

Похожие темы