MATLAB串口数据读取问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB串口数据读取问题相关的知识,希望对你有一定的参考价值。

如何能在上位机有数据发送到时候才进行读取
我现在的程序用的是timer定时读取
导致的问题就是没有数据发过来时候程序会接到空包导致出错
该怎么办……

给个例子给你:http://blog.csdn.net/qwertyuj/article/details/12108155
大体做法如下:
1、配置好目的串口号,属性。比如波特率、校验位等。
2、编写串口读写调用函数,其中串口中有个中断机制。
比如s.BytesAvailableFcnMode = 'terminator';
数据来了就会进入中断,此时你可读取串口数据。不需要通过timer去中。
3、读完关闭串口。
参考技术A 百度文库里有类似的文档

搜一搜,可以参考追问

兄弟你懂MATLAB吗 我现在大概有点理解 但是不太明确 能问问你吗
急啊……

在 Matlab 中读取和写入二进制文件

【中文标题】在 Matlab 中读取和写入二进制文件【英文标题】:Read and write from/to a binary file in Matlab 【发布时间】:2010-09-17 08:54:16 【问题描述】:

我对matlab的了解只是基于需要知道,所以这可能是一个基本的问题。然而它来了:

我有一个文件,其中包含以二进制格式存储的数据(16 位整数)。如何将它读入matlab中的向量/数组?如何将这些数据写入 matlab 中的文件?在读取/写入大量数据(千兆字节)时,是否有任何智能调整来提高性能速度?

【问题讨论】:

【参考方案1】:

正如Bill the Lizard 所写,您可以使用 fread 将数据加载到向量中。我只想扩展他的答案。

读取数据

>> fid=fopen('data.bin','rb') % opens the file for reading
>> A = fread(fid, count, 'int16') % reads _count_ elements and stores them in A.

fopenfread 命令默认为整数的 Little-endian[1] 编码。如果您的文件是大端编码的,您需要将 fread 更改为

>> A = fread(fid, count, 'int16', 'ieee-be');

另外,如果你想读取整个文件集

>> count=inf;

如果您想将数据读入具有 n 列的矩阵,请使用

>> count=[n inf];

写入数据

至于将数据写入文件。 Bill's 答案中的命令 fwrite 将写入二进制文件。如果要将数据写入文本文件,可以使用 dlmwrite

>> dlmwrite('data.csv',A,',');

参考文献

[1]http://en.wikipedia.org/wiki/Endianness

更新

    机器格式(IE,ieee-beieee-levaxd 等)的二进制数据可以在任一 fopen 或 Matlab 中的 fread 命令。支持的详细信息 机器格式可以在 Matlab 的 fopen 文档。

    Scott French's 评论Bill's answer 建议将数据读入 int16 变量。为此,请使用

    >> A = int16(fread(fid,count,precision,machineFormat));
    

    其中 count 是 要读取的数据,precision 是 数据格式和机器格式 是每个字节的编码。

    查看命令fseek 来移动文件。例如,

    >> fseek(fid,0,'bof');
    

    将文件倒回到 bof 代表文件开头的开头。

【讨论】:

【参考方案2】:

假设您知道文件中存储了多少个值,您可以执行以下操作将数据读入数组。

fid = fopen('data.bin','rb')
A = fread(fid, count, 'int16')

要将数据写入文件,请执行以下操作:

fid = fopen('data.bin','w')
count = fwrite(fid, A, 'int16')

fwrite 函数返回写入文件的元素数(不是字节数)。

就性能调优而言,您可以分块读取数据,只使用您需要处理的数据。这在任何语言中都是一样的,没有办法加快它特定于 Matlab 的速度。

【讨论】:

请注意,fread 的 'int16' 参数会将数据读取为 int16,但会将它们中的每一个都提高到双精度,这可能会对性能造成重大影响。根据您对数据的处理,您可能希望使用“*int16”,它将 int16 读入 int16 类型的变量。【参考方案3】:

我通常讨厌在回复中看到链接,但这看起来非常接近:

http://www.mathworks.com/support/tech-notes/1400/1403.html

关于性能调优的第二部分,我用Matlab已经6年了,所以不知道。

HTH

【讨论】:

以上是关于MATLAB串口数据读取问题的主要内容,如果未能解决你的问题,请参考以下文章

matlab串口接收数据的问题

怎样在matlab中读取串口

matlab读串口数据问题

MATLAB如何保存串口读入的数据?

MATLAB调用串口

关于MATLAB读取端口数据的问题