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

В этом примере показано, как смоделировать планирование ресурсов с помощью обмена данными между блоком MATLAB Discrete-Event System и блоком Data Store Memory.

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

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

В модели Блок Генератора Сущность генерирует сущности типа PartA. Затем детали отправляются в модуль хранения для получения ресурсов из блока Resource Pool. Блок системы дискретных событий 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. System Object™ сначала вызывает значение, хранящееся в Data Store 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, который представлен блоком Entity Server. Когда процесс нагревания завершен, части высвобождают полученные ресурсы и отходят от объекта.

В модели другой блок Entity Generator генерирует сущности типа Part B. Затем детали отправляются в модуль хранения для получения ресурсов из блока Resource Pool. Блок системы дискретных событий 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 для каждой записи сущности.

После успешного получения ресурсов сущность пересылается на выход. Обновление System Object(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. Они освобождают ресурсы после завершения процесса и отходят от объекта.

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

Результаты симуляции

Симулируйте модель. Наблюдайте блок Scope, соединенный с частью чтения хранилища данных A. Возможности показывают, что Part A приобретает 30 ресурсы во времени симуляции 40.

Также наблюдайте блок Scope, соединенный с Data Store Read Part B. Возможности показывают, что Part B приобретает 1 ресурс по истечении времени симуляции 40 в связи с установлением приоритетов в отношении ресурсов.

Похожие темы