Можно улучшить степень и гибкость инструментального приложения управления при помощи событий и коллбэков. Событие имеет место после того, как условие соблюдают и может привести к одному или нескольким коллбэкам.
В то время как MATLAB® соединяется с инструментом, можно использовать события, чтобы отобразить сообщение, данные об отображении, анализировать данные, и так далее. Можно управлять коллбэками через configureCallback
и функции обратного вызова. Функциями обратного вызова являются функции MATLAB, которые вы пишете, чтобы удовлетворить вашим определенным потребностям приложения.
Этот пример использует функцию обратного вызова mycallback
читать из инструмента, когда терминатор строки доступен, чтобы быть считанным. Событие сгенерировано когда Terminator
значение свойства читается. Задайте тип события и функцию обратного вызова, которая будет выполняться с помощью configureCallback
функция. Задайте функцию обратного вызова как указатель на функцию.
function mycallback(src,evt) data = readline(src) disp(evt) end
g = visadev("GPIB0::1::0::INSTR"); configureCallback(g,"terminator",@mycallback) writeline(g,"*IDN?")
Получившееся отображение от mycallback
показан ниже.
data = "TEKTRONIX,TDS 210,0,CF:91.1CT FV:v1.16 TDS2CM:CMV:v1.04" DataAvailableInfo with properties: BytesAvailableFcnCount: 1 AbsTime: 1-Apr-2021 14:54:16
Закончите сеанс VISA-GPIB.
clear g
В следующей таблице перечислены visadev
свойства и функции сопоставлены с коллбэками.
Свойство или функция | Цель |
---|---|
configureCallback | Установите функцию обратного вызова и инициируйте условие для коммуникации |
BytesAvailableFcn | Функция обратного вызова, инициированная байтами доступное событие |
BytesAvailableFcnCount | Количество байтов данных, чтобы инициировать коллбэк |
BytesAvailableFcnMode | Байты доступный триггерный режим коллбэка |
ErrorOccurredFcn | Функция обратного вызова инициирована ошибочным событием |
UserData | Свойство общего назначения для пользовательских данных |
Для получения дополнительной информации о конфигурировании этих свойств и функций, см. visadev Свойства.
Доступное для байтов событие сразу сгенерировано после конкретного количества байтов доступны во входном буфере, или заданный символ терминатора строки читается, как определено BytesAvailableFcnMode
свойство.
Если BytesAvailableFcnMode
byte
, доступное для байтов событие выполняет функцию обратного вызова, заданную для BytesAvailableFcn
свойство каждый раз количество байтов задано BytesAvailableFcnCount
хранится во входном буфере.
Если BytesAvailableFcnMode
terminator
, доступное для байтов событие выполняет функцию обратного вызова, заданную для BytesAvailableFcn
свойство каждый раз символ задано Terminator
свойство читается.
Ошибочное событие сразу сгенерировано после того, как ошибка происходит. Ошибочное событие сгенерировано, когда связь с вашим ресурсом VISA прервана или когда асинхронная ошибка чтения происходит. Ошибочное событие не сгенерировано для ошибок настройки, таких как установка недопустимого значения свойства. Это событие выполняет функцию обратного вызова, заданную для ErrorOccurredFcn
свойство.
Этот пример расширяет Запись и Чтение Двоичных Данных при помощи пользовательской функции обратного вызова mycallback
отобразить событийную информацию к командной строке, когда доступное для байтов событие имеет место во время бинарной операции чтения.
Создайте функцию обратного вызова mycallback
и сохраните его как.m файл в директории, в которой вы работаете.
function mycallback(src,evt) disp(evt) end
Создайте объект VISA-GPIB g
сопоставленный с National Instruments ™® Контроллер GPIB с первичным адресом 1 и вторичным адресом 0.
g = visadev("GPIB0::1::0::INSTR");
Сконфигурируйте значение тайм-аута к двум минутам с учетом медленной передачи данных.
g.Timeout = 120;
Сконфигурируйте g
выполнить функцию обратного вызова mycallback
каждый раз 5 000 байтов хранятся во входном буфере.
configureCallback(g,"byte",5000,@mycallback)
Сконфигурируйте осциллограф, чтобы передать отображение на экране как битовый массив.
writeline(g,"HARDCOPY:PORT GPIB") writeline(g,"HARDCOPY:FORMAT BMP") writeline(g,"HARDCOPY START")
mycallback
называется каждый раз, когда 5 000 байтов хранятся во входном буфере. Получившиеся отображения следующие.
DataAvailableInfo with properties: BytesAvailableFcnCount: 5000 AbsTime: 1-Apr-2021 15:06:11 DataAvailableInfo with properties: BytesAvailableFcnCount: 5000 AbsTime: 1-Apr-2021 15:06:16 DataAvailableInfo with properties: BytesAvailableFcnCount: 5000 AbsTime: 1-Apr-2021 15:06:21
После того, как все данные отправляются во входной буфер, передайте данные рабочему пространству MATLAB как 8-битные целые числа без знака.
out = read(g,g.NumBytesAvailable,"uint8");
Используйте clear
отключать инструмент от объекта VISA-GPIB g
и очистить его от рабочего пространства MATLAB, когда вы закончите работающего с ним.
clear g