exponenta event banner

Создание пользовательского блока получения ресурсов

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

Предположим, что вы управляете объектом, который производит детали из двух различных материалов, материалов 1 и материал 2, для выполнения заказов. После изготовления детали она оценивается на предмет обеспечения качества.

Два метода тестирования для контроля качества:

  • Испытание 1 используется для деталей, изготовленных из материала 1.

  • Испытание 2 используется для деталей, изготовленных из материала 2

После фазы производства детали маркируются на основе их материала для применения правильного теста.

Для создания пользовательского поведения создается object™ системы с дискретным событием с помощью matlab.DiscreteEventSystem методы классов для управления ресурсами.

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

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

Блок принимает объект типа Part к своему хранилищу с емкостью 1. Объект имеет атрибут Test для указания материала, из которого производится деталь. На основе значения атрибута сущность получает ресурс из указанного блока пула ресурсов и удаляет проверяемый блок.

 См. Код для создания пользовательского блока для получения ресурсов

Поведение пользовательского блока

  1. Определить Test1 и Test2 ресурсы типа, которые должны быть получены типом объекта Part.

    function resNames = getResourceNamesImpl(obj)
        % Define the names of the resources to be acquired.
        resNames = obj.resourceType('Part', {'Test1', 'Test2'}) ;
    end
  2. Объект входит в хранилище. Если его entity.data.Test значение равно 1, объект создан из Material1. Сущность приобретает 1 ресурс из блока пула ресурсов с ресурсами типа Test1. Аналогично, если его entity.data.Test значение равно 2объект получает один ресурс из блока пула ресурсов с ресурсами типа Test2.

    methods
            
        function [entity,events] = entry(obj, storage, entity, source)
            % On entity entry, acquire a resource from the specified pool. 
            if entity.data.Test == 1
            % If the entity is produced from Material1, it acquires resource of type Test1.    
            resReq = obj.resourceSpecification('Test1', 1);
            else
            % If the entity is produced from Material2, it acquires resource of type Test2.     
            resReq = obj.resourceSpecification('Test2', 1);
            end
            % Acquire the resource from the corresponding pool.
            events = obj.eventAcquireResource(resReq, 'TestTag');
        end
                
        function [entity,events] = resourceAcquired(obj, storage,...  
                                       entity, resources, tag)
            % After the resource acquisition, forward the entity to the output.                    
            events = obj.eventForward('output', storage, 0.0);
        end
            
    end

    После успешного получения ресурса resourceAcquired вызывает переадресацию объекта.

Реализация пользовательского блока

  1. Сохранить .m файл как CustomBlockAcquireResources. Свяжите объект System с моделью SimEvents ® с помощью блока MATLAB Discrete-Event System. Дополнительные сведения о связывании см. в разделе Создание пользовательских блоков с помощью системного блока дискретных событий MATLAB.

  2. Создайте модель SimEvents, используя блок системы дискретных событий MATLAB, блок генератора объектов и блок терминатора объектов и два блока пула ресурсов. Подключите блоки, как показано на схеме.

    Маркировать блок генератора объектов как генератор деталей и блок терминатора объектов как отправление для тестирования.

  3. В генераторе деталей:

    1. На вкладке Создание объекта (Entity generation) задайте для параметра Генерировать объект в начале моделирования (Generate entity at simulation start) значение off.

    2. На вкладке Тип объекта задайте имя типа объекта как Part и имя атрибута для Test.

    3. На закладке Действия с событиями в поле Создать действие введите:

      entity.Test= randi([1 2]);

      Детали создаются со временем между поколениями. 1 и их Test значение атрибута - 1 или 2 для указания вида материала.

  4. В блоке Пул ресурсов:

    1. Задайте для имени ресурса значение Test1 и параметр Reusable после освобождения для off.

    2. На вкладке Статистика выведите доступную сумму, воспользуйтесь статистикой и подключите ее к области.

  5. В блоке Pool1 ресурсов:

    1. Задайте для имени ресурса значение Test2 и параметр Reusable после освобождения для off.

    2. На вкладке Статистика выведите доступную сумму, воспользуйтесь статистикой и подключите ее к области.

  6. Щелкните правой кнопкой мыши путь к объекту от генератора деталей до блока системы дискретных событий MATLAB и выберите «Регистрировать выбранные сигналы».

  7. Моделирование модели.

    • Наблюдать за Test значения атрибутов входящих объектов в пользовательский блок. Для трех объектов требуется тест 1, а для семи объектов требуется тест 2.

    • Обратите внимание, что три ресурса типа Test1 приобретаются организациями.

    • Обратите внимание, что семь ресурсов типа Test2 приобретаются организациями.

См. также

| | | | | | |

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