Main Content

fscanf (serial)

(将删除)读取设备中的 ASCII 数据并将格式设置为文本

serial 对象函数将在以后的版本中删除。请改用 serialport 对象函数。有关更新代码的详细信息,请参阅兼容性考虑

语法

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

说明

A = fscanf(obj) 从与串行端口对象 obj 相连的设备中读取 ASCII 数据并将数据返回到 A。将使用 %c 格式将这些数据转换为文本。对于二进制数据,请使用 fread

A = fscanf(obj,'format') 读取数据并根据 format 进行转换。format 是 C 语言转换说明。转换设定涉及 % 字符和转换字符 d、i、o、u、x、X、f、e、E、g、G、c 和 s。有关详细信息,请参阅 sscanf 文件 I/O 格式说明或 C 语言手册。

A = fscanf(obj,'format',size) 读取 size 指定的值的数目。size 的有效选项包括:

n

最多将 n 个值读入到列向量中。

[m,n]

最多读取 m×n 个值并按列顺序填充 m×n 矩阵。

size 不能是 inf,如果指定数目的值无法存储于输入缓冲区中,则会返回错误。如果 size 的格式不为 [m,n] 并且指定了字符转换,则将以行向量形式返回 A。使用 InputBufferSize 属性指定输入缓冲区的大小(以字节为单位)。ASCII 值为一个字节。

[A,count] = fscanf(...) 返回读取到 count 的值的数目。

如果读取操作未成功完成,[A,count,msg] = fscanf(...) 会将一条警告消息返回到 msg

示例

创建串行端口对象 s 并将 s 连接到 Tektronix® TDS 210 示波器,示波器上将显示正弦波。以下示例可在 Windows® 平台上运行。

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

使用 fprintf 函数配置作用域以测量正弦波的峰值间电压,返回测量类型并返回峰值间电压。

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

因为 ReadAsyncMode 属性的默认值为 continuous,因此与两个查询命令关联的数据将自动返回到输入缓冲区。

s.BytesAvailable
ans =
    21

使用 fscanf 读取测量类型。读取了第一个终止符时,该操作将完成。

meas = fscanf(s)
meas =
PK2PK

使用 fscanf 将峰值间电压作为浮点数读取,并排除终止符。

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

断开 s 与作用域的连接,并从内存和工作区中删除 s

fclose(s)
delete(s)
clear s

提示

必须使用 fopen 函数将设备连接到 obj,才能从设备中读取数据。已连接的串行端口对象的 open 属性值为 Status。如果尝试在 obj 未连接到设备时执行读取操作,将会返回错误。

如果不包含用作输出参数的 msg 并且读取操作失败,则会向命令行返回一条警告消息。

每次发出 fscanf 时,ValuesReceived 属性值将增加所读取的值的数目(包括终止符)。

使用 fscanf 完成读取操作的规则

使用 fscanf 进行的读取操作会屏蔽对 MATLAB® 命令行的访问,直至出现以下情况为止:

  • 已读取 Terminator 属性指定的终止符。

  • Timeout 属性指定的时间已过。

  • 已读取 size 指定的数目的值。

  • 将填充输入缓冲区(除非指定了 size

版本历史记录

在 R2006a 之前推出

全部折叠

R2021a: serial 对象接口将被删除

将删除将此函数用于 serial 对象。要访问串行端口设备,请改为使用 serialport 对象及其函数和属性。

推荐的功能具有额外的能力和改进的性能。有关使用推荐功能的详细信息,请参阅Transition Your Code to serialport Interface

另请参阅

函数