Этот пример исследует асинхронные операции чтения и операции записи с помощью объекта VISA-GPIB. Используемый инструмент был осциллографом Tektronix® TDS 2024.
Этот пример исследует асинхронные операции чтения и операции записи для объекта VISA-GPIB-VXI. Однако асинхронные операции чтения и операции записи для VISA-GPIB, VISA-VXI, VISA-GPIB-VXI, VISA-TCPIP и объектов VISA-USB идентичны друг другу. Поэтому можно использовать те же команды. Единственной разницей является имя ресурса, заданное в конструкторе VISA.
Асинхронные операции чтения и операции записи для последовательного ВИЗОЙ объекта идентичны асинхронным операциям чтения и операциям записи для объекта последовательного порта. Поэтому, чтобы изучить, как выполнить асинхронные операции чтения и операции записи для последовательного ВИЗОЙ объекта, необходимо отослать к Последовательному порту Асинхронный пример по Чтению-записи.
Асинхронные операции чтения и операции записи не поддержаны для объекта VISA-RSIB.
Эти функции сопоставлены с чтением и записью текста асинхронно:
Функция | Цель |
---|---|
fprintf | Запишите текст в инструмент. |
readasync | Асинхронно считайте байты из инструмента. |
stopasync | Остановите асинхронную операцию чтения или операцию записи. |
Эти свойства сопоставлены с чтением и записью текста асинхронно:
Свойство | Цель |
---|---|
BytesAvailable | Указывает на количество байтов, доступных во входном буфере. |
TransferStatus | Указывает, какая асинхронная операция происходит. |
Кроме того, можно использовать все свойства коллбэка во время асинхронных операций чтения и операций записи.
Объект VISA может действовать или в синхронном или в асинхронный режим. В синхронном режиме командная строка MATLAB блокируется до
Операция чтения или операция записи завершаются
Тайм-аут происходит, как задано свойством Timeout
В асинхронном режиме управление сразу возвращено в командную строку MATLAB. Кроме того, можно использовать свойства коллбэка и функции обратного вызова, чтобы выполнить задачи, когда данные пишутся или считываются. Например, можно создать функцию обратного вызова, которая уведомляет вас, когда операция чтения или операция записи закончились.
Необходимо создать объект VISA-GPIB. В этом примере объект создается с помощью драйвера ni
и строки ресурса VISA, показанной ниже.
v = visa('ni', 'GPIB0::2::INSTR')
Прежде чем можно будет выполнить операцию чтения или операцию записи, необходимо соединить объект VISA-GPIB с инструментом с функцией fopen
.
fopen(v)
Если объект был успешно соединен, его свойство Status
автоматически сконфигурировано к open
.
v.Status ans = open
Асинхронной функциональностью чтения объекта VISA-GPIB управляют с функцией readasync
. Запросите инструмент для канала 1 вертикальная шкала:
fprintf(v, 'CH1:Scale?');
Функция readasync
может асинхронно считать данные из инструмента. Функция readasync
возвращает управление в подсказку команды MATLAB сразу.
readasync(v, 20);
Функция readasyn
без заданного размера примет, что размер дан различием между значением свойства InputBufferSize
и значением свойства BytesAvailable
. В вышеупомянутом примере размер равняется 20. Асинхронное чтение останавливается, когда одно из следующего происходит:
Терминатор строки читается, как задано свойством EOSCharCode
Конкретное количество байтов хранится во входном буфере
Тайм-аут происходит, как задано свойством Timeout
Строка EOI утверждалась
Ошибочное событие будет сгенерировано, если readasync
остановится из-за тайм-аута.
TransferStatus
Свойство TransferStatus
указывает, какая асинхронная операция происходит. Для объектов VISA-GPIB TransferStatus
может быть сконфигурирован как read
, write
или idle
.
v.TransferStatus ans = idle
В то время как асинхронное чтение происходит, ошибка происходит, если вы выполняете другую запись или асинхронную операцию чтения. Можно остановить асинхронную операцию чтения с функцией stopasync
. Данные во входном буфере останутся после того, как stopasync
называется. Это позволяет вам приносить данные, которые были считаны в рабочее пространство MATLAB с одной из синхронных стандартных программ чтения (fscanf
, fgetl
, fgets
или fread
).
BytesAvailable
Если мы теперь смотрим на свойство BytesAvailable
, вы видите, что 6 байтов были считаны.
v.BytesAvailable ans = 6
Можно принести данные в рабочее пространство MATLAB с функцией fscanf
.
data = fscanf(v, '%g') data = 1
Теперь, сконфигурируйте объект VISA-GPIB уведомить вас, когда перевод строки будет считан. Свойство BytesAvailableFcnMode
управляет, когда событие BytesAvailable
создается. По умолчанию событие BytesAvailable
создается, когда символ EOSCharCode
получен. Событие BytesAvailable
может также быть создано после определенного числа байтов были считаны. Обратите внимание на то, что свойство BytesAvailableFcnMode
не может быть сконфигурировано, в то время как объект соединяется с инструментом.
set(v, 'BytesAvailableFcn', {'dispcallback'}); set(v, 'EOSCharCode', 10);
Функция обратного вызова dispcallback
отображает сообщение, содержащее тип события, имя объекта, который заставил событие происходить, и время событие, произошла.
Теперь, запросите инструмент для частоты сигнала. Если перевод строки был считан из инструмента и помещен во входной буфер, dispcallback
будет выполняться, и сообщение будет отображено к окну команды MATLAB, указывающему, что событие BytesAvailable
имело место.
fprintf(v, 'CH2:Scale?'); readasync(v);
Позвольте время для ответа. В типовом приложении это - то, где вы могли сделать другие задачи.
pause(0.5); A BytesAvailable event occurred for VISA-GPIB0-2 at 01-Jun-2005 15:08:34. v.BytesAvailable ans = 6 data = fscanf(v, '%c', 6) data = à (0
Обратите внимание на то, что последнее чтение значения является переводом строки (10):
real(data) ans = 224 32 40 16 48 10
Можно выполнить асинхронную запись с fprintf
или функциями fwrite
путем передачи флага 'async'
как последнего входного параметра.
В то время как асинхронная запись происходит, ошибка происходит, если вы выполняете операцию чтения или операцию записи. Можно остановить асинхронную операцию записи с функцией stopasync
. Данные, остающиеся в буфере вывода, будут сброшены.
Также сконфигурируйте объект уведомить вас, когда операция записи завершится путем определения асинхронного коллбэка записи.
set(v, 'OutputEmptyFcn', {'dispcallback'}); fprintf(v, 'CH1:Scale?', 'async');
Если вы закончены с объектом VISA-GPIB, отключаете его от инструмента, удаляете его из памяти и удаляете его из рабочей области.
fclose(v); delete(v); clear v