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