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Объект 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.005677
Iteration: 2 - Time Elapsed: 1.011497
Iteration: 3 - Time Elapsed: 2.005482
Iteration: 4 - Time Elapsed: 3.006115
Iteration: 5 - Time Elapsed: 4.006108
Iteration: 6 - Time Elapsed: 5.010752
Iteration: 7 - Time Elapsed: 6.002778
Iteration: 8 - Time Elapsed: 7.002687
Iteration: 9 - Time Elapsed: 8.002564
Iteration: 10 - Time Elapsed: 9.002698

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

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

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

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

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

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

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

Введенный в R2016a