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

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

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

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

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

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

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

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

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

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

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

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

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

fopen(v);

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

v.Status
ans = 
    open

Запись двоичных данных

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

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

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

По умолчанию функция fwrite пишет двоичные данные с помощью точности uchar. Однако другая точность может также использоваться. Для списка поддерживаемой точности смотрите страницу ссылки на функцию для fwrite.

Примечание

При выполнении операции записи необходимо думать о передаваемых данных с точки зрения значений, а не байтов. Значение состоит из одного или нескольких байтов. Например, одно значение uint32 состоит из четырех байтов.

Бинарные свойства записи

OutputBufferSize

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

v.OutputBufferSize
ans = 
    512

Сконфигурируйте размер буфера вывода объекта к 3 000. Обратите внимание, что OutputBufferSize может быть сконфигурирован только, когда объект не соединяется с инструментом.

fclose(v);
v.OutputBufferSize = 3000;
fopen(v);

Запись двоичные данные Int16

Теперь запишите форму волны как int16 массив.

fprintf(v, 'Data:Destination RefB');
fprintf(v, 'Data:Encdg SRPbinary');
fprintf(v, 'Data:Width 2');
fprintf(v, 'Data:Start 1');

t = (0:499) .* 8 * pi / 500;
data = round(sin(t) * 90 + 127);
fprintf(v, 'CURVE #3500');

Обратите внимание на то, что одно int16 значение состоит из двух байтов. Поэтому следующая команда запишет 1 000 байтов.

fwrite(v, data, 'int16')

ValuesSent

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

v.ValuesSent
ans = 
    576

Чтение двоичных данных

Вы используете функцию fread, чтобы считать двоичные данные из инструмента.

По умолчанию данные о чтениях функции fread с помощью uchar точности и блоков командная строка MATLAB до одного из следующего происходят:

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

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

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

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

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

По умолчанию функция fread считывает двоичные данные с помощью точности uchar. Однако другая точность может также использоваться. Для списка поддерживаемой точности смотрите страницу ссылки на функцию для fread.

Примечание

При выполнении операции чтения необходимо думать о полученных данных с точки зрения значений, а не байтов. Значение состоит из одного или нескольких байтов. Например, одно значение uint32 состоит из четырех байтов.

Бинарные свойства чтения

InputBufferSize

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

v.InputBufferSize
ans = 
    512

Сконфигурируйте размер входного буфера объекта к 5 100. Обратите внимание, что InputBufferSize может быть сконфигурирован только, когда объект не соединяется с инструментом.

fclose(v);
v.InputBufferSize = 5100;
fopen(v);

Чтение двоичные данные Int16

Теперь считайте ту же форму волны на канале 1 как int16 массив.

fprintf(v, 'Data:Source CH1');
fprintf(v, 'Data:Encdg SRIbinary');
fprintf(v, 'Data:Width 2');
fprintf(v, 'Data:Start 1');
fprintf(v, 'Curve?')

Обратите внимание на то, что одно int16 значение состоит из двух байтов. Поэтому следующая команда считает 2 400 байтов.

data = fread(v, 1200, 'int16');

ValuesReceived

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

v.ValuesReceived

ans =

    1200

Поскольку мы не могли считать все значения, очистите входной буфер.

flushinput(v);

EOSMode и EOSCharCode

Для VISA-GPIB, объектов, терминатор строки задан путем установки свойства EOSMode объекта читать и установки свойства EOSCharCode объекта на код ASCII для полученного символа. Например, если свойство EOSMode собирается читать, и свойство EOSCharCode установлено в 10, то один из способов, которыми останавливается чтение, - когда символ перевода строки получен.

Сконфигурируйте терминатор строки объекта GPIB к букве E.

set(v, 'EOSMode', 'read');
set(v, 'EOSCharCode', double('E'));

Теперь, считайте канал 1 частота сигнала.

fprintf(v, 'Measurement:Meas1:Source CH1')
fprintf(v, 'Measurement:Meas1:Type Freq')
fprintf(v, 'Measurement:Meas1:Value?')

Примечание: то, что первое чтение останавливается из-за обнаруживаемого EOSCharCode, в то время как второе чтение останавливается из-за утверждаемой строки EOI.

data = fread(v, 30);
char(data)'

Warning: The EOI line was asserted or the EOSCharCode was detected 
% before SIZE values were available.

ans =

    9.9E

data = fread(v, 30);
char(data)'

Warning: The EOI line was asserted or the EOSCharCode was detected 
% before SIZE values were available.

ans =

    37

Очистка

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

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