rateControl

Выполните цикл в фиксированной частоте

Описание

rateControl объект позволяет вам запустить цикл в фиксированной частоте. Это также собирает статистические данные о синхронизации итераций цикла. Использование waitfor в цикле, чтобы приостановить выполнение кода до следующего временного шага. Цикл управляет каждым DesiredPeriod секунды, если прилагаемый код не занимает больше времени, чтобы действовать. Объект использует OverrunAction свойство определить, как это обрабатывает более длительные времена операции цикла. Настройка по умолчанию, 'slip', сразу выполняет цикл если LastPeriod больше DesiredPeriod. Используя 'drop' вызывает waitfor метод, чтобы ожидать до следующего кратного DesiredPeriod достигнут, чтобы выполнить следующий цикл.

Совет

Разрешение планирования вашей операционной системы и уровень другого системного действия могут влиять на точность выполнения уровня. В результате точная синхронизация уровня ограничивается 100 Гц для подписания кода MATLAB®. Чтобы улучшать скорости производительности и выполнения, используйте генерацию кода.

Создание

Описание

пример

rateObj = rateControl(desiredRate) создает объект, который работает циклами с с фиксированной процентной ставкой на основе вашего системного времени и непосредственно устанавливает DesireRate свойство.

Свойства

развернуть все

Желаемый уровень выполнения цикла в виде скаляра в Гц. При использовании waitfor, цикл управляет каждым DesiredRate секунды, если цикл не занимает больше времени. Это затем начинает следующий цикл на основе заданного OverrunAction.

Желаемый период времени между выполнением в виде скаляра в секундах. Это свойство равно инверсии DesiredRate.

Прошедшее время начиная с конструкции или сброса в виде скаляра в секундах.

Прошедшее время между последними двумя вызовами waitforВ виде скаляра. По умолчанию, LastPeriod установлен в NaN до waitfor называется впервые. После первого вызова, LastPeriod равняется TotalElapsedTime.

Метод для обработки переполнений в виде одного из этих векторов символов:

  • 'drop' — ожидает до следующего временного интервала, равного кратному DesiredPeriod

  • 'slip' — сразу выполняет цикл снова

Каждая секция кода вызовы waitfor в конце выполнения.

Функции объекта

waitforПриостановите выполнение кода, чтобы достигнуть желаемого уровня выполнения
statisticsСтатистика прошлых периодов выполнения
resetСбросьте Rate объект

Примеры

свернуть все

Создайте объект уровня, который достигает 1 Гц.

r = rateControl(1);

Запустите цикл с помощью rateControl возразите внутри, чтобы управлять выполнением цикла. Сбросьте объект до выполнения цикла, чтобы сбросить таймер. Распечатайте итерацию, и время протекло.

reset(r)
for i = 1:10
	time = r.TotalElapsedTime;
	fprintf('Iteration: %d - Time Elapsed: %f\n',i,time)
	waitfor(r);
end
Iteration: 1 - Time Elapsed: 0.002942
Iteration: 2 - Time Elapsed: 1.000981
Iteration: 3 - Time Elapsed: 2.000953
Iteration: 4 - Time Elapsed: 3.000944
Iteration: 5 - Time Elapsed: 4.001277
Iteration: 6 - Time Elapsed: 5.000915
Iteration: 7 - Time Elapsed: 6.000673
Iteration: 8 - Time Elapsed: 7.000706
Iteration: 9 - Time Elapsed: 8.000684
Iteration: 10 - Time Elapsed: 9.000710

Каждая итерация выполняется в 1 втором интервале.

Создайте rateControl объект для того, чтобы достигнуть 20 Гц.

r = rateControl(20);

Запустите цикл и управляйте операцией с помощью rateControl объект.

for i = 1:30
    % Your code goes here
    waitfor(r);
end

Получите Rate объектная статистика после операции цикла.

stats = statistics(r)
stats = struct with fields:
              Periods: [1x30 double]
           NumPeriods: 30
        AveragePeriod: 0.0500
    StandardDeviation: 0.0049
          NumOverruns: 0

Создайте rateControl объект для того, чтобы достигнуть 20 Гц.

r = rateControl(2);

Запустите цикл и управляйте операцией с помощью Rate объект.

for i = 1:30
    % Your code goes here
    waitfor(r);
end

Отобразите rateControl свойства объектов после операции цикла.

disp(r)
  rateControl with properties:

         DesiredRate: 2
       DesiredPeriod: 0.5000
       OverrunAction: 'slip'
    TotalElapsedTime: 15.0062
          LastPeriod: 0.5000

Сбросьте объект перезапустить статистику времени.

reset(r);
disp(r)
  rateControl with properties:

         DesiredRate: 2
       DesiredPeriod: 0.5000
       OverrunAction: 'slip'
    TotalElapsedTime: 0.0026
          LastPeriod: NaN

Вопросы совместимости

развернуть все

Изменение поведения в будущем релизе

Введенный в R2016a