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
的有效选项包括:
| 最多将 |
| 最多读取 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
)