exponenta event banner

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.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

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

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

Изменение поведения в будущем выпуске

См. также

| | | (панель инструментов ROS)

Представлен в R2016a