Чтение и запись данных о ASCII Используя VISA

Этот пример исследует операции чтения ASCII и операции записи с объектом VISA. Используемый инструмент был осциллографом Tektronix® TDS 210.

Поддержка объектов VISA семь интерфейсов: последовательный, GPIB, VXI, GPIB-VXI, TCPIP, USB и RSIB. Этот пример исследует операции чтения ASCII и операции записи с помощью объекта VISA-GPIB. Однако операции чтения ASCII и операции записи для VISA-GPIB, VISA-VXI, VISA-GPIB-VXI, VISA-TCPIP, VISA-SERIAL и объектов VISA-USB идентичны друг другу. Поэтому можно использовать те же команды. Единственной разницей является имя ресурса, заданное в конструкторе VISA.

Операции чтения ASCII и операции записи для последовательного ВИЗОЙ объекта идентичны операциям чтения ASCII и операциям записи для объекта последовательного порта. Поэтому, чтобы изучить, как выполнить операции чтения ASCII и операции записи для последовательного ВИЗОЙ объекта, необходимо обратиться к примеру по Чтению-записи ASCII Последовательного порта.

Операции чтения ASCII и операции записи для объекта VISA-RSIB идентичны операциям чтения ASCII и операциям записи для VISA-GPIB, VISA-VXI, VISA-GPIB-VXI, VISA-TCPIP, и объекты VISA-USB, кроме объекта VISA-RSIB не поддерживает свойства EOSCharCode и EOSMode.

Эти функции используются при чтении и записи текста:

ФункцияЦель
fprintfЗапишите текст в инструмент.
fscanfСчитайте данные из инструмента и отформатируйте как текст.

Эти свойства сопоставлены с чтением и записью текста:

СвойствоЦель
ValuesReceivedЗадает общее количество значений, считанных из инструмента.
ValuesSentЗадает общее количество значений, отправленных в инструмент.
InputBufferSizeЗадает общее количество байтов, которые могут быть поставлены в очередь во входном буфере когда-то.
OutputBufferSizeЗадает общее количество байтов, которые могут быть поставлены в очередь в буфере вывода когда-то.
EOSModeКонфигурирует режим завершения Конца Строки.
EOSCharCodeЗадает терминатор строки Конца Строки.
EOIModeВключает или отключает утверждение режима EOI в конце операции записи.

Конфигурирование и соединение с инструментом

Необходимо создать объект VISA-GPIB. В этом примере объект создается с помощью драйвера ni и строки ресурса VISA, показанной ниже.

v = visa('ni', 'GPIB0::2::INSTR');

Прежде чем можно будет выполнить операцию чтения или операцию записи, необходимо соединить объект VISA-GPIB с инструментом с функцией fopen.

fopen(v);

Если объект был успешно соединен, его свойство Status автоматически сконфигурировано к open.

v.Status
ans = 
    open

Запись данных о ASCII

Вы используете функцию fprintf, чтобы записать данные о ASCII в инструмент. Например, the'Display:Contrast' команда изменит контрастность дисплея осциллографа.

fprintf(v, 'Display:Contrast 45');

По умолчанию функция fprintf действует в синхронном режиме. Это означает, что fprintf блокирует командную строку MATLAB®, пока одно из следующего не происходит:

  • Все данные записаны

  • Тайм-аут происходит, как задано свойством Timeout

По умолчанию fprintf функционирует данные о ASCII записей с помощью формата %s\n. Можно также задать формат команды, записанной путем обеспечения третьего входного параметра fprintf. Принятые символы преобразования формата включают: d, i, o, u, x, X, f, e, E, g, G, c, и s. Например:

fprintf(v, '%s', 'Display:Contrast 45');

Свойства записи ASCII

OutputBufferSize

Свойство OutputBufferSize задает максимальное количество байтов, которые могут быть записаны в инструмент целиком. По умолчанию OutputBufferSize является 512.

v.OutputBufferSize
ans = 
    512

Если команда, заданная в fprintf, содержит больше чем 512 байтов, ошибка возвращена, и никакие данные не записаны в инструмент.

EOIMode, EOSMode и EOSCharCode

По умолчанию строка Конца или идентифицирует (EOI) утверждается, когда последний байт записан в инструмент. Этим поведением управляет свойство EOIMode. Когда EOIMode установлен в on, строка EOI утверждается, когда последний байт записан в инструмент. Когда EOIMode установлен в off, строка EOI не утверждается, когда последний байт записан в инструмент.

Все случаи \n в команде, записанной в инструмент, заменяются значением свойства EOSCharCode, если EOSMode установлен в write или read&write.

ValuesSent

Свойство ValuesSent обновляется количеством значений, записанных в инструмент. Обратите внимание на то, что EOSMode по умолчанию не установлен ни в один. Поэтому EOSCharCode не отправляется как последний байт записи.

fprintf(v, 'Display:Contrast 45');
v.ValuesSent
ans = 
    57

Очистите любые данные во входном буфере прежде, чем переместиться в следующий шаг.

flushinput(v);

Чтение данных о ASCII

Вы используете функцию fscanf, чтобы считать данные о ASCII из инструмента. Например, команда осциллографа 'Display:Contrast?' возвращает контрастность дисплея осциллографа:

fprintf(v, 'Display:Contrast?');
data = fscanf(v)

data =

    45

Блоки fscanf до одного из следующего происходят:

  • Строка EOI утверждается

  • Терминатор строки получен, как задано свойством EOSCharCode

  • Тайм-аут происходит, как задано свойством Timeout

  • Входной буфер заполнен

  • Конкретное количество значений получено

По умолчанию, fscanf функционируют данные о чтениях с помощью формата '%c'. Можно также задать формат данных, считанных путем обеспечения второго входного параметра fscanf. Принятые символы преобразования формата включают: d, i, o, u, x, X, f, e, E, g, G, c, и s. Например, следующая команда возвратит напряжение как десятичное число:

fprintf(v, 'Display:Contrast?');
data = fscanf(v, '%d')

data =

    45

isnumeric(data)

ans =

    1

Свойства чтения ASCII

InputBufferSize

Свойство InputBufferSize задает максимальное количество байтов, которые можно считать из инструмента. По умолчанию InputBufferSize является 512.

v.InputBufferSize
ans = 
    512

ValuesReceived

Свойство ValuesReceived указывает на общее количество значений, считанных из инструмента. Обратите внимание, что последнее полученное значение является переводом строки.

fprintf(v, 'Display:Contrast?');
data = fscanf(v)

data =

    45

v.ValuesReceived

ans =

     9

EOSMode и EOSCharCode

Чтобы отключить передачу данных на основе получения EOSCharCode, необходимо установить свойство EOSMode на read или read&write и свойство EOSCharCode к коду ASCII, для которого должна остановиться операция чтения. Например, если вы устанавливаете EOSMode на read и EOSCharCode к 10, затем один из способов, которыми останавливается чтение, - когда символ перевода строки получен.

Стандартный ответ на вертикальный запрос усиления находится в экспоненциальном представлении.

fprintf(v, 'CH1:Scale?')
data = fscanf(v)

data =

    1.0E0

Теперь сконфигурируйте объект VISA-GPIB отключить операцию чтения, когда символ 'E' будет получен. Первое чтение останавливается, когда символ 'E' получен.

set(v, 'EOSMode', 'read')
set(v, 'EOSCharCode', double('E'))
fprintf(v, 'CH1:Scale?')
data = fscanf(v)

data =

1.0E

Если вы выполняете вторую операцию чтения, она останавливается, когда строка EOI утверждается.

data = fscanf(v)

data =

    0

Очистка

Если вы закончены с объектом VISA-GPIB, отключаете его от инструмента, удаляете его из памяти и удаляете его из рабочей области.

fclose(v);
delete(v);
clear v