В этом примере показано, как смоделировать планирование ресурсов с помощью обмена данными между блоком 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
в связи с установлением приоритетов в отношении ресурсов.