exponenta event banner

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

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

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

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

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

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

В этом примере показано, приводит ли заказ FIFO или приоритетная очередь для клиентов к более короткому времени ожидания. startTimer и readTimer Функции симулятора совместно выполняют вычисление синхронизации. В этом примере для вычисления среднего времени используется средний блок из системного Toolbox™ DSP.

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

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

  2. Для блока startTimer определите:

  3. Для блока readTimer определите:

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

  5. Для блока «Генератор объектов»:

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

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

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

    1. На вкладке Главная установите тип очереди FIFO.

    2. На вкладке Действия с событиями вызовите startTimer для действия Ввод:

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

    1. На вкладке «Главная» настройте блок как приоритетную очередь с источником приоритета entitySys.priority:

    2. На вкладке Действия с событиями вызовите startTimer для действия Ввод:

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

    1. Установить для источника времени обслуживания значение Attribute.

    2. Задать для имени атрибута времени обслуживания значение ServiceTime.

  9. Для параметра Entity Terminator вызовите 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. Сохраните и запустите модель.

См. также

| |

Связанные темы