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

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

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

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

Отследите компонент Ресурсов в модели, имеющихся ресурсах дорожек и полученном количестве ресурсов каждой частью. Имеющиеся ресурсы измеряются доступной Суммой, помогают статистической величине от блока Resource Pool. Ресурсы получены Part A и Part B наблюдается выходом блоков Чтения Хранилища данных, которые читают значения из Хранилища данных A и Хранилища данных B.

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

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

Также наблюдайте блок Scope, соединенный с Хранилищем данных Рид Парт Б. Осциллограф показывает тот Part B получает 1 ресурс после времени симуляции 40 из-за установления приоритетов ресурсов.

Похожие темы