Операция записи с помощью fprintf
или fwrite
завершается, когда одно из этих условий удовлетворено:
Заданные данные записаны.
Прошло время, заданное как свойство Timeout.
Кроме того, можно остановить асинхронную операцию записи в любое время с функцией stopasync
.
Инструмент определяет, завершена ли операция записи на основе EOSMode
, EOIMode
и значений свойств EOSCharCode
. Если EOSMode
сконфигурирован или к write
или к read&write
, каждое вхождение \n
в текстовой команде заменяется символом Конца строки (EOS), заданным значением EOSCharCode
. Поэтому, когда вы используете формат fprintf
по умолчанию %s\n
, все текстовые команды, записанные в инструмент, закончатся тем значением. Значением EOSCharCode
по умолчанию является LF
, который соответствует символу перевода строки. Символ EOS, требуемый вашим инструментом, будет описан в его документации.
Если EOIMode
является on
, то строка Конца или идентифицирует (EOI) утверждается, когда последний байт записан в инструмент. Последний байт может быть частью потока двоичных данных или текстового потока данных. Если EOSMode
сконфигурирован или к write
или к read&write
, то последний записанный байт является значением EOSCharCode
, и строка EOI утверждается, когда инструмент получает этот байт.
Операция чтения с fgetl
, fgets
, fread
, fscanf
или readasync
завершается, когда одно из этих условий удовлетворено:
Строка EOI утверждается.
Терминатор строки, заданный свойством EOSCharCode
, читается. Это может произойти только, когда свойство EOSMode
сконфигурировано или к read
или к read&write
.
Прошло время, заданное как свойство Timeout.
Конкретное количество значений читается (только fread
, fscanf
и readasync
).
Входной буфер заполнен (если количество значений не задано).
В дополнение к этим правилам можно остановить асинхронную операцию чтения в любое время с функцией stopasync
.
Эти функции используются при чтении и записи текста:
Функция | Цель |
---|---|
fprintf | Запишите текст в инструмент. |
fscanf | Считайте данные из инструмента и отформатируйте как текст. |
Эти свойства сопоставлены с чтением и записью текста:
Свойство | Цель |
---|---|
ValuesReceived | Задает общее количество значений, считанных из инструмента. |
ValuesSent | Задает общее количество значений, отправленных в инструмент. |
InputBufferSize | Задает общее количество байтов, которые могут быть поставлены в очередь во входном буфере когда-то. |
OutputBufferSize | Задает общее количество байтов, которые могут быть поставлены в очередь в буфере вывода когда-то. |
EOSMode | Конфигурирует режим завершения Конца Строки. |
EOSCharCode | Задает терминатор строки Конца Строки. |
EOIMode | Включает или отключает утверждение режима EOI в конце операции записи. |
Чтобы получить список опций, можно использовать на функции, нажать клавишу Tab после ввода функции на командной строке MATLAB®. Список расширяется, и можно прокрутить, чтобы выбрать свойство или значение. Для получения информации об использовании этой функции завершения вкладки "Дополнительно" смотрите Используя Заполнение клавишей Tab для Функций.
Следующий пример иллюстрирует, как связаться с инструментом GPIB путем записи и чтения текстовых данных.
Инструментом является Tektronix® TDS 210 двухканальный осциллограф. Поэтому многие используемые команды характерны для этого инструмента. Синусоида вводится в канал 2 из осциллографа, и ваше задание должно измерить напряжение от пика к пику входного сигнала:
Создайте инструментальный объект — Создают объект GPIB g
, сопоставленный с Национальным контроллером Instruments® GPIB с параметром плат 0 и инструментом с первичным адресом 1.
g = gpib('ni',0,1);
Соединитесь с инструментом — Подключение g
к осциллографу и возвратите значения по умолчанию для свойств EOSMode
и EOIMode
.
fopen(g) get(g,{'EOSMode','EOIMode'}) ans = 'none' 'on'
Используя эти значения свойств, завершаются операции записи, когда последний байт записан в инструмент и операции чтения, завершенные, когда строка EOI утверждается инструментом.
Запишите и считайте данные — Запись команда *IDN?
к инструменту с помощью fprintf
, и затем считайте назад результат команды с помощью fscanf
.
fprintf(g,'*IDN?') idn = fscanf(g) idn = TEKTRONIX,TDS 210,0,CF:91.1CT FV:v1.16 TDS2CM:CMV:v1.04
Определите источник измерения. Возможные источники измерения включают канал 1 и канал 2 из осциллографа.
fprintf(g,'MEASUREMENT:IMMED:SOURCE?') source = fscanf(g) source = CH1
Осциллограф сконфигурирован, чтобы возвратить измерение в канал 1. Поскольку входной сигнал соединяется с каналом 2, необходимо сконфигурировать инструмент, чтобы возвратить измерение в этот канал.
fprintf(g,'MEASUREMENT:IMMED:SOURCE CH2') fprintf(g,'MEASUREMENT:IMMED:SOURCE?') source = fscanf(g) source = CH2
Можно теперь сконфигурировать осциллограф, чтобы возвратить напряжение от пика к пику, запросить значение этого измерения, и затем возвратить значение напряжения к программному обеспечению IEEE® с помощью fscanf
.
fprintf(g,'MEASUREMENT:MEAS1:TYPE PK2PK') fprintf(g,'MEASUREMENT:MEAS1:VALUE?') ptop = fscanf(g) ptop = 2.0199999809E0
Разъединитесь и вымойтесь — Когда вам больше не нужен g
, необходимо отключить его от инструмента и удалить его из памяти и из рабочей области IEEE.
fclose(g) delete(g) clear g
Свойства записи ASCII
По умолчанию строка Конца или идентифицирует (EOI) утверждается, когда последний байт записан в инструмент. Этим поведением управляет свойство EOIMode
. Когда EOIMode
установлен в on
, строка EOI утверждается, когда последний байт записан в инструмент. Когда EOIMode
установлен в off
, строка EOI не утверждается, когда последний байт записан в инструмент.
Строка EOI может также утверждаться, когда терминатор строки записан в инструмент. Терминатор строки задан свойством EOSCharCode
. Когда EOSMode
сконфигурирован к write
или read&write
, строка EOI утверждается, когда значение свойства EOSCharCode
записано в инструмент.
Все случаи \n
в команде, записанной в инструмент, заменяются значением свойства EOSCharCode
, если EOSMode
установлен в write
или read&write
.
Эти функции используются при чтении и записи двоичных данных:
Функция | Цель |
---|---|
fread | Считайте двоичные данные из инструмента. |
fwrite | Запишите двоичные данные в инструмент. |
Эти свойства сопоставлены с чтением и записью двоичных данных:
Свойство | Цель |
---|---|
ValuesReceived | Задает общее количество значений, считанных из инструмента. |
ValuesSent | Задает общее количество значений, отправленных в инструмент. |
InputBufferSize | Задает общее количество байтов, которые могут быть поставлены в очередь во входном буфере когда-то. |
OutputBufferSize | Задает общее количество байтов, которые могут быть поставлены в очередь в буфере вывода когда-то. |
EOSMode | Конфигурирует режим завершения Конца Строки. |
EOSCharCode | Задает терминатор строки Конца Строки. |
Чтобы получить список опций, можно использовать на функции, нажать клавишу Tab после ввода функции на командной строке MATLAB. Список расширяется, и можно прокрутить, чтобы выбрать свойство или значение. Для получения информации об использовании этой функции завершения вкладки "Дополнительно" смотрите Используя Заполнение клавишей Tab для Функций.
Вы используете функцию fwrite
, чтобы записать двоичные данные в инструмент.
По умолчанию функция fwrite
действует в синхронном режиме. Это означает, что fwrite
блокирует командную строку MATLAB, пока одно из следующего не происходит:
Все данные записаны
Тайм-аут происходит, как задано свойством Timeout
По умолчанию функция fwrite
пишет двоичные данные с помощью точности uchar
. Однако другая точность может также использоваться. Для списка поддерживаемой точности смотрите страницу ссылки на функцию для fwrite
.
Вы используете функцию fread
, чтобы считать двоичные данные из инструмента.
Функциональные блоки fread
командная строка MATLAB до одного из следующего происходят:
Тайм-аут происходит, как задано свойством Timeout
Входной буфер заполнен
Конкретное количество значений читается
Строка EOI утверждается
Терминатор строки получен, как задано свойством EOSCharCode
(если задано)
По умолчанию функция fread
считывает двоичные данные с помощью точности uchar
. Однако другая точность может также использоваться. Для списка поддерживаемой точности смотрите страницу ссылки на функцию для fread
.
При выполнении операции чтения или операции записи, необходимо думать о полученных данных с точки зрения значений, а не байтов. Значение состоит из одного или нескольких байтов. Например, одно значение uint32
состоит из четырех байтов.
Следующий пример иллюстрирует, как можно загрузить отображение на экране осциллографа TDS 210 на программное обеспечение IEEE. Данные об отображении на экране передаются программному обеспечению IEEE и сохранили использование на диск растрового формата Windows®. Эти данные обеспечивают постоянную запись вашей работы и являются простым способом зарегистрировать важный сигнал и параметры осциллографа:
Создайте инструментальный объект — Создают объект GPIB g
, сопоставленный с Национальным Инструментальным контроллером GPIB с параметром плат 0 и инструментом с первичным адресом 1.
g = gpib('ni',0,1);
Сконфигурируйте значения свойств — Конфигурируют входной буфер, чтобы принять довольно большое количество байтов и сконфигурировать значение тайм-аута к двум минутам, чтобы составлять медленную передачу данных.
g.InputBufferSize = 50000; g.Timeout = 120;
Соединитесь с инструментом — Подключение g
к осциллографу.
fopen(g)
Запишите и считайте данные — Конфигурируют осциллограф, чтобы передать отображение на экране как битовый массив.
fprintf(g,'HARDCOPY:PORT GPIB') fprintf(g,'HARDCOPY:FORMAT BMP') fprintf(g,'HARDCOPY START')
Асинхронно передайте данные от инструмента до входного буфера.
readasync(g)
Ожидайте, пока операция чтения не завершается, и затем передайте данные рабочей области IEEE как 8-битные целые числа без знака.
g.TransferStatus ans = idle out = fread(g,g.BytesAvailable,'uint8');
Разъединитесь и вымойтесь — Когда вам больше не нужен g
, необходимо отключить его от инструмента и удалить его из памяти и из рабочей области IEEE.
fclose(g) delete(g) clear g
Чтобы просмотреть растровые данные, необходимо выполнить эти шаги:
Обратите внимание на то, что версии ввода-вывода программного файла MATLAB fopen
, fwrite
и функций fclose
используются.
fid = fopen('test1.bmp','w'); fwrite(fid,out,'uint8'); fclose(fid) a = imread('test1.bmp','bmp');
Отобразите изображение.
imagesc(a)
Используйте серую палитру, поскольку инструмент только генерирует полутоновые изображения.
c = colormap(gray); colormap(flipud(c));
Изображение полученного растрового изображения показывают ниже.
Этот пример иллюстрирует, как использовать функцию scanstr
, чтобы проанализировать данные, которые вы считываете из осциллографа Tektronix TDS 210. scanstr
особенно полезен когда это необходимо, чтобы проанализировать строку в один или несколько элементов массива ячеек, где каждый элемент полон решимости быть или двойным или вектором символов:
Создайте инструментальный объект — Создают объект GPIB g
, сопоставленный с Национальным Инструментальным контроллером GPIB с параметром плат 0 и инструментом с первичным адресом 1.
g = gpib('ni',0,1);
Соединитесь с инструментом — Подключение g
к осциллографу.
fopen(g)
Запишите и считайте данные — Возвращают идентификационную информацию, чтобы разделить элементы массива ячеек с помощью разделителей по умолчанию.
fprintf(g,'*IDN?'); idn = scanstr(g) idn = 'TEKTRONIX' 'TDS 210' [ 0] 'CF:91.1CT FV:v1.16 TDS2CM:CMV:v1.04'
Разъединитесь и вымойтесь — Когда вам больше не нужен g
, необходимо отключить его от инструмента и удалить его из памяти и из рабочего пространства MATLAB.
fclose(g) delete(g) clear g
Этот пример иллюстрирует, как строка EOI и символ EOS используются, чтобы завершить операции чтения и операции записи, и как EOIMode
, EOSMode
и свойства EOSCharCode
связаны друг с другом. В большинстве случаев можно успешно связаться с инструментом путем принятия значений по умолчанию для этих свойств.
Значением по умолчанию для EOIMode
является on
, что означает, что строка EOI утверждается, когда последний байт записан в инструмент. Значением по умолчанию для EOSMode
является none
, что означает, что значение EOSCharCode
не записано в инструмент, и операции чтения не завершатся, когда значение EOSCharCode
будет считано. Поэтому, когда вы используете значения по умолчанию для EOIMode
и EOSMode
,
Операции записи завершаются, когда последний байт записан в инструмент.
Операции чтения завершаются, когда строка EOI утверждается инструментом.
Создайте инструментальный объект — Создают объект GPIB g
, сопоставленный с Национальным Инструментальным контроллером GPIB с параметром плат 0 и инструментом с первичным адресом 1.
g = gpib('ni',0,1);
Соединитесь с инструментом — Подключение g
к осциллографу.
fopen(g)
Запишите и считайте данные — Конфигурируют g
так, чтобы строка EOI не утверждалась после того, как последний байт записан в инструмент, и символ EOS используется, чтобы завершить операции записи. Форматом по умолчанию для fprintf
является %s\n
, где \n
заменяется символом EOS, как дано EOSCharCode
.
g.EOIMode = 'off'; g.EOSMode = 'write'; fprintf(g,'*IDN?') out = fscanf(g) out = TEKTRONIX,TDS 210,0,CF:91.1CT FV:v1.16 TDS2CM:CMV:v1.04
Несмотря на то, что EOSMode
сконфигурирован так, чтобы операции чтения не завершались после получения символа EOS, предыдущая операция чтения, за которой следуют, потому что строка EOI утверждалась.
Теперь сконфигурируйте g
так, чтобы символ EOS не использовался, чтобы завершить операции чтения или операции записи. Поскольку строка EOI не утверждается, и символ EOS не записан, инструмент не может интерпретировать команду *IDN?
, и тайм-аут происходит.
g.EOSMode = 'none'; fprintf(g,'*IDN?') out = fscanf(g) Warning: GPIB: NI: An I/O operation has been canceled mostly likely due to a timeout.
Теперь сконфигурируйте g
так, чтобы операция чтения остановилась после “X” читается символ. Свойство EOIMode
сконфигурировано к on
так, чтобы строка EOI утверждалась после того, как последний байт записан. Свойство EOSMode
сконфигурировано к read
так, чтобы операция чтения завершилась, когда значение EOSCharCode
читается.
g.EOIMode = 'on'; g.EOSMode = 'read'; g.EOSCharCode = 'X'; fprintf(g,'*IDN?') out = fscanf(g) out = TEKTRONIX
Обратите внимание на то, что остальная часть идентификационной строки остается в аппаратном буфере инструмента. Если вы не хотите возвращать эти данные во время следующей операции чтения, необходимо очиститься, это от инструмента буферизует с функцией clrdevice
.
clrdevice(g)
Разъединитесь и вымойтесь — Когда вам больше не нужен g
, необходимо отключить его от инструмента и удалить его из памяти и из рабочего пространства MATLAB.
fclose(g) delete(g) clear g