Связь с вашим инструментом включает запись и чтение данных. Например, вы можете записать текстовую команду в функциональный преобразователь, который запрашивает его напряжение от пика к пику, и затем считайте назад значение напряжения как массив с двойной точностью.
Прежде, чем выполнить запись или операцию чтения, необходимо рассмотреть эти три вопроса:
Каков процесс который потоки данных с рабочей области 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
сопоставленный с Национальным контроллером GPIB Instruments™ с параметром плат 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
входной параметр к fprintf
или fwrite
функция.
Например, вы используете следующий синтаксис, чтобы изменить 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 National Instruments с параметром плат 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);