Связь с вашим инструментом включает запись и чтение данных. Например, вы можете записать текстовую команду в функциональный преобразователь, который запрашивает его напряжение от пика к пику, и затем считайте назад значение напряжения как массив с двойной точностью.
Прежде, чем выполнить запись или операцию чтения, необходимо рассмотреть эти три вопроса:
Каков процесс который потоки данных с рабочей области MATLAB® на инструмент, и от инструмента до рабочего пространства MATLAB?
Instrument Control Toolbox™ автоматически управляет данными, переданными между рабочим пространством MATLAB и инструментом. Для многих распространенных приложений можно проигнорировать процесс буферизации и потока данных. Однако, если вы передаете большое количество значений, выполняя асинхронную операцию чтения или операцию записи, или отлаживая ваше приложение, вы можете должны быть знать, как этот процесс работает.
Данные должны быть переданы (числовой) двоичный файл или текст (ASCII)?
Для многих инструментов, пишущий текстовые данные означает писать команды строки, которые изменяют инструментальные настройки, готовят инструмент, чтобы возвратить данные или информацию о статусе и так далее. Запись двоичных данных означает писать численные значения в инструмент, такие как данные о форме волны или калибровка.
Будет write
или доступ к функциональному блоку read
к Окну Команды MATLAB?
Вы управляете доступом к Окну Команды MATLAB путем определения, являются ли операция чтения или операция записи синхронными или асинхронными. Синхронная операция блокирует доступ к командной строке до чтения, или функция записи завершает выполнение. Асинхронная операция не блокирует доступ к командной строке, и можно дать дополнительные команды, в то время как функция read
или write
выполняется в фоновом режиме.
Существуют другие проблемы, чтобы рассмотреть, когда вы читаете и записываете данные, как условия, при которых завершаются операция чтения или операция записи. Эти проблемы отличаются в зависимости от поддерживаемого интерфейса и описаны в соответствующих интерфейсно-специфичных главах.
Функции, связанные с Записью данных
FunctionName | Описание |
---|---|
Запишите binblock данные в инструмент. | |
Запишите текст в инструмент. | |
Запишите двоичные данные в инструмент. | |
Остановите асинхронные операции чтения и операции записи. |
Свойства, связанные с Записью данных
PropertyName | Описание |
---|---|
Укажите на количество байтов в настоящее время в буфере вывода. | |
Задайте размер буфера вывода в байтах. | |
Задайте время ожидания, чтобы завершить операцию чтения или операцию записи. | |
Укажите, происходят ли асинхронная операция чтения или операция записи. | |
Укажите на общее количество значений, записанных в инструмент. |
Буфер вывода является памятью компьютера, выделенной инструментальным объектом хранить данные, которые должны быть записаны в инструмент. Поток данных с рабочего пространства MATLAB на ваш инструмент выполняет эти шаги:
Данные, заданные функцией write
, отправляются в буфер вывода.
Данные в буфере вывода отправляются в инструмент.
Свойство OutputBufferSize
задает максимальное количество байтов, которые можно сохранить в буфере вывода. Свойство BytesToOutput
указывает на количество байтов в настоящее время в буфере вывода. Значения по умолчанию для этих свойств:
g = gpib('ni',0,1); g.OutputBufferSize ans = 512 g.BytesToOutput ans = 0
При попытке записать больше данных, чем может поместиться в буфер вывода, ошибка возвращена, и никакие данные не записаны.
При записывании данные вы можете должны быть задать значение, которое может состоять из одного или нескольких байтов. Это вызвано тем, что некоторые функции записи позволяют вам управлять количеством битов, записанных для каждого значения и интерпретации тех битов как символ, целочисленные или значения с плавающей точкой. Например, если вы пишете одно значение из инструмента с помощью формата int32
, затем то значение состоит из четырех байтов.
Например, предположите, что вы пишете команде строки *IDN?
в инструмент с помощью функции fprintf
. Как показано ниже, строка сначала записана в буфер вывода как шесть значений.
Команда *IDN?
состоит из шести значений, потому что Конец символа строки записан в инструмент, как задано свойствами EOSMode
и EOSCharCode
. Кроме того, формат данных по умолчанию для функции fprintf
указывает, что одно значение соответствует одному байту.
Как показано ниже, после того, как строка хранится в буфере вывода, она затем записана в инструмент.
Для многих инструментов, пишущий текстовые данные означает писать команды строки, которые изменяют инструментальные настройки, готовят инструмент, чтобы возвратить данные или информацию о статусе и так далее. Запись двоичных данных означает писать численные значения в инструмент, такие как данные о форме волны или калибровка.
Можно записать текстовые данные с функцией fprintf
. По умолчанию fprintf
использует формат %s\n
, который форматирует данные как строку и включает терминатор строки. Можно записать двоичные данные с функцией fwrite
. По умолчанию fwrite
записывает данные с помощью точности uchar
, которая переводит данные как 8-битные символы без знака. Обе из этих функций поддерживают много других форматов и точности, как описано на их страницах с описанием.
Следующий пример иллюстрирует текстовые данные о записи и двоичные данные к осциллографу Tektronix® TDS 210. Текстовые данные состоят из команд строки, в то время как двоичные данные являются формой волны, которая должна быть загружена на осциллограф и сохранена в его памяти:
Создайте инструментальный объект — Создают объект GPIB g
, сопоставленный с Национальным контроллером Instruments® GPIB с параметром плат 0 и инструментом с первичным адресом 1. Размер буфера вывода увеличен, чтобы хранить данные о форме волны. Необходимо сконфигурировать свойство OutputBufferSize
, в то время как объект GPIB отключается от инструмента.
g = gpib('ni',0,1); g.OutputBufferSize = 3000;
Соединитесь с инструментом — Подключение g
к инструменту.
fopen(g)
Запишите и считайте данные — команды строки Записи, которые конфигурируют осциллограф, чтобы хранить данные о сигнале в двоичной форме в ячейке памяти A.
fprintf(g,'DATA:DESTINATION REFA'); fprintf(g,'DATA:ENCDG SRPbinary'); fprintf(g,'DATA:WIDTH 1'); fprintf(g,'DATA:START 1');
Создайте данные о форме волны.
t = linspace(0,25,2500); data = round(sin(t)*90 + 127);
Запишите данные о сигнале в двоичной форме в осциллограф.
cmd = double('CURVE #42500'); fwrite(g,[cmd data]);
Свойство ValuesSent
указывает на общее количество значений, которые были записаны в инструмент.
g.ValuesSent ans = 2577
Разъединитесь и вымойтесь — Когда вам больше не нужен g
, необходимо отключить его от инструмента, удалить его из памяти и удалить его из рабочего пространства MATLAB.
fclose(g) delete(g) clear g
По умолчанию все функции записи действуют синхронно и блокируют Окно Команды MATLAB, пока операция не завершается. Чтобы выполнить асинхронную операцию записи, вы предоставляете входной параметр async
к функции fwrite
или fprintf
.
Например, вы используете следующий синтаксис, чтобы изменить команды fprintf
, используемые в предыдущем примере, чтобы записать текстовые данные асинхронно.
fprintf(g,'DATA:DESTINATION REFA','async');
Точно так же вы используете следующий синтаксис, чтобы изменить команду fwrite
, используемую в предыдущем примере, чтобы записать двоичные данные асинхронно.
fwrite(g,[cmd data],'async');
Можно контролировать состояние асинхронной операции записи со свойством TransferStatus
. Значение idle
указывает, что никакие асинхронные операции не происходят.
g.TransferStatus ans = write
Можно использовать свойство BytesToOutput
указать на числа байтов, которые существуют в буфере вывода, ожидающем, чтобы быть записанными в инструмент.
g.BytesToOutput ans = 2512
Функции, связанные с чтением данных
FunctionName | Описание |
---|---|
Считайте binblock данные из инструмента. | |
Прочитайте одну строку текста от инструмента и отбросьте терминатор строки. | |
Прочитайте одну строку текста от инструмента и включайте терминатор строки. | |
Считайте двоичные данные из инструмента. | |
Считайте данные из инструмента и отформатируйте как текст. | |
Считайте данные асинхронно из инструмента. | |
Считайте данные из инструмента, отформатируйте как текст, и синтаксический анализ | |
Остановите асинхронные операции чтения и операции записи. |
Свойства, связанные с чтением данных
PropertyName | Описание |
---|---|
Укажите на количество байтов, доступных во входном буфере. | |
Задайте размер входного буфера в байтах. | |
Задайте, является ли асинхронное чтение непрерывным или ручным (только последовательный порт, TCPIP, UDP и последовательные ВИЗОЙ объекты). | |
Задайте время ожидания, чтобы завершить операцию чтения или операцию записи. | |
Укажите, происходят ли асинхронная операция чтения или операция записи. | |
Укажите на общее количество значений, считанных из инструмента. |
Входной буфер является памятью компьютера, выделенной инструментальным объектом хранить данные, которые должны быть считаны из инструмента. Поток данных от вашего инструмента до рабочего пространства MATLAB выполняет эти шаги:
Данные, считанные из инструмента, хранятся во входном буфере.
Данные во входном буфере возвращены в переменную MATLAB, заданную функцией чтения.
Свойство InputBufferSize
задает максимальное количество байтов, которые можно сохранить во входном буфере. Свойство BytesAvailable
указывает на количество байтов, в настоящее время доступных, чтобы быть считанным из входного буфера. Значения по умолчанию для этих свойств:
g = gpib('ni',0,1); g.InputBufferSize ans = 512 g.BytesAvailable ans = 0
При попытке считать больше данных, чем может поместиться во входной буфер, ошибка возвращена, и никакие данные не считаны.
Например, предположите, что вы используете функцию fscanf
, чтобы считать основанный на тексте ответ команды *IDN?
, ранее записанной в инструмент. Данные сначала считаны во входной буфер.
Обратите внимание на то, что для данной операции чтения, вы не можете знать количество байтов, возвращенных инструментом. Поэтому вы можете должны быть задать свойство InputBufferSize
к достаточно большому значению прежде, чем соединить инструментальный объект.
Как показано ниже, после того, как данные хранятся во входном буфере, они затем передаются выходной переменной, заданной fscanf
.
Для многих инструментов, считывая текстовые данные означает данные о строке чтения, которые отражают инструментальные настройки, информацию о статусе, и так далее. Чтение двоичных данных означает читать численные значения из инструмента.
Можно считать текстовые данные с fgetl
, fgets
и функциями fscanf
. По умолчанию эти функции возвращают данные с помощью формата %c
. Можно считать двоичные данные с функцией fread
. По умолчанию fread
возвращает численные значения как массивы с двойной точностью. И fscanf
и функции fread
поддерживают много других форматов и точности, как описано на их страницах с описанием.
Следующий пример иллюстрирует текстовые данные о чтении и двоичные данные от осциллографа Tektronix TDS 210, который отображает периодический входной сигнал с номинальной частотой 1,0 кГц.
Создайте инструментальный объект — Создают объект GPIB g
, сопоставленный с Национальным Инструментальным контроллером GPIB с параметром плат 0 и инструментом с первичным адресом 1.
g = gpib('ni',0,1);
Соединитесь с инструментом — Подключение g
к инструменту.
fopen(g)
Запишите и считайте данные — Запись команда *IDN?
к осциллографу и считайте назад идентификационную информацию как текст.
fprintf(g,'*IDN?') idn = fscanf(g) idn = TEKTRONIX,TDS 210,0,CF:91.1CT FV:v1.16 TDS2CM:CMV:v1.04
Сконфигурируйте осциллограф, чтобы возвратить период входного сигнала, и затем считать период как двоичное значение. Формат вывода сконфигурирован, чтобы использовать короткое экспоненциальное представление для, удваивается.
fprintf(g,'MEASUREMENT:MEAS1:TYPE PERIOD') fprintf(g,'MEASUREMENT:MEAS1:VALUE?') format short e period = fread(g,9)' period = 49 46 48 48 54 69 45 51 10
period
состоит из положительных целых чисел, представляющих коды символов, где 10
является переводом строки. Чтобы преобразовать значение периода в строку, используйте функцию char
.
char(period) ans = 1.006E-3
Свойство ValuesReceived
указывает на общее количество значений, которые были считаны из инструмента.
g.ValuesReceived ans = 65
Разъединитесь и вымойтесь — Когда вам больше не нужен g
, необходимо отключить его от инструмента, удалить его из памяти и удалить его из рабочего пространства MATLAB.
fclose(g) delete(g) clear g
fgetl
, fgets
, fscanf
и функции fread
действуют синхронно и блокируют Окно Команды MATLAB, пока операция не завершается. Чтобы выполнить асинхронную операцию чтения, вы используете функцию readasync
. readasync
асинхронно считывает данные из инструмента и хранит его во входном буфере. Чтобы передать данные от входного буфера до переменной MATLAB, вы используете одну из синхронных функций чтения.
Для последовательного порта, TCPIP, UDP и последовательных ВИЗОЙ объектов, можно также выполнить асинхронную операцию чтения путем конфигурирования свойства ReadAsyncMode
к continuous
.
Например, чтобы изменить предыдущий пример, чтобы асинхронно считать идентификационную информацию осциллографа, вы выпустили бы функцию readasync
после того, как команда *IDN?
записана.
fprintf(g,'*IDN?') readasync(g)
Можно контролировать состояние асинхронной операции чтения со свойством TransferStatus
. Значение idle
указывает, что никакие асинхронные операции не происходят.
g.TransferStatus ans = read
Можно использовать свойство BytesAvailable
указать на количество байтов, которые существуют во входном буфере, ожидающем, чтобы быть переданными рабочему пространству MATLAB.
g.BytesAvailable ans = 56
Когда чтение завершается, можно передать данные как текст к переменной MATLAB с помощью функции fscanf
.
idn = fscanf(g);