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

В этом примере показано, как использовать методы System 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) способом. The Capacity параметр объекта определяет емкость сервера.

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

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

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

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

      В этом примере входной порт 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. Назовите свои Системные объекты дискретного события 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.

См. также

| | | | |

Похожие темы