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