zoukankan      html  css  js  c++  java
  • MATLAB串口通信与实时数据处理

    % 主要用到的命令及函数
    % 所有注释文字均为原创,用词并非一定准确,仅供参考
    % 没有写GUI的程序,若用VC或.NET写串口通讯的界面程序,需要考虑到多线程任务的处理,比较复杂,因为MATLAB有中断响应事件instrcallback,大大简化了程序的编写;
    % 设置串口号,字符串形式
    
    strSerialPortNum = input('串口号(数字):');
    strSerialPortName = ['COM',num2str(strSerialPortNum)];
    
    % 设置串口参数
    % 设置串口对象
    s = serial(strSerialPortName);
    
    % 设置串口波特率(38400),校验位(偶校验)
    % 其他参数可查看MATLAB帮助文档
    set(s,'BaudRate',38400,'parity','even');
    
    % 设置中断反馈函数
    set(s, 'BytesAvailableFcn', {'instrcallback'});
    
    % 注意函数“instrcallback”的位置,比如我的是D:\Program Files\MATLAB\R2011b\toolbox\shared\instrument\@instrument\instrcallback.m,经验证,把instrcallback.m复制到主程序目录下并不产生作用,应该是只能修改安装目录下%toolbox\shared\instrument\@instrument\instrcallback.m的文件中的程序才有用。
    % 设置中断响应(有10个可用字节时,产生中断)
    set(s, 'BytesAvailableFcnCount', 10);
    
    % 设置中断响应模式(有“byte”和“Terminator”两种模式可选,“byte”是达到一定字节数产生中断,“Terminator”可用作键盘某个按键事件来产生中断)
    set(s, 'BytesAvailableFcnMode', 'byte');
    
    % 设置串口数据最大读写时间,如果超过这个时间,仍读取不到数据,那么则终止读写
    % 注:串口的一些参数必须在打开串口之前进行设置,即在串口状态是“Close”的情况下来进行设置
    set(s, 'TimeOut', 1);
    
    % 打开串口
    fopen(s);
    
    % 向串口发送数据(这里发送一个大写字母“S”,这是我的硬件数据通信握手指令;本来用fprintf(s,'S')命令发送,但是结果只产生一帧的数据,后来在中断响应函数instrcallback中也加入fprintf(s,'S')命令来不断的向硬件发送握手请求,但发现数据的传输速率慢了好几倍,本来是硬件中设置的是发送一次“S”指令,即可不断的产生数据,这样数据传输速率基本能达到每9ms接收10KB的数据,而在上位机MATLAB中循环发送握手指令,数据传输速率慢且不稳定,平均25-40ms接收10KB的数据。查看MATLAB的帮助文档,发现fprintf(s,'S')命令其实是向串口发送了“S\n”这样的指令,所以才会出现只能接收一帧数据(我这里是10KB)的情况。我需要的是单发送字符“S”,需用fprintf(s,'%c','S')指令);
    fprintf(s,'%c','S');
    % 逐帧读取串口数据,这里一帧是10个字节,以2进制方式读取,用uint8(8位无符号整型)参数; receiveData = fread(s,10,'uint8'); % 上面这句命令我是写在中断响应函数instrcallback中的,还有一些数据处理的代码,有时间会详细写在以后的博文中;这句之后即可加上N多的数据处理代码了(instrcallback函数的作用也在于此); % 关闭串口对象 fclose(s); % 删除串口对象(并非必须) delete(s); % 清楚串口对象所占内存(并非必须) clear s;
  • 相关阅读:
    第十四周 Leetcode 315. Count of Smaller Numbers After Self(HARD) 主席树
    POJ1050 To the Max 最大子矩阵
    POJ1259 The Picnic 最大空凸包问题 DP
    POJ 3734 Blocks 矩阵递推
    POJ2686 Traveling by Stagecoach 状态压缩DP
    iOS上架ipa上传问题那些事
    深入浅出iOS事件机制
    iOS如何跳到系统设置里的各种设置界面
    坑爹的私有API
    业务层网络请求封装
  • 原文地址:https://www.cnblogs.com/jmpep/p/4486331.html
Copyright © 2011-2022 走看看