Сила использования обратных вызовов событий - это обработка, которую можно выполнить в ответ на события. Выбор событий, с которыми требуется связать обратные вызовы, и функций, выполняемых этими обратными вызовами.
Этот раздел
Описывает, как создать функцию обратного вызова
Описывает, как указать функцию в качестве значения свойства обратного вызова
Предоставляет два примера использования обратных вызовов событий:
Показывает, как использовать обратные вызовы для просмотра образца кадра из собираемых кадров
Примечание
Выполнение функции обратного вызова может быть задержано, если обратный вызов связан с интенсивной задачей ЦП, такой как обновление фигуры.
В этом разделе описывается создание функций обратного вызова для TimerFcn, FramesAcquiredFcn, StartFcn, StopFcn, TriggerFcn, и ErrorFcn обратные вызовы.
Функции обратного вызова требуют как минимум двух входных аргументов:
Объект получения изображения
Структура события, связанная с событием
Заголовок функции для этой функции обратного вызова иллюстрирует этот основной синтаксис.
function mycallback(obj,event)
Первый аргумент, obj, - сам объект получения изображения. Поскольку объект доступен, в функции обратного вызова можно использовать любую из функций панели инструментов, например: getdata, которые требуют объект в качестве аргумента. Также можно получить доступ ко всем свойствам объекта.
Второй аргумент, event, - структура события, связанная с событием. Эта информация о событии относится только к событию, вызвавшему выполнение функции обратного вызова. Полный список поддерживаемых типов событий и связанных с ними структур событий см. в разделе Структуры событий.
В дополнение к этим двум необходимым входным аргументам можно также указать дополнительные, специфичные для приложения аргументы для функции обратного вызова.
Примечание
Чтобы получить аргументы объекта и события, а также любые дополнительные аргументы, необходимо использовать массив ячеек при указании имени функции в качестве значения свойства обратного вызова. Дополнительные сведения см. в разделе Определение функций обратного вызова.
Для иллюстрации в этом примере реализована функция обратного вызова для события получения кадров. Эта функция обратного вызова позволяет отслеживать кадры, полученные путем периодического просмотра образца кадра.
Для реализации этой функции функция обратного вызова получает один кадр данных и отображает полученный кадр в окне изображения MATLAB ®. Функция также обращается к структуре события, передаваемой в качестве аргумента для отображения временной метки отображаемого кадра. drawnow команда в функции обратного вызова заставляет MATLAB обновлять дисплей.
function display_frame(obj,event)
sample_frame = peekdata(obj,1);
imagesc(sample_frame);
drawnow; % force an update of the figure window
abstime = event.Data.AbsTime;
t = fix(abstime);
sprintf('%s %d:%d:%d','timestamp', t(4),t(5),t(6))Сведения о том, как эту функцию можно использовать в качестве обратного вызова, см. в разделе Просмотр образца кадра.
Функция обратного вызова связывается с определенным событием путем установки значения свойства обратного вызова события. Объект ввода видео поддерживает свойства обратного вызова для всех типов событий.
Функцию обратного вызова можно задать в качестве значения свойства любым из трех способов:
В следующих разделах содержится дополнительная информация о каждой из этих опций.
Примечание
Чтобы получить доступ к объекту или структуре событий, переданным функции обратного вызова, необходимо указать функцию как массив ячеек или как дескриптор функции.
Функцию обратного вызова можно указать как символьный вектор. Например, этот код определяет функцию обратного вызова mycallback в качестве значения свойства обратного вызова начального события StartFcn для объекта ввода видео vid.
vid.StartFcn = 'mycallback';
В этом случае обратный вызов оценивается в рабочей области MATLAB.
Функцию обратного вызова можно указать как символьный вектор внутри массива ячеек.
Например, этот код определяет функцию обратного вызова mycallback в качестве значения свойства обратного вызова начального события StartFcn для объекта ввода видео vid.
vid.StartFcn = {'mycallback'};Чтобы задать дополнительные параметры, включите их в массив ячеек в качестве дополнительных элементов.
time = datestr(now,0);
vid.StartFcn = {'mycallback',time};Первые два аргумента, переданные функции обратного вызова, по-прежнему являются объектом ввода видео (obj) и структура события (event). Дополнительные аргументы следуют за этими двумя аргументами.
Функцию обратного вызова можно указать как дескриптор функции.
Например, этот код определяет функцию обратного вызова mycallback в качестве значения свойства обратного вызова начального события StartFcn для объекта ввода видео vid.
vid.StartFcn = @mycallback;
Чтобы указать дополнительные параметры, включите дескриптор функции и параметры в качестве элементов массива ячеек.
time = datestr(now,0);
vid.StartFcn = {@mycallback,time};При выполнении функции локального обратного вызова из файла MATLAB необходимо указать обратный вызов в качестве дескриптора функции.
В дополнение к заданию функций обратного вызова собственного создания можно также указать start, stop, или trigger панель инструментов функционирует как обратные вызовы. Например, этот код задает значение обратного вызова события остановки для получения изображения Toolbox™ start функция.
vid.StopFcn = @start;
Если при выполнении функции обратного вызова возникает ошибка, панель инструментов отключает обратный вызов и выводит сообщение, аналогичное следующему.
start(vid) ??? Error using ==> frames_cb Too many input arguments. Warning: The FramesAcquiredFcn callback is being disabled.
Чтобы включить обратный вызов, который был отключен, задайте значение свойства, связанного с обратным вызовом, или перезапустите объект.
В этом примере создается объект ввода видео и устанавливается свойство функции обратного вызова полученного события кадров в значение display_frame функция, созданная при записи функции обратного вызова.
Пример устанавливает TriggerRepeat свойство объекта 4, чтобы получить 50 кадров. При выполнении в примере отображается образец кадра из полученных данных каждый раз, когда получены пять кадров.
Создать объект получения изображения - в этом примере создается объект ввода видео для устройства получения изображения Matrox ®. Для запуска этого примера в системе используйте imaqhwinfo чтобы получить конструктор объекта для устройства получения изображения и заменить этот синтаксис следующим кодом.
vid = videoinput('matrox', 1);Настройка значений свойств - в этом примере задается значение FramesPerTrigger значение 30 и TriggerRepeat свойство 4. В примере также указывается значение FramesAcquiredFcn обратный вызов функции обратного вызова события display_frame, созданный при записи функции обратного вызова. Объект выполнит FramesAcquiredFcn каждые пять кадров, как указано значением FramesAcquiredFcnCount собственность.
vid.FramesPerTrigger = 30;
vid.TriggerRepeat = 4;
vid.FramesAcquiredFcnCount = 5;
vid.FramesAcquiredFcn = {'display_frame'};Получить данные - запуск объекта ввода видео. Каждый раз при получении пяти кадров объект выполняет display_frame функция обратного вызова. Эта функция обратного вызова отображает последний полученный кадр, зарегистрированный в буфере памяти.
start(vid)
Очистить - всегда удалять объекты сбора изображений из памяти и переменные, которые ссылаются на них, когда они больше не нужны.
delete(vid) clear vid