Создание и выполнение функций обратного вызова

Введение

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

Этот раздел

Примечание

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

Создание функций обратного вызова

Этот раздел объясняет, как создать функции обратного вызова для 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 систем координат. Когда запущено, пример отображает демонстрационную систему координат из полученных данных каждый раз, когда пять систем координат были получены.

  1. Создайте объект получения изображений — Этот пример создает объект ввода видео для устройства получения изображений Matrox®. Чтобы запустить этот пример в вашей системе, используйте imaqhwinfo функция, чтобы получить конструктора Object для вашего устройства получения изображений и заменить тем синтаксисом следующий код.

    vid = videoinput('matrox', 1);
  2. Сконфигурируйте значения свойств — Этот пример устанавливает FramesPerTrigger значение к 30 и TriggerRepeat свойство к 4. Пример также задает как значение FramesAcquiredFcn коллбэк функция обратного вызова события display_frame, созданный в письменной форме Функция обратного вызова. Объект выполнит FramesAcquiredFcn каждые пять систем координат, как задано значением FramesAcquiredFcnCount свойство.

    vid.FramesPerTrigger = 30;
    vid.TriggerRepeat = 4;
    vid.FramesAcquiredFcnCount = 5;
    vid.FramesAcquiredFcn = {'display_frame'};
  3. Получите данные — Запускают объект ввода видео. Каждый раз, когда пять систем координат получены, объект выполняет display_frame функция обратного вызова. Эта функция обратного вызова отображает последний раз полученную систему координат, регистрируемую к буферу памяти.

    start(vid)
  4. Вымойтесь — Всегда удаляют объекты получения изображений из памяти и переменные, которые ссылаются на них, когда вам больше не нужны они.

    delete(vid)
    clear vid