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