Определите, сколько времени каждая сущность берет, чтобы совершенствоваться от одного блока до другого, или сколько времени каждая сущность проводит в конкретной области вашей модели. Чтобы вычислить эту длительность, можно измерить длительность времени на каждой сущности, которая достигает конкретного места в модели. Общий рабочий процесс:
Создайте атрибут на сущности, которая может содержать временную стоимость.
Когда сущность достигнет конкретной точки в модели, установите текущее значение времени на атрибуте. Вызовите функцию Simulink®, которая содержит блок Digital Clock.
Когда сущность достигает места назначения, вычислите временной интервал путем передачи значения атрибута другой функции Simulink, которая сравнивает его с текущим временем симуляции.
Этот пример позволяет вам видеть, приоритизировал ли порядок FIFO или очередь для потребительских результатов в более короткое время ожидания. startTimer
и readTimer
функции Simulink совместно выполняют вычисление синхронизации. Этот пример использует блок Mean от DSP System Toolbox™, чтобы вычислить средние времена.
Этот пример имеет четыре Функциональных блока Simulink. Два задают таймерные функции, startTimer и readTimer. Другие функции вычисляют средние времена.
В новой модели перетащите блоки, показанные в примере, и повторно маркируйте и соедините их как показано.
Для блока startTimer задайте:
Для блока readTimer задайте:
Для avg_time_fifo(t)
и avg_time_priority
Функциональные блоки Simulink, вставьте блок Mean, например:
Для блока Entity Generator:
Во вкладке Entity type добавьте два атрибута, ServiceTime
и Timer
.
Во вкладке Entity actions, набор эти два значения атрибута:
entity.ServiceTime = exprnd(3); entitySys.priority = randi(2);
В очереди сущности:
Во вкладке Main, набор Queue type к FIFO.
Во вкладке Event actions вызовите функцию startTimer
для действия Записи:
entity.Timer = startTimer();
В сущности Queue1:
Во вкладке Main сконфигурируйте блок, чтобы быть приоритетной очередью с приоритетным источником entitySys.priority
:
Во вкладке Event actions вызовите функцию startTimer
для действия Записи:
entity.Timer = startTimer();
Для обоих блоков Сервера Сущности:
Установите Service time source на Attribute
.
Установите Service time attribute name на ServiceTime
.
Для Терминатора Сущности вызовите readTimer
и функции avg_time_fifo
для события Entry:
% Read timer elapsedTime = readTimer(entity.Timer); % Compute average avg_time_fifo(elapsedTime);
Для Сущности Terminator1 вызовите readTimer
и функции avg_time_priority
для события Entry:
% Read timer elapsedTime = readTimer(entity.Timer); % Compute average avg_time_priority(elapsedTime);
Сохраните и запустите модель.
Генератор сущности | Репликатор сущности | Функция Simulink