exponenta event banner

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

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

Пользовательский блок системы дискретных событий MATLAB принимает объект из своего входного порта и направляет его в свой выходной порт с заданной задержкой. На рисунке показан блок с использованием структуры системы дискретных событий.

Сведения об открытии модели и наблюдении за поведением пользовательского блока см. в разделе 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-й элемент указывает индекс хранилища объектов, к которому подключен i-й входной порт.

      В этом примере порт ввода 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

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

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

    Примечание

    Нельзя манипулировать данными объекта в рамках действия выхода.

  6. Присвойте имя объекту System дискретного события CustomEntityStorageBlock и сохраните его как CustomEntityStorageBlock.m.

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

     См. раздел Код для создания блока хранения настраиваемых сущностей

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

  1. Создайте модель с помощью блока генератора объектов, блока системы дискретных событий MATLAB и блока терминатора объектов.

  2. Откройте блок системы дискретных событий MATLAB и установите имя объекта системы дискретных событий в значение CustomEntityStorageBlock.

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

  4. Выведите число полученных объектов, статистику из блока терминатора объектов и подключите его к области

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

См. также

| | | | |

Связанные темы