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