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.005154
Iteration: 2 - Time Elapsed: 1.003463
Iteration: 3 - Time Elapsed: 2.004150
Iteration: 4 - Time Elapsed: 3.003631
Iteration: 5 - Time Elapsed: 4.002970
Iteration: 6 - Time Elapsed: 5.006027
Iteration: 7 - Time Elapsed: 6.000827
Iteration: 8 - Time Elapsed: 7.000352
Iteration: 9 - Time Elapsed: 8.000406
Iteration: 10 - Time Elapsed: 9.000589

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

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

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

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

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

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

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

Введенный в R2016a