Чтение и запись двоичных данных Используя 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