fwrite (serial)
(将删除)将二进制数据写入设备
此 serial 对象函数将在以后的版本中删除。请改用 serialport 对象函数。有关更新代码的详细信息,请参阅版本历史记录。
语法
fwrite(obj,A)
fwrite(obj,A,'precision')
fwrite(obj,A,'mode')
fwrite(obj,A,'precision','mode')
说明
fwrite(obj,A) 将二进制数据 A 写入到已连接到串行端口对象 obj 的设备。
fwrite(obj,A,' 按照 precision')precision 指定的精度写入二进制数据。
precision 控制为每个值写入的位数以及如何将这些位解释为整数、浮点数或字符值。如果未指定 precision,则使用 uchar(8 位无符号字符)。提示中列出了支持的 precision 值。
fwrite(obj,A,' 按照 mode')mode 指定的命令行访问权限写入二进制数据。如果 mode 为 sync,A 是以同步方式写入并且屏蔽命令行。如果 mode 为 async,A 是以异步方式写入并且不屏蔽命令行。如果未指定 mode,则写入操作为同步操作。
fwrite(obj,A,' 按照 precision','mode')precision 指定的精度和 mode 指定的命令行访问权限写入二进制数据。
提示
必须先使用 函数将设备连接到 fopenobj,才能将数据写入其中。已连接的串行端口对象的 open 属性值为 Status。如果尝试在 obj 未连接到设备时执行写入操作,将会返回错误。
每次发出 fwrite 命令时,ValuesSent 属性值将增加所写入的值的数目。
如果输出缓冲区无法容纳要写入的所有数据,将出现错误。您可以使用 OutputBufferSize 属性指定输出缓冲区的大小。
如果将串行对象上的 FlowControl 属性设置为 hardware 却未检测到硬件连接,fwrite 将返回错误消息。如果未连接设备或者连接的设备未声明已准备好接收数据,将出现此情况。检查远程设备的状态和流控制设置,以查看是否硬件流控制导致 MATLAB® 中出现错误。
注意
如果您要检查设备是否已声明准备好接收数据,请将 FlowControl 设置为 none。连接到设备后,请检查 ClearToSend 的 PinStatus 结构体。如果 ClearToSend 为 off,则远程设备端有问题。如果 ClearToSend 为 on,则存在准备接收数据的硬件 FlowControl 设备,您可以执行 fwrite。
同步与异步写入操作
默认情况下,数据将以同步方式写入设备,而且一直屏蔽命令行直到完成该操作为止。您可以通过将 mode 输入参量配置为 async 来执行异步写入。对于异步写入:
BytesToOutput属性值将持续更新以反映输出缓冲区中的字节数。当输出缓冲区为空时,将执行为
OutputEmptyFcn属性指定的回调函数。
您可以使用 TransferStatus 属性确定是否正在执行异步写入操作。
使用 fwrite 完成写入操作的规则
以下情况下使用 fwrite 的二进制写入操作已完成:
已写入指定的数据。
Timeout属性指定的时间已过。注意
未对二进制写入操作使用
Terminator属性。
支持的精度
下表显示了 precision 的支持值。
数据类型 | 精度 | 解释 |
|---|---|---|
字符 |
| 8 位无符号字符 |
| 8 位有符号字符 | |
| 8 位有符号或无符号字符 | |
整数 |
| 8 位整数 |
| 16 位整数 | |
| 32 位整数 | |
| 8 位无符号整数 | |
| 16 位无符号整数 | |
| 32 位无符号整数 | |
| 16 位整数 | |
| 32 位整数 | |
| 32 位或 64 位整数 | |
| 16 位无符号整数 | |
| 32 位无符号整数 | |
| 32 位或 64 位无符号整数 | |
浮点 |
| 32 位浮点 |
| 32 位浮点 | |
| 32 位浮点 | |
| 64 位浮点 | |
| 64 位浮点 |