Степень использования коллбэков события состоит в том, что можно выполнить обработку в ответ на события. Вы решаете, какие события, с которыми вы хотите сопоставить коллбэки, и который функционирует, эти коллбэки выполняют.
Выполнение функции обратного вызова может быть задержано, если коллбэк включает интенсивную центральным процессором задачу, или если MATLAB обрабатывает другую задачу.
Функции обратного вызова требуют по крайней мере двух входных параметров:
Объект OPC Toolbox™
Структура события сопоставлена с событием
Функциональный заголовок для этой функции обратного вызова иллюстрирует этот базовый синтаксис.
function mycallback(obj,event)
Первый аргумент, obj
, сам объект тулбокса. Поскольку объект доступен, можно использовать в функции обратного вызова любую из функций тулбокса, таких как getdata
, это требует объекта в качестве аргумента. Можно также получить доступ ко всем свойствам объектов, включая родительский элемент и дочерние элементы объекта.
Второй аргумент, event
, структура события, сопоставленная с событием. Эта информация о событии принадлежит только событию, которое заставило функцию обратного вызова выполняться. Для полного списка поддерживаемых типов событий и их связанных структур события, смотрите Структуры События.
В дополнение к этим двум необходимым входным параметрам можно также задать специализированные аргументы для функции обратного вызова.
Если вы задаете входные параметры в дополнение к объекту и аргументам события, необходимо использовать массив ячеек при определении имени функции как значения свойства коллбэка. Для получения дополнительной информации смотрите, Задают Функции обратного вызова.
Этот пример реализует функцию обратного вызова для, записи получили событие. Эта функция обратного вызова позволяет вам контролировать записи, получаемые путем просмотра последний раз полученных записей в окне графика.
Чтобы реализовать эту функцию, функция обратного вызова получает последние 60 записей данных (или меньше, если недостаточно данных доступно в механизме программного обеспечения OPC Toolbox), и отображает данные в окне фигуры MATLAB. Функция также получает доступ к структуре события, переданной в качестве аргумента, чтобы отобразить метку времени события. drawnow
команда в функции обратного вызова обеспечивает MATLAB, чтобы обновить отображение.
function display_opcdata(obj,event) numRecords = min(obj.RecordsAvailable, 100); lastRecords = peekdata(obj,numRecords); [i, v, q, t] = opcstruct2array(lastRecords); plot(t, v); isBad = strncmp('Bad', q, 3); isRep = strncmp('Repeat', q, 6); hold on for k=1:length(i) h = plot(t(isBad(:,k),k), v(isBad(:,k),k), 'o'); set(h,'MarkerEdgeColor','k', 'MarkerFaceColor','r') h = plot(t(isRep(:,k),k), v(isRep(:,k),k), '*'); set(h,'MarkerEdgeColor',[0.75, 0.75, 0]); end axis tight; ylim([0, 200]); datetick('x','keeplimits'); eventTime = event.Data.LocalEventTime; title(sprintf('Event occurred at %s', ... datestr(eventTime, 13))); drawnow; % force an update of the figure window hold off;
Чтобы видеть, как эта функция может использоваться в качестве коллбэка, вид на море Недавно Записанные данные.
Вы сопоставляете функцию обратного вызова с определенным событием путем устанавливания значения свойства объекта OPC Toolbox, сопоставленного с тем событием. Можно задать функцию обратного вызова как значение свойства одним из трех способов:
Следующие разделы предоставляют больше информации о каждой из этих опций.
Получить доступ к объекту или структуре события передало функции обратного вызова, необходимо задать функцию как массив ячеек или как указатель на функцию.
Можно задать функцию обратного вызова как вектор символов. Например, этот код задает функцию обратного вызова mycallback
как значение свойства StartFcn
коллбэка события запуска для группового объекта
grp
.
grp.StartFcn = 'mycallback';
В этом случае коллбэк оценен в рабочем пространстве MATLAB.
Можно задать функцию обратного вызова как вектор символов в массиве ячеек.
Например, этот код задает функцию обратного вызова mycallback
как значение свойства StartFcn
коллбэка события запуска для группового объекта
grp
.
grp.StartFcn = {'mycallback'};
Чтобы задать дополнительные параметры, включайте их как дополнительные элементы в массиве ячеек.
time = datestr(now,0);
grp.StartFcn = {'mycallback',time};
Первые два аргумента, переданные функции обратного вызова, являются все еще объектом OPC Toolbox (obj
) и структура события (event
). Дополнительные аргументы следуют за этими двумя аргументами.
Можно задать функцию обратного вызова как указатель на функцию.
Например, этот код задает функцию обратного вызова mycallback
как значение свойства StartFcn
коллбэка события запуска для группового объекта
grp
.
grp.StartFcn = @mycallback;
Чтобы задать дополнительные параметры, включайте указатель на функцию и параметры как элементы в массиве ячеек.
time = datestr(now,0); grp.StartFcn = {@mycallback,time};
Если вы выполняете локальную функцию обратного вызова из файла, необходимо задать коллбэк как указатель на функцию.
В дополнение к определению функций обратного вызова вашего собственного создания можно также задать функции тулбокса как коллбэки. Например, это кодовые наборы значение коллбэка события остановки к start
функция.
grp.StopFcn = @start;
Если ошибка происходит в выполнении функции обратного вызова, тулбокс отключает коллбэк и отображает сообщение, похожее на следующее.
start(grp)
??? Error using ==> myrecords_cb Too many input arguments. Warning: The RecordsAcquiredFcn callback is being disabled.
Включить коллбэк, который был отключен, устанавливало значение свойства, сопоставленного с коллбэком.
Этот пример конфигурирует иерархию объектов OPC Toolbox и устанавливает приобретенное имущество функции обратного вызова события рекордов к display_opcdata
функция, созданная в Записи Функция обратного вызова.
Когда запущено, пример отображает последние 60 записей полученных данных каждый раз, когда 5 записей были получены. Повторите, что значения подсвечены с пурпурными кругами, и плохие значения подсвечены с красными кругами.
Этот пример создает иерархию объектов OPC Toolbox для Сервера Симуляции Matrikon™. Чтобы запустить этот пример в вашей системе, у вас должен быть установленный Сервер Симуляции Matrikon. В качестве альтернативы можно заменить значения, используемые в создании объектов со значениями для сервера, к которому можно получить доступ.
da = opcda('localhost','Matrikon.OPC.Simulation.1'); connect(da) grp = addgroup(da,'CallbackTest'); itm1 = additem(grp,'Triangle Waves.Real8'); itm2 = additem(grp,'Saw-toothed Waves.UInt2');
Этот пример устанавливает UpdateRate
значение к 0,2 секундам и RecordsToAcquire
свойство к 200. Пример также задает как значение RecordsAcquiredFcn
коллбэк функция обратного вызова события display_opcdata
, созданный в Записи Функция обратного вызова. Объект выполнит RecordsAcquiredFcn
каждые 5 записей, как задано значением RecordsAcquiredFcnCount
свойство.
grp.UpdateRate = 0.2; grp.RecordsToAcquire = 200; grp.RecordsAcquiredFcnCount = 5; grp.RecordsAcquiredFcn = @display_opcdata;
Запустите dagroup
объект. Каждый раз, когда 5 записей получены, объект выполняет display_opcdata
функция обратного вызова. Эта функция обратного вызова отображает последний раз полученные записи, регистрируемые к буферу памяти.
start(grp) wait(grp)
Всегда удаляйте объекты тулбокса из памяти и переменные, которые ссылаются на них, когда вам больше не нужны они. Удаление opcda
объект клиента также удаляет объекты элемента и группа.
disconnect(da) delete(da) clear da grp itm1 itm2