新建Blank GUI。

在新建Blank GUI界面中,包含了一般的界面元素,如菜单、按钮、坐标轴、控件等。添加必要的串口通信参数设置按钮。

2 串口数据发送与接收功能实现

2.1 建立串口通信流程的基本步骤

Matlab提供了对串口进行打开、关闭、以及串口参数设置等操作的一系列函数。利用这些函数可以选择串口号、设置串口通信参数(波特率、数据位、停止位、校验位等)、进行中断控制、流控制。从建立串口通信到结束串口通信的完整流程包括以下几个步骤:

(1)为应用程序创建串口对象。实现该功能的函数为:

obj = serial('port', 'ProperName',PropertyValue,...);

(3)设置或者修改串口通信参数。在能够有效地进行串口通信前,必须设置正确的串口通信参数。实现该功能的函数为:

obj即为使用创建串口对象函数的返回值;PropertyName为串口通信参数,如baudrate,startbits等。

(4)从串口读写数据。在前面三个步骤正常完成后,即可以从串口读数据或者向串口写数据,也就是接收或者发送数据。实现读串口功能的函数有多个。其区别在于根据到达串口数据的类型选择合适的读函数。主要包括:fgetl,fgets,fread,fscanf。这里主要介绍fread,fread函数实现从串口读入二进制数据。fread的实现形式为:

A=fread(obj,size)

A为读入的数据,以数组的形式存储,存储数据形式为字节;obj即为使用创建串口对象函数的返回值;size指定一次读操作读入字节的个数。实现写串口的函数有两个,分别为fwrite和fprintf。fwrite以二进制形式向串口写入数据,实现形式为:

fwrite(obj,A)

obj即为使用创建串口对象函数的返回值;A为写入的数据,以数组形式存储。fwrite以文本形式向串口写入数据,即以ASCII码的形式向串口写数据,实现形式为:

fprintf(obj,'cmd')

obj即为使用创建串口对象函数的返回值;cmd为写入的文本数据,以数组形式存储。

(5)关闭串口以及释放串口对象占用的存储空间。关闭串口函数为:fclose(obj)。释放串口对象占用的内存空间,函数为:delete(obj)。释放串口对象在Matlab工作区中占用的存储空间,函数为:clear obj。

以上5步是建立串口通信过程到关闭串口,释放串口占用资源的基本步骤。基本步骤可以实现手动收发数据。其例程如下:

运行以上语句后,显示的结果如下:

串口数据接收完毕后,需要关闭串口,并释放串口对象占用的资源,使用的命令如下:

2.2 串口中断设置及中断处理函数

要实现自动收发数据,还需要定义串口中断处理函数以及触发串口中断的方式。定义串口中断处理函数也就是定义串口数据接收或者发送函数。定义触发串口中断的方式其目的是为了在串口检测到接收数据的时候,通知并启动串口数据接收函数进行数据接收操作;在串口输出缓存为空的时候,通知启动串口数据发送函数。

(1)触发串口中断的方式。在Matlab串口通信编程中,Matlab通过检测到串口通信事件,从而触发串口中断。涉及到串口读写的事件包括:Bytes available,Output empty。其中Bytes available事件有两种:一种是接收到的字符数达到人工设定的数目时,则系统产生该事件;另一种是当接收到指定字符时,系统产生该事件。Output erupty事件是在系统检测到输出缓存区为空时,产生该事件。

Bytes available事件需要事先设置。可以使用函数:set(obj,'By tesAvailableFcnMode','byte');set(obj,'BytesAvailableFcn-Count',240);以上两个函数设置当串口检测到输入缓存中到达了240个字符的数据时,则触发串口中断。另外,也可以设置为当系统检测到某个字符达到串口,则触发串口中断。其设置函数为:set(obj,'BytesAvailableFcnMode','terminator');set(obj,'terminator', 'H')。以上两个函数设置当串口检测到字符H时,则触发串口中断。

输出缓存为空事件的产生。该事件由系统自动检测产生,不需要用户特别设置。该事件一般在输出缓存中的最后一个字符发送完毕后产生。用户可以定义该事件引起的串口中断处理函数。

(2)串口中断处理函数。串口中断处理函数可以根据用户需要自行定义。如串口读中断处理函数可以这样定义:obj.BytesAvailableF-cn=@reeeiveData。receiveData即为串口读中断处理函数。在读中断处理函数中可以进行串口读操作。即将输入缓存区中的数据读到用户自定义的存储变量中,以备后续的数据处理与分析。类似可以定义输出缓存为空时触发的串口中断处理函数:obj.OutputEmptyFcn=@write-Data。

本文开发的串口通信程序用于接收采集IMU(Inertial Measurement Unit)输出的加速度计和陀螺的测量数据。通过定义串口读中断事件和串口中断处理函数,实现了数据的自动采集,并以Matlab图形方式实时显示数据。

3 串口通信程序的编译发布

3.1 编译程序

为了对代码进行保密,以及方便用户发布可以在不同平台运行的可执行程序,Matlab提供了Matlab程序编译与发布功能。在进行Matlab程序编译之前,需要设置编译工具。在Matlab命令窗口中,输入运行mbuild-setup,进行编译工具设置。

mbuild-setup命令运行后,Matlab会检测已经安装在本机上的编译器,用户可以自行选择任意一个编译器,选择完毕后,运行编译命令,Matlab将使用用户选定的编译器对程序进行编译。

设置完毕编译工具后,即可以在命令窗口中运行编译命令,将Matlab程序编译成可执行程序。命令格式为:

mcc[-options]mifilel[mfile2…mfileN];

options为编译参数;mfilel为待编译的Matlab文件,如果包含多个Matlab文件,可以直接列在mfilel后面。

如将一个文件名为myfun.m的Matlab文件编译成一个独立可执行程序,可以使用mcc命令:

mcc-m myfun:

mcc命令可以用使用多个编译参数,相应参数的含义可以参见Matlab帮助文档。

3.2 发布程序

Matlab文件编译完毕后,生成的可执行程序还需要.Matlab环境的支持,要发布到没有安装Matlab的机器上运行,还需要进行最后一项工作,即打包Matlab组件运行环境(Matlab Component Runtime,MCR)。将MCR与可执行程序一起打包,拷贝到其他没有安装Matlab的机器上,在该机器上安装MCR,安装完毕即可以直接在该机器上运行编译的Matlab可执行程序。MCR安装文件位于:

Matlab Root\toolbox\compiler\deploy\win32

在2008版Matlab中,已经内置了Matlab编译发布工具箱,在Matlab命令窗口中运行deploytool命令,即可以调出该工具窗口,通过该工具可以方便、快捷地编译发布Matlab程序。

4 结语

Matlab具有强大的科学计算功能和图形显示功能,选用Matlab作为数据处理与分析工具是合适的,但其界面开发和数据采集功能相对较弱,不如VisualC++或者LabView强大。不过,对于一般的界面开发,和普通功能的串口通信开发,Matlab是足以胜任的,同时也可以直接利用其强大的数据分析与处理功能。本文基于Matlab GUI的串口通信功能的编程实现表明利用Matlab GUI可以进行包含一般界面元素的界面开发,在此基础上,加入串口通信功能,实现数据的实时采集与分析处理,并进行图形化显示。

matlab gul介绍及串口通信实现,Matlab - GUl介绍及串口通信实现(转)相关推荐

  1. 通信原理matlab实验课程设计,通信原理matlab课程设计报告

    通信原理matlab课程设计报告 1 目录 一问题描述-----------------------------------------3 二实验原理------------------------- ...

  2. matlab和ansys联合优化,MATLAB与HFSS联合建模与仿真优化详细介绍

    [实例简介] 本文详细介绍了MATLAB与HFSS的联合优化方法,并介绍了基于粒子群算法的阻抗调制表面天线的副瓣优化流程 1. Tools→ Record script to file,保持类型选择( ...

  3. 【通信仿真】基于matlab噪声调频干扰仿真【含Matlab源码 1951期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[通信仿真]基于matlab噪声调频干扰仿真[含Matlab源码 1951期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  4. 【雷达通信】基于matlab GUI相控阵雷达方向图【含Matlab源码 1048期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[雷达通信]基于matlab GUI相控阵雷达方向图[含Matlab源码 1048期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方 ...

  5. 通信原理MATLAB仿真实验50例

    通信原理MATLAB仿真实验50例 一.文章出处 1.1.本文转自 matchfilter的博客 原文链接:http://blog.sina.com.cn/s/articlelist_15036850 ...

  6. matlab中文论坛视频谷普教程MATLAB压缩包介绍

    matlab中文论坛视频谷普教程MATLAB压缩包介绍 我也正在学习这个软件 ,看到这个教程就在这里分享了,希望大家喜欢! Matlab 初学者视频教学 1. Matlab视频:Matlab中文论坛为 ...

  7. PySerial:Python串口通信库的详细介绍、安装及使用方法攻略

    PySerial:Python串口通信库的详细介绍.安装及使用方法攻略 一.PySerial 简介 PySerial 是 Python 的一个串口通信库,支持不同平台下的串口操作.在 Python 应 ...

  8. 低通采样定理 matlab,通信原理MATLAB验证低通抽样定理实验报告

    通信原理MATLAB验证低通抽样定理实验报告 p通信原理实验报告/pp一.实验名称/ppMATLAB验证低通采样定理/pp二.实验目的/pp1.掌握取样定理的工作原理./pp2.通过MATLAB编程实 ...

  9. 基于matlab的跳频系统的仿真,基于MATLAB的跳频通信系统仿真

    科技信息. 计算机与网络 基于MATLABIIJ3=IB频通信系统仿宜 莱芜职业技术学院 山东大学 赵守彬 [摘要]跳频通信是目前常见的扩频通信方式,广泛应用于民用和军事领域.本文通过MATLAB,对 ...

最新文章

  1. 学习理发去哪里_作为女性,学习运维工程师去哪里好
  2. javascript设计模式-组合模式
  3. 学习《Flask Web开发:基于Python的Web应用开发实战》分享
  4. 数据结构与算法---笔记
  5. boost::shared_mutex相关的测试程序
  6. boost::interprocess::anonymous_shared_memory用法的测试程序
  7. centos MySQL 双机_CentOS利用Keepalived构建双主MySQL+双机热备
  8. 可扩展的SockBase设计和实现(1)
  9. 洛谷P1122 最大子树和 树形DP初步
  10. python map zip_Python学习笔记(九) map、zip和filter函数
  11. virtio 网络的演化:原始virtio > vhost-net(内核态) > vhost-user(DPDK) > vDPA
  12. 我们常说的算法时间复杂度和空间复杂度到底是什么?
  13. css3-ghostButton
  14. Qt学习笔记之Hello World
  15. HDOJ1008 Elevator
  16. 触发器:建立时间和保持时间
  17. MYSQL函数group_concat的使用
  18. 在c 语言里如何制作滑动图片大小,[教程]教你在微信小程序中实现手势缩放图片...
  19. 如何用修灯泡解读IT行业
  20. Python学习之道-串口Modbus开发

热门文章

  1. Django实现简单的用户添加、删除、修改等功能
  2. 一道信号量的问题---卖火车票
  3. macos下npm install 报错: fsevents .... permission denined
  4. 软工小学期实践PART ONE
  5. jquery 左右移动 以及使用layer.js弹出框呈现在页面上
  6. 子类既要实现接口又要继承抽象类的一个demo
  7. classpath目录
  8. Silverlight 2动态创建矩形对象(附完整源代码)
  9. python极简代码实现快速排序
  10. 【Educational Codeforces Round 48 (Rated for Div. 2) D】Vasya And The Matrix