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