Связь с вашим инструментом включает запись и чтение данных. Например, вы можете записать текстовую команду в генератор функций, который запрашивает его пиковое напряжение и затем считать назад значение напряжения как массив двойной точности.
Перед выполнением операции write или read необходимо рассмотреть эти три вопроса:
Каков процесс потока данных из MATLAB?® рабочей области к инструменту, и от инструмента к рабочему пространству MATLAB?
Instrument Control Toolbox™ автоматически управляет данными, переданными между рабочим пространством MATLAB и инструментом. Для многих распространенных приложений можно игнорировать процесс буферизации и потока данных. Однако, если вы переносите большое количество значений, выполняете операцию асинхронного чтения или записи или отлаживаете ваше приложение, вам может потребоваться знать, как этот процесс работает.
Передаются ли данные двоичные (числовые) или текстовые (ASCII)?
Для многих инструментов запись текстовых данных означает запись строковых команд, которые изменяют настройки инструмента, готовят инструмент к возвращению данных или информации о состоянии и так далее. Запись двоичных данных означает запись числовых значений в инструмент, такой как данные калибровки или формы волны.
Будет ли write
или read
доступ функционального блока к Командному окну MATLAB?
Вы управляете доступом к Командному окну MATLAB, определяя, является ли операция чтения или записи синхронной или асинхронной. Синхронная операция блокирует доступ к командной строке, пока функция чтения или записи не завершит выполнение. Асинхронная операция не блокирует доступ к командной строке, и можно выдавать дополнительные команды во время read
или write
функция выполняется в фоновом режиме.
Есть и другие проблемы, которые нужно учитывать, когда вы читаете и записываете данные, такие как условия, при которых операция чтения или записи завершается. Эти проблемы варьируются в зависимости от поддерживаемого интерфейса и описаны в соответствующих разделах интерфейса.
Функции, связанные с записью данных
Имя функции | Описание |
---|---|
Запишите данные бинблока в инструмент. | |
Напишите текст в инструмент. | |
Запишите двоичные данные в инструмент. | |
Остановите асинхронные операции чтения и записи. |
Свойства, связанные с записью данных
Имя свойства | Описание |
---|---|
Укажите количество байтов в буфере выхода. | |
Укажите размер выходного буфера в байтах. | |
Укажите время ожидания для завершения операции чтения или записи. | |
Указывает, выполняется ли операция асинхронного чтения или записи. | |
Укажите общее количество значений, записанных в инструмент. |
Буфер выхода является памятью компьютера, выделенной объектом инструмента для хранения данных, которые должны быть записаны в инструмент. Поток данных из рабочего пространства MATLAB в ваш инструмент следует следующим шагам:
Данные, заданные в write
функция отправляется в выходной буфер.
Данные в выход буфере посылаются в прибор.
The OutputBufferSize
свойство задает максимальное количество байтов, которые можно хранить в выходе буфере. The BytesToOutput
свойство указывает количество байтов в буфере выхода. Значения по умолчанию для этих свойств:
g = gpib('ni',0,1); g.OutputBufferSize ans = 512 g.BytesToOutput ans = 0
Если вы пытаетесь записать больше данных, чем может поместиться в выход буфер, возвращается ошибка, и данные не записываются.
Примечание
При записи данных может потребоваться задать значение, которое может состоять из одного или нескольких байтов. Это потому, что некоторые функции записи позволяют вам управлять количеством бит, записанных для каждого значения, и интерпретацией этих бит как значений символов, целого числа или с плавающей точкой. Для примера, если вы записываете одно значение из инструмента, используя int32
формат, затем это значение состоит из четырех байтов.
Например, предположим, что вы записываете строковую команду *IDN?
к инструменту используя fprintf
функция. Как показано ниже, строка сначала записывается в выходной буфер как шесть значений.
The *IDN?
команда состоит из шести значений, поскольку символ End-Of-String записывается в инструмент, как задано в EOSMode
и EOSCharCode
свойства. Более того, формат данных по умолчанию для fprintf
функция задает, что одно значение соответствует одному байту.
Как показано ниже, после того, как строка сохранена в выход буфере, она затем записывается в инструмент.
Для многих инструментов запись текстовых данных означает запись строковых команд, которые изменяют настройки инструмента, готовят инструмент к возвращению данных или информации о состоянии и так далее. Запись двоичных данных означает запись числовых значений в инструмент, такой как данные калибровки или формы волны.
Вы можете записать текстовые данные с fprintf
функция. По умолчанию, fprintf
использует %s\n
формат, который форматирует данные как строку и включает терминатор строки. Вы можете записать двоичные данные с fwrite
функция. По умолчанию fwrite
записывает данные с помощью uchar
точность, которая преобразует данные как беззнаковые 8-битные символы. Обе эти функции поддерживают многие другие форматы и точности, как описано на их страницах с описанием.
Следующий пример иллюстрирует запись текстовых данных и двоичных данных в Tektronix® осциллограф TDS 210. Текстовые данные состоят из строковых команд, в то время как двоичные данные являются формой волны, которая должна быть загружена в возможности и сохранена в ее памяти:
Создайте объект инструмента - Создайте объект GPIB g
связанные с National Instruments ™® Контроллер GPIB с индексом платы 0 и инструмент с первичным адресом 1. Размер выходного буфера увеличивается для размещения данных формы волны. Необходимо сконфигурировать OutputBufferSize
свойство, в то время как объект GPIB отключен от инструмента.
g = gpib('ni',0,1); g.OutputBufferSize = 3000;
Соедините с прибором - Соедините g
к прибору.
fopen(g)
Запись и чтение данных - Запись строковых команд, которые конфигурируют возможности для хранения двоичных данных формы волны в расположении памяти А.
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]);
The 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
Функции, связанные с чтением данных
Имя функции | Описание |
---|---|
Считайте данные бинблока из инструмента. | |
Прочитайте одну линию текста из инструмента и сбросьте терминатор строки. | |
Прочитайте одну линию текста из инструмента и включите терминатор строки. | |
Считайте двоичные данные с прибора. | |
Считывайте данные с инструмента и форматируйте как текст. | |
Считывайте данные асинхронно с прибора. | |
Считывайте данные с инструмента, форматируйте как текст и анализируйте | |
Остановите асинхронные операции чтения и записи. |
Свойства, связанные с чтением данных
Имя свойства | Описание |
---|---|
Укажите количество байтов, доступных в входе буфере. | |
Укажите размер входного буфера в байтах. | |
Укажите, является ли асинхронное чтение непрерывным или ручным (только последовательный порт, TCPIP, UDP и VISA-последовательные объекты). | |
Укажите время ожидания для завершения операции чтения или записи. | |
Указывает, выполняется ли операция асинхронного чтения или записи. | |
Укажите общее количество значений, считанных с прибора. |
Буфер входа является памятью компьютера, выделенной объектом прибора для хранения данных, которые должны считываться с прибора. Поток данных из вашего инструмента в рабочее пространство MATLAB следует следующим шагам:
Данные, считанные с прибора, хранятся в входе буфере.
Данные в вход буфере возвращаются в Переменный MATLAB, заданную функцией read.
The InputBufferSize
свойство задает максимальное количество байтов, которые можно хранить в входе буфере. The 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
сопоставлен с National Instruments ™ контроллером 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
The ValuesReceived
свойство указывает общее количество значений, считанных с прибора.
g.ValuesReceived ans = 65
Отсоедините и очистите - когда вам больше не нужно g
, следует отсоединить его от инструмента, удалить из памяти и удалить из рабочего пространства MATLAB.
fclose(g) delete(g) clear g
fgetl
, fgets
, fscanf
, и fread
функции работают синхронно и блокируют Командное окно MATLAB до завершения операции. Чтобы выполнить операцию асинхронного чтения, вы используете readasync
функция. readasync
асинхронно считывает данные с прибора и сохраняет их в вход буфере. Чтобы перенести данные из буфера входа в Переменный MATLAB, вы используете одну из функций синхронного чтения.
Примечание
Для последовательных портов, TCPIP, UDP и VISA-последовательных объектов можно также выполнить операцию асинхронного чтения путем настройки 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);