Измерение задержек между точками

Определите, сколько времени занимает каждую сущность, чтобы перейти от одного блока к другому или сколько времени каждая сущность проводит в определенной области вашей модели. Чтобы вычислить эти длительности, можно измерить временные длительности на каждой сущности, который достигает определенного места в модели. Общий рабочий процесс:

  1. Создайте атрибут сущности, который может удерживать временное значение.

  2. Когда сущность достигает определенной точки в модели, задайте текущее значение времени на атрибуте. Вызов Simulink® функция, которая содержит блок Digital Clock.

  3. Когда сущность достигает места назначения, вычислите временной интервал, передав значение атрибута другой функции Simulink, которая сравнивает его с текущим временем симуляции.

Базовый пример использования блоков таймера

Этот пример позволяет увидеть, порядок ли FIFO или приоритетная очередь для клиентов результатов в более короткое время ожидания. The startTimer и readTimer Функции Simulink совместно выполняют расчет времени. Этот пример использует блок Mean из DSP System Toolbox™, чтобы вычислить среднее время.

Этот пример имеет четыре блока Simulink Function. Две задают функции таймера, startTimer и readTimer. Другие функции вычисляют среднее время.

  1. В новой модели перетащите блоки, показанные в примере, и повторно маркируйте и соедините их как показано.

  2. Для блока startTimer задайте:

  3. Для блока readTimer задайте:

  4. Для avg_time_fifo(t) и avg_time_prioritySimulink Function блоков вставьте Mean блок, например:

  5. Для блока Entity Generator:

    1. На вкладке Entity type добавьте два атрибута, ServiceTime и Timer.

    2. На вкладке Entity actions установите два значения атрибутов:

      entity.ServiceTime = exprnd(3);
      entitySys.priority = randi(2);
  6. В Entity Queue:

    1. На вкладке Main установите Queue type значение FIFO.

    2. На вкладке Event actions вызовите startTimer функция для действия входа:

      entity.Timer = startTimer();
  7. В Entity Queue1:

    1. На вкладке Main сконфигурируйте блок как очередь приоритетов с приоритетным источником entitySys.priority:

    2. На вкладке Event actions вызовите startTimer функция для действия входа:

      entity.Timer = startTimer();
  8. Для обоих блоков Entity Server:

    1. Установите Service time source значение Attribute.

    2. Установите Service time attribute name значение ServiceTime.

  9. Для Entity Terminator вызовите readTimer и avg_time_fifo функции для события Entry:

    % Read timer
    elapsedTime = readTimer(entity.Timer);
    
    % Compute average
    avg_time_fifo(elapsedTime);
  10. Для Entity Terminator1 вызовите readTimer и avg_time_priority функции для события Entry:

    % Read timer
    elapsedTime = readTimer(entity.Timer);
    
    % Compute average
    avg_time_priority(elapsedTime);
  11. Сохраните и запустите модель.

См. также

| |

Похожие темы