Степень использования коллбэков событий - это обработка, которую можно выполнить в ответ на события. Вы решаете, с какими событиями вы хотите связать коллбэки и функции, которые эти коллбэки выполняют.
Этот раздел
Описывает, как создать функцию обратного вызова
Описывает, как задать функцию как значение свойства коллбэка
Предоставляет два примера использования коллбэков событий:
Показывает, как использовать коллбэки для просмотра системы координат из полученных систем координат
Примечание
Выполнение функции обратного вызова может быть отложено, если коллбэк включает интенсивную задачу CPU, такую как обновление рисунка.
В этом разделе описывается, как создать функции обратного вызова для TimerFcn
, FramesAcquiredFcn
, StartFcn
, StopFcn
, TriggerFcn
, и ErrorFcn
коллбэки.
Функции обратного вызова требуют как минимум двух входных параметров:
Объект сбора изображений
Структура события, связанная с событием
Заголовок функции для этой функции обратного вызова иллюстрирует этот основной синтаксис.
function mycallback(obj,event)
Первый аргумент, obj
, - сам объект сбора изображений. Поскольку объект доступен, вы можете использовать в функции обратного вызова любую из функций тулбокса, таких как getdata
, которые требуют объект в качестве аргумента. Вы также можете получить доступ ко всем свойствам объекта.
Второй аргумент, event
, - структура события, связанная с событием. Эта информация о событии относится только к событию, которое вызвало выполнение функции обратного вызова. Полный список поддерживаемых типов событий и связанных с ними структур событий см. в разделе Структуры событий.
В дополнение к этим двум необходимым входным параметрам можно также задать дополнительные, специфичные для приложения аргументы для функции обратного вызова.
Примечание
Чтобы получить аргументы объекта и события и любые дополнительные аргументы, необходимо использовать массив ячеек при указании имени функции как значения свойства коллбэка. Для получения дополнительной информации смотрите Определение функций обратного вызова.
Для иллюстрации в этом примере реализуется функция обратного вызова для события, полученного из кадров. Эта функция обратного вызова позволяет вам контролировать системы координат, получаемую путем периодического просмотра системы координат расчета.
Чтобы реализовать эту функцию, функция обратного вызова получает одну систему координат данных и отображает полученную систему координат в MATLAB® окно рисунка. Функция также обращается к структуре события, переданной в качестве аргумента, чтобы отобразить временную метку отображаемой системы координат. The 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
тулбокс функционирует как коллбэки. Для примера этот код устанавливает значение события stop коллбэка в Image Acquisition Toolbox™ start
функция.
vid.StopFcn = @start;
Если при выполнении функции обратного вызова возникает ошибка, тулбокс отключает коллбэк и отображает сообщение, аналогичное следующему.
start(vid) ??? Error using ==> frames_cb Too many input arguments. Warning: The FramesAcquiredFcn callback is being disabled.
Чтобы включить коллбэк, которая была отключена, задайте значение свойства, сопоставленного с коллбэком, или перезапустите объект.
Этот пример создает объект входа видео и устанавливает свойство систем координат полученной функции обратного вызова события на display_frame
функция, созданная в Writing a Функция Обратного Вызова.
Пример устанавливает TriggerRepeat
свойство объекта для 4 так, чтобы 50 системы координат были получены. При запуске пример отображает систему координат выборки из полученных данных каждый раз, когда пять систем координат были получены.
Создайте объект сбора изображений - Этот пример создает объект входа видео для Matrox® устройство для сбора изображений. Чтобы запустить этот пример в своей системе, используйте imaqhwinfo
функция, чтобы получить конструктор объектов для устройства сбора изображений и заменить этот синтаксис следующим кодом.
vid = videoinput('matrox', 1);
Сконфигурируйте значения свойств - Этот пример устанавливает FramesPerTrigger
значение для 30 и TriggerRepeat
свойство для 4. Пример также задает в качестве значения FramesAcquiredFcn
коллбэк функции обратного вызова события display_frame
, созданный в Writing a Функция Обратного Вызова. Объект выполнит FramesAcquiredFcn
каждые пять систем координат, заданных значением FramesAcquiredFcnCount
свойство.
vid.FramesPerTrigger = 30; vid.TriggerRepeat = 4; vid.FramesAcquiredFcnCount = 5; vid.FramesAcquiredFcn = {'display_frame'};
Получите данные - Запустите объект входа видео. Каждый раз, когда пять систем координат получаются, объект выполняет display_frame
функцию обратного вызова. Эта функция обратного вызова отображает последний полученную систему координат, записанный в буфер памяти.
start(vid)
Очистка - Всегда удаляйте объекты сбора изображений из памяти, и переменные, которые ссылаются на них, когда они вам больше не нужны.
delete(vid) clear vid