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;
  • 相关阅读:
    AngularJS 最常用的八种功能
    angularJs自定义模块
    angularJs 购物车模型
    angularJs-未加载完成的页面显示混乱ng-bind
    angularJs-脏检查
    angularJs-控制器
    【转载更新】Linux工具之SED 2.应用实例
    【转载更新】Linux工具之SED 1.基础知识
    【转载更新】Linux工具之AWK 4.实例
    【转载更新】Linux工具之AWK 3.高级知识
  • 原文地址:https://www.cnblogs.com/jmpep/p/4486331.html
Copyright © 2011-2022 走看看