fscanf

Считайте данные из инструмента и отформатируйте как текст

Синтаксис

A = fscanf(obj)
A = fscanf(obj,'format')
A = fscanf(obj,'format',size)
[A,count] = fscanf(...)
[A,count,msg] = fscanf(...)
[A,count,msg,datagramaddress] = fscanf(obj,...)
[A,count,msg,datagramaddress,datagramport] = fscanf(obj,...)

Аргументы

obj

Интерфейсный объект.

формат

Спецификация преобразования языка C.

size

Количество значений, чтобы читать.

A

Данные считаны из инструмента и отформатированы как текст.

count

Количество чтения значений.

msg

Сообщение, указывающее, была ли операция чтения неудачна.

datagramaddress

Адрес дейтаграммного отправителя.

datagramport

Порт дейтаграммного отправителя.

Описание

A = fscanf(obj) считывает данные из инструмента, соединенного с obj, и возвращает его в A. Данные преобразованы в текст с помощью формата %c.

A = fscanf(obj,'format') считывает данные и преобразовывает его согласно format.

format является спецификацией преобразования языка C. Спецификации преобразования включают символ % и символы преобразования d, i, o, u, x, X, f, e, E, g, G, c, и s. Обратитесь к спецификациям формата файлового ввода-вывода sscanf или руководству C для получения дополнительной информации.

A = fscanf(obj,'format',size) читает количество значений, заданных size. Допустимые опции для size

n

Читайте в большинстве значений n в вектор-столбец.

[m,n]

Читайте в большинстве значений m на n, заполняющих матрицу m на n в порядке следования столбцов.

size не может быть inf, и ошибка возвращена, если конкретное количество значений не может храниться во входном буфере. Если size не имеет формы [m,n], и преобразование символов задано, то A возвращен как вектор - строка. Вы задаете размер, в байтах, входного буфера со свойством InputBufferSize. Значение ASCII составляет один байт.

Если obj является объектом UDP, и DatagramTerminateMode является off, значение size соблюдается. Если size является меньше, чем длина дейтаграммы, только значения size читаются. Если size больше, чем длина дейтаграммы, предупреждение выдано, утвердив, что полная дейтаграмма была считана перед значениями size был достигнут.

[A,count] = fscanf(...) возвращает количество чтения значений к count.

[A,count,msg] = fscanf(...) возвращает предупреждающее сообщение в msg, если операция чтения не завершалась успешно.

[A,count,msg,datagramaddress] = fscanf(obj,...) возвращает дейтаграммный адрес в datagramaddress, если obj является объектом UDP. Если больше чем одна дейтаграмма читается, datagramaddress ''.

[A,count,msg,datagramaddress,datagramport] = fscanf(obj,...) возвращает дейтаграммный порт в datagramport, если obj является объектом UDP. Если больше чем одна дейтаграмма читается, datagramport [].

Примеры

Создайте объект последовательного порта s на машине Windows® и соедините s с осциллографом Tektronix® TDS 210, который отображает синусоиду.

s = serial('COM1');
fopen(s)

Используйте функцию fprintf, чтобы сконфигурировать осциллограф, чтобы измерить напряжение от пика к пику синусоиды, возвратить тип измерения и возвратить напряжение от пика к пику.

fprintf(s,'MEASUREMENT:IMMED:TYPE PK2PK')
fprintf(s,'MEASUREMENT:IMMED:TYPE?')
fprintf(s,'MEASUREMENT:IMMED:VAL?')

Поскольку значением по умолчанию для свойства ReadAsyncMode является continuous, данные, сопоставленные с этими двумя командами запроса, автоматически возвращены во входной буфер.

s.BytesAvailable
ans =
    13

Используйте fscanf, чтобы считать тип измерения. Операция завершится, когда первый терминатор строки будет считан.

meas = fscanf(s)
meas =
PK2PK

Используйте fscanf, чтобы считать напряжение от пика к пику как число с плавающей запятой и исключить терминатор строки.

pk2pk = fscanf(s,'%e',6)
pk2pk =
    2.0200

Отключите s от осциллографа и удалите s из памяти и рабочей области.

fclose(s)
delete(s)
clear s

Советы

Прежде чем можно будет считать данные из инструмента, они должны быть соединены с obj с функцией fopen. Связанный интерфейсный объект имеет значение свойства Status open. Ошибка возвращена, при попытке выполнить операцию чтения, в то время как obj не соединяется с инструментом.

Если msg не включен как выходной аргумент, и операция чтения не была успешна, то предупреждающее сообщение возвращено в командную строку.

Значение свойства ValuesReceived увеличено количеством чтения значений — включая терминатор строки — каждый раз, когда fscanf выпущен.

Примечание

Чтобы получить список опций, можно использовать на функции, нажать клавишу Tab после ввода функции на командной строке MATLAB®. Список расширяется, и можно прокрутить, чтобы выбрать свойство или значение. Для получения информации об использовании этой функции завершения вкладки "Дополнительно" смотрите Используя Заполнение клавишей Tab для Функций.

Правила для Завершения Операции чтения с fscanf

Операция чтения с fscanf блокирует доступ к командной строке MATLAB до

  • Терминатор строки читается. Для последовательного порта, TCPIP, UDP и последовательных ВИЗОЙ объектов, терминатор строки дан свойством Terminator. Если Terminator будет пуст, fscanf завершит выполнение и возвратит управление, когда другому критерию будут соответствовать. Для объектов UDP DatagramTerminateMode должен быть off.

    Для всех других интерфейсных объектов терминатор строки дан свойством EOSCharCode.

  • Прошло время, заданное как свойство Timeout.

  • Считалось количество значений, заданных в size. Для объектов UDP DatagramTerminateMode должен быть off.

  • Дейтаграмма получена (для объектов UDP только, когда DatagramTerminateMode является on).

  • Входной буфер заполнен.

  • Строка EOI утверждается (только GPIB и инструменты VXI).

Больше о GPIB и Терминаторе VXI

Значение свойства EOSCharCode распознано только, когда свойство EOSMode сконфигурировано к read или read&write. Например, если EOSMode сконфигурирован к read, и EOSCharCode сконфигурирован к LF, то один из способов, которыми останавливается операция чтения, - когда символ перевода строки получен.

Если EOSMode является none или write, то нет никакого терминатора строки, заданного для операций чтения. В этом случае fscanf завершит выполнение и возвратит управление в команду, когда другому критерию, такому как тайм-аут, будут соответствовать.

Представлено до R2006a