exponenta event banner

класс таймера

Создание объекта для планирования выполнения команд MATLAB

Описание

Использовать timer объект для планирования выполнения команд MATLAB ® один или несколько раз. Если таймер планируется выполнять несколько раз, можно определить время между выполнением и способ обработки конфликтов очередей .

timer для выполнения команд объект использует функции обратного вызова. Функции обратного вызова выполняют код во время некоторого события. Для timer можно указать функцию обратного вызова как дескриптор функции или как символьный вектор. Если функция обратного вызова является символьным вектором, MATLAB оценивает ее как исполняемый код. Объект таймера поддерживает функции обратного вызова при запуске таймера (StartFcn), выполняет (TimerFcn), упоры (StopFcn) или сталкивается с ошибкой (ErrorFcn).

Примечание

timer объект зависит от ограничений оборудования, операционной системы и программного обеспечения. Избегайте использования объектов таймера для приложений реального времени.

Строительство

t = timer создает пустой timer объект для планирования выполнения команд MATLAB. Ошибка возникает при запуске таймера и TimerFcn не определен.

t = timer(Name,Value) создает timer с дополнительными опциями, заданными с помощью одного или нескольких Name,Value аргументы пары.

Входные аргументы

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Имя аргумента, Name, соответствует timer имя свойства. В конструкторе значения свойств задаются с помощью Name,Value аргументы пары.

'BusyMode'

Вектор символов или строковый скаляр, указывающий действие, выполняемое при выполнении таймера TimerFcn до завершения предыдущего выполнения TimerFcn. Когда Running='on', BusyMode только для чтения. В этой таблице представлены режимы занятости.

BusyMode Ценности

Поведение, если очередь пуста

Поведение, если очередь не пуста

Примечания

'drop'

Добавление задачи в очередь

Удаление задачи

Возможно пропуск TimerFcn требования

'error'

Добавление задачи в очередь

Завершает задачу; выдает ошибку, указанную ErrorFcn; останавливает таймер

Останавливает таймер после завершения задачи в очереди выполнения

'queue'

Добавление задачи в очередь

Ожидает очистки очереди, а затем вводит задачу в очередь

Приспосабливается Period свойство для управления задачами в очереди выполнения

Дополнительные сведения см. в разделе Обработка конфликтов очередей таймеров.

По умолчанию: 'drop'

'ErrorFcn'

Символьный вектор, строковый скаляр, дескриптор функции или массив ячеек, определяющий функцию, выполняемую таймером при возникновении ошибки. При возникновении ошибки эта функция выполняется, а затем вызывает StopFcn.

  • Если это свойство задается с помощью вектора символов или скаляра строк, то при выполнении обратного вызова MATLAB вычисляет код MATLAB, содержащийся в векторе символов.

  • При указании этого свойства с помощью дескриптора функции, когда MATLAB выполняет обратный вызов, он передает timer объект и структуру события для функции обратного вызова. Структура события содержит тип события в Type поле и время события в Data поле.

  • Если функция обратного вызова принимает аргументы в дополнение к timer object и event data, укажите это свойство как массив ячеек, содержащий дескриптор функции и дополнительные аргументы.

Дополнительные сведения см. в разделе Функции обратного вызова по таймеру.

'ExecutionMode'

Вектор символов или строковый скаляр, определяющий способ timer объект планирует события таймера. Когда Running='on', ExecutionMode только для чтения. В этой таблице представлены режимы выполнения.

Режим выполнения

Время Period Начальная точка

'singleShot'

В этом режиме функция обратного вызова таймера выполняется только один раз. Следовательно, Period свойство не имеет эффекта. Это режим выполнения по умолчанию.

'fixedRate'

Запускается сразу после добавления функции обратного вызова таймера в очередь выполнения MATLAB

'fixedDelay'

Запускается, когда функция обратного вызова таймера перезапускает выполнение после задержки времени из-за задержек в очереди выполнения MATLAB

'fixedSpacing'

Запускается после завершения выполнения функции обратного вызова таймера.

  • 'singleShot' - режим одиночного выполнения для timer класс и является значением по умолчанию.

  • 'fixedDelay', 'fixedRate', и 'fixedSpacing' являются тремя поддерживаемыми режимами многократного выполнения. Эти режимы определяют начальную точку Period собственность. Period свойство указывает время между выполнением, которое остается неизменным. Отличается только точка, в которой начинается выполнение.

По умолчанию: 'singleShot'

'Name'

Вектор символа или строковый скаляр, представляющий timer имя.

По умолчанию: 'timer-i', где i - число, указывающее i«Объект таймера, созданный в этом сеансе». Перезагружать i в 1, выполните команду clear classes команда.

'ObjectVisibility'

Вектор символа или строковый скаляр с возможными значениями 'on' или 'off', что дает возможность запретить конечным пользователям доступ к созданным приложением объектам таймера. timerfind функция не возвращает объект, ObjectVisibility свойство имеет значение 'off'. Невидимые объекты остаются действительными. Чтобы получить список всех объектов таймера в памяти, включая невидимые, используйте timerfindall функция.

По умолчанию: 'on'

'Period'

Число больше 0,001, которое определяет задержку в секундах между выполнением TimerFcn. Для использования таймера Period, необходимо установить ExecutionMode и TasksToExecute для планирования событий обратного вызова нескольких объектов таймера.

По умолчанию: 1.0

'StartDelay'

Число, большее или равное 0, которое указывает задержку в секундах между запуском таймера и первым выполнением функции, указанной в TimerFcn. Когда Running = 'on', StartDelay только для чтения.

По умолчанию: 0

'StartFcn'

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

  • Если это свойство задается с помощью вектора символов или скаляра строк, то при выполнении обратного вызова MATLAB вычисляет код MATLAB, содержащийся в векторе символов.

  • При указании этого свойства с помощью дескриптора функции, когда MATLAB выполняет обратный вызов, он передает timer объект и структуру события для функции обратного вызова. Структура события содержит тип события в Type поле и время события в Data поле.

  • Если функция обратного вызова принимает аргументы в дополнение к timer object и event data, укажите это свойство как массив ячеек, содержащий дескриптор функции и дополнительные аргументы.

Дополнительные сведения см. в разделе Функции обратного вызова по таймеру.

'StopFcn'

Символьный вектор, строковый скаляр, дескриптор функции или массив ячеек, определяющий функцию, выполняемую при остановке таймера.

  • Если это свойство задается с помощью вектора символов или скаляра строк, то при выполнении обратного вызова MATLAB вычисляет код MATLAB, содержащийся в векторе символов.

  • При указании этого свойства с помощью дескриптора функции, когда MATLAB выполняет обратный вызов, он передает timer объект и структуру события для функции обратного вызова. Структура события содержит тип события в Type поле и время события в Data поле.

  • Если функция обратного вызова принимает аргументы в дополнение к timer object и event data, укажите это свойство как массив ячеек, содержащий дескриптор функции и дополнительные аргументы.

Дополнительные сведения см. в разделе Функции обратного вызова по таймеру.

Таймер останавливается, когда

  • Вы вызываете таймер stop способ.

  • Таймер завершает выполнение TimerFcn. Другими словами, значение TasksExecuted достигает предела, установленного TasksToExecute.

  • Возникает ошибка. ErrorFcn обратный вызов вызывается первым, за которым следует StopFcn обратный вызов.

Вы можете использовать StopFcn для определения действий очистки, таких как удаление объекта таймера из памяти.

'Tag'

Вектор символов или строковый скаляр, представляющий метку для объекта.

'TasksToExecute'

Число больше 0, указывающее количество запусков объекта таймера TimerFcn обратный вызов. Используйте TasksToExecute для установки количества выполнений. Использовать TasksToExecute, необходимо установить ExecutionMode для планирования нескольких событий обратного вызова по таймеру.

По умолчанию: Inf

'TimerFcn'

Символьный вектор, строковый скаляр, дескриптор функции или массив ячеек, определяющий функцию обратного вызова таймера. Перед запуском таймера необходимо определить это свойство.

  • Если это свойство задается с помощью вектора символов или скаляра строк, то при выполнении обратного вызова MATLAB вычисляет код MATLAB, содержащийся в векторе символов.

  • При указании этого свойства с помощью дескриптора функции, когда MATLAB выполняет обратный вызов, он передает timer объект и структуру события для функции обратного вызова. Структура события содержит тип события в Type поле и время события в Data поле.

  • Если функция обратного вызова принимает аргументы в дополнение к timer object и event data, укажите это свойство как массив ячеек, содержащий дескриптор функции и дополнительные аргументы.

Дополнительные сведения см. в разделе Функции обратного вызова по таймеру.

'UserData'

Универсальное поле для данных, которые требуется добавить к объекту.

Свойства

AveragePeriod

Среднее время в секундах между TimerFcn с момента запуска таймера. Значение равно NaN до тех пор, пока таймер не выполнит два обратных вызова таймера.

InstantPeriod

Время в секундах между двумя последними исполнениями TimerFcn. Значение равно NaN до тех пор, пока таймер не выполнит два обратных вызова таймера.

Running

Вектор символов, определенный как 'off' или 'on', указывающее, выполняет ли в данный момент таймер функции обратного вызова.

TasksExecuted

Количество вызовов таймера TimerFcn с момента запуска таймера.

Type

Символьный вектор, определяющий тип объекта.

Методы

удалитьУдалить объект таймера из памяти
добратьсяЗапрос значений свойств для объекта таймера
isvalidОпределение достоверности объекта таймера
наборУстановка значений свойств для объекта таймера
начатьЗапустить объект таймера
startatЗапланировать запуск таймера в указанное время
стопОстановить объект таймера
timerfindНайти объект таймера
timerfindallПоиск объекта таймера независимо от видимости
подождитеБлокировать командную строку до прекращения работы таймера

Копирование семантики

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

Примеры

свернуть все

Отображение сообщения с использованием анонимной функции в качестве функции обратного вызова. Важно отметить, что первые два аргумента, которые передает функция обратного вызова, являются дескриптором объекта таймера и структурой события. Даже если функция не использует эти аргументы, определение функции требует их.

Подождите 3 секунд, а затем вывести сообщение «Прошло 3 секунды».

t = timer;
t.StartDelay = 3;
t.TimerFcn = @(myTimerObj, thisEvent)disp('3 seconds have elapsed');
start(t)
3 seconds have elapsed

Предположим, что для функции не требуется таймер или объект события. Используйте тильду (~), чтобы игнорировать входные данные.

t.TimerFcn = @(~,~) disp('3 seconds have elapsed');
start(t)
3 seconds have elapsed

Удалите объект таймера.

delete(t)

Отображение события и даты/времени при запуске, срабатывании и остановке таймера. Функция обратного вызова таймера выполняется 3 раза с интервалом между вызовами в 2 секунды. Первые два аргумента, которые передает функция обратного вызова, являются дескриптором объекта таймера и структурой события. Структура события содержит два поля: Type - символьный вектор, определяющий тип события, вызвавшего обратный вызов, и Data - структура, содержащая вектор даты и времени возникновения события.

t = timer;
t.StartFcn = @(~,thisEvent)disp([thisEvent.Type ' executed '...
    datestr(thisEvent.Data.time,'dd-mmm-yyyy HH:MM:SS.FFF')]);
t.TimerFcn = @(~,thisEvent)disp([thisEvent.Type ' executed '...
     datestr(thisEvent.Data.time,'dd-mmm-yyyy HH:MM:SS.FFF')]);
t.StopFcn = @(~,thisEvent)disp([thisEvent.Type ' executed '...
    datestr(thisEvent.Data.time,'dd-mmm-yyyy HH:MM:SS.FFF')]);
t.Period = 2;
t.TasksToExecute = 3;
t.ExecutionMode = 'fixedRate';
start(t)
StartFcn executed 14-Mar-2013 09:08:50.865
TimerFcn executed 14-Mar-2013 09:08:50.865
TimerFcn executed 14-Mar-2013 09:08:52.865
TimerFcn executed 14-Mar-2013 09:08:54.866
StopFcn executed 14-Mar-2013 09:08:54.869

Удалите объект таймера.

delete(t)

Создайте объект таймера, чтобы напомнить себе делать 30-секундные эргономичные перерывы каждые 10 минут в течение 8 часов.

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

function t = createErgoTimer()
secondsBreak = 30;
secondsBreakInterval = 600;
secondsPerHour = 60^2;
secondsWorkTime = 8*secondsPerHour;

t = timer;
t.UserData = secondsBreak;
t.StartFcn = @ergoTimerStart;
t.TimerFcn = @takeBreak;
t.StopFcn = @ergoTimerCleanup;
t.Period = secondsBreakInterval+secondsBreak;
t.StartDelay = t.Period-secondsBreak;
t.TasksToExecute = ceil(secondsWorkTime/t.Period);
t.ExecutionMode = 'fixedSpacing';
end 

Используя StartDelay позволяет таймеру запускаться без указания немедленно сделать перерыв. Установите режим выполнения в значение 'fixedSpacing' чтобы 10 минут и 30 секунды (t.Period) проходит после завершения TimerFcn исполнение. Это позволяет растягивать для 30 за секунды до начала следующего 10 минутный интервал.

В createErgoTimer.m добавьте локальную функцию для обработки задач, связанных с запуском таймера. По умолчанию timer объект передает себя и данные события функции обратного вызова. Функция игнорирует данные события.

function ergoTimerStart(mTimer,~)
secondsPerMinute = 60;
secondsPerHour = 60*secondsPerMinute;
str1 = 'Starting Ergonomic Break Timer.  ';
str2 = sprintf('For the next %d hours you will be notified',...
    round(mTimer.TasksToExecute*(mTimer.Period + ...
    mTimer.UserData)/secondsPerHour));
str3 = sprintf(' to take a %d second break every %d minutes.',...
    mTimer.UserData, (mTimer.Period - ...
    mTimer.UserData)/secondsPerMinute);
disp([str1 str2 str3])
end

Добавьте локальную функцию для обработки задач, связанных с выполнением таймера. TimerFcn обратный вызов должен указывать вам принять 30 второй перерыв.

function takeBreak(mTimer,~)
disp('Take a 30 second break.')
end

Добавьте локальную функцию для обработки задач, связанных с остановкой таймера.

function ergoTimerCleanup(mTimer,~)
disp('Stopping Ergonomic Break Timer.')
delete(mTimer)
end

Удаление объекта таймера удаляет его из памяти.

В командной строке вызовите createErgoTimer для создания и запуска таймера.

t = createErgoTimer;
start(t)
Starting Ergonomic Break Timer.  For the next 8 hours you will be notified to take a 30 second break every 10 minutes.

Каждый 10 минут, вам напомнят взять 30 второй перерыв.

Take a break.

Таймер можно оставить работающим для 8 часы или остановка вручную. Напомним, что вы включили задачу удаления таймера из памяти в StopFcn обратный вызов.

stop(t)
Stopping Ergonomic Break Timer.

Совет

  • Чтобы принудительно выполнять функции обратного вызова в очереди событий, включите вызов drawnow функция в коде. drawnow функция удаляет очередь событий.

Представлен до R2006a