Степень использования коллбэков события является обработкой, которую можно выполнить в ответ на события. Вы решаете, какие события вы хотите сопоставить коллбэки с и функции, которые выполняют эти коллбэки.
Этот раздел
Описывает, как создать функцию обратного вызова
Описывает, как задать функцию как значение свойства коллбэка
Обеспечивает два примера использования коллбэков события:
Показывает, как использовать коллбэки, чтобы просмотреть демонстрационную систему координат от получаемых систем координат
Выполнение функции обратного вызова может быть задержано, если коллбэк включает интенсивную центральным процессором задачу, такую как обновление фигуры.
Этот раздел объясняет, как создать функции обратного вызова для 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
остановка
, или trigger
тулбокс функционирует как коллбэки. Например, это кодовые наборы значение коллбэка события остановки к 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
функция, созданная в письменной форме Функция обратного вызова.
Пример устанавливает TriggerRepeat
свойство объекта к 4 так, чтобы были получены 50 систем координат. Когда запущено, пример отображает демонстрационную систему координат из полученных данных каждый раз, когда пять систем координат были получены.
Создайте объект получения изображений — Этот пример создает объект ввода видео для устройства получения изображений Matrox®. Чтобы запустить этот пример в вашей системе, используйте imaqhwinfo
функция, чтобы получить конструктора Object для вашего устройства получения изображений и заменить тем синтаксисом следующий код.
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