exponenta event banner

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

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

В примере моделируется средство, которое генерирует два типа деталей, Part A и Part B, которые подвергаются процессу нагрева. Обе детали получают ресурсы для процесса отопления из одного пула ресурсов. Приобретение ресурсов для Part A имеет более высокий приоритет. Когда Part A приобретает определенное количество ресурсов, Part B может получить только 1 ресурс. Это ограничение требует, чтобы общее количество ресурсов было разделено между процессами и получением, запланированным на основе общих данных.

Описание модели

В модели блок генератора объектов генерирует объекты типа PartA. Затем позиции отправляются в единицу хранения для получения ресурсов из блока Пул ресурсов. Блок системы дискретных событий MATLAB, использующий PartAStorage Система Object™ представляет единицу складирования.

Системный Object™ определяет количество полученных ресурсов и событие получения ресурсов для Part A.

function [entity,event] = PartAEntry(obj,storage,entity,source)
    % Define the amount of acquired resources as a random value.
    Amount = randi([1 3]);
    resReq = obj.resourceSpecification('Resources', Amount);
    % Define the resource acquisition event.
    event = obj.eventAcquireResource(resReq, 'ResourceAcq');
end

Когда Part A получает ресурсы успешно, объект пересылается на выход. TotalAcquiredByPartA - данные, хранящиеся в блоке памяти хранилища данных, представляющие общее количество полученных ресурсов Part A. Система Object™ сначала вызывает значение, сохраненное в хранилище данных A. Она обновляет и записывает новое TotalAcquiredByPartA ценность путем добавления количества приобретенных ресурсов.

function [entity,events] = resourceAcquired(obj, storage,...
                                entity, resources, tag)
    global TotalAcquiredByPartA;
    % After succesful resource acquisition, forward the entity
    % to the output |1|.
    events = obj.eventForward('output', 1, obj.Delay);
    % Update the total number of resources acquired.
    TotalAcquiredByPartA = TotalAcquiredByPartA + resources.amount;
end

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

В модели другой блок генератора объектов генерирует объекты типа Part B. Затем позиции отправляются в единицу хранения для получения ресурсов из блока Пул ресурсов. Блок системы дискретных событий MATLAB, использующий PartBStorage Система Object™ представляет другую единицу хранения.

Системный Object™ определяет количество полученных ресурсов и событие получения ресурсов для Part B.

function [entity,event] = PartBEntry(obj,storage,entity,source)
    global TotalAcquiredByPartA;
        % If the number of resources acquired by Part A is greater than
        % 30 then Part B acquires only |1| resource.
        if TotalAcquiredByPartA > 30
        Amount = 1;
        else
        % Otherwise, Part B can acquire any number of resources between
        % |1| and |5|.
        Amount = randi([1 5]);
        end
    resReq = obj.resourceSpecification('Resources', Amount);
    % Define the resurce acquisition event.
    event = obj.eventAcquireResource(resReq, 'ResourceAcq');
end

Объем ресурсов Part B приобретение зависит от ресурсов, приобретенных Part A. Это приобретение достигается PartBStorage Системный Object™, считывающий значение TotalAcquiredByPartA хранится в хранилище данных A для каждой записи объекта.

После успешного получения ресурсов объект пересылается на выход. Обновления системного объекта (TM) TotalAcquiredByPartB и записывает новое значение в хранилище данных B.

function [entity,events] = resourceAcquired(obj, storage,...
                                 entity, resources, tag)
    global TotalAcquiredByPartB; % After succesful resource
    acquisition, forward the entity to the output. events =
    obj.eventForward('output', 1, obj.Delay); % Update the total number
    of resources acquired. TotalAcquiredByPartB = TotalAcquiredByPartB
    + resources.amount;
end

Затем детали отправляются в процесс нагрева B. Они высвобождают ресурсы после завершения процесса и покидают объект.

Компонент Track Resources в модели отслеживает доступные ресурсы и полученное количество ресурсов каждой частью. Доступные ресурсы измеряются суммой available, используя статистику из блока Resource Pool. Ресурсы, приобретенные Part A и Part B наблюдается выводом блоков чтения хранилища данных, считывающих значения из хранилища данных A и хранилища данных B.

Результаты моделирования

Моделирование модели. Обратите внимание на блок «Scope» (Область), подключенный к элементу «Data Store Read Part A». Part A приобретает 30 ресурсы вокруг времени моделирования 40.

Также обратите внимание на блок «Область», подключенный к части «Чтение хранилища данных» B. Область показывает, что Part B приобретает 1 ресурс по истечении времени моделирования 40 благодаря приоритизации ресурсов.

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