Асинхронные операции чтения и операции записи Используя VISA

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