Измерьте задержки "точка-точка"

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

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

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

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

Основной пример Используя блоки таймера

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

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

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

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

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

  4. Для avg_time_fifo(t) и avg_time_priority Функциональные блоки Simulink, вставьте блок Mean, например:

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

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

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

      entity.ServiceTime = exprnd(3);
      entitySys.priority = randi(2);
  6. В очереди сущности:

    1. Во вкладке Main, набор Queue type к FIFO.

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

      entity.Timer = startTimer();
  7. В сущности Queue1:

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

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

      entity.Timer = startTimer();
  8. Для обоих блоков Сервера Сущности:

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

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

  9. Для Терминатора Сущности вызовите readTimer и функции avg_time_fifo для события Entry:

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

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

Смотрите также

| |

Похожие темы