Этот пример исследует операции чтения 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
Вы используете функцию 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');
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);
Вы используете функцию 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
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