rateControl

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

Описание

The 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.002655
Iteration: 2 - Time Elapsed: 1.001775
Iteration: 3 - Time Elapsed: 2.000507
Iteration: 4 - Time Elapsed: 3.001433
Iteration: 5 - Time Elapsed: 4.001127
Iteration: 6 - Time Elapsed: 5.001328
Iteration: 7 - Time Elapsed: 6.000218
Iteration: 8 - Time Elapsed: 7.000240
Iteration: 9 - Time Elapsed: 8.000945
Iteration: 10 - Time Elapsed: 9.000661

Каждая итерация выполняется с интервалом в 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.0010
          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.0074
          LastPeriod: 0.5000

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

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

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

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

расширить все

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

Введенный в R2016a