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