《基于Matlab GUI的串口通信编程实现.pdf》由会员分享,可在线阅读,更多相关《基于Matlab GUI的串口通信编程实现.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于 Matlab GUI 的串口通信编程实现王战军1,沈?明2(1.91329 部队装备部,山东 威海?264200;2.92859 部队,天津?300061)摘?要:Matlab 不仅具有强大的科学计算功能,还内置了 GUI 工具用于进行界面开发。利用 Matlab 的 GUI 工具和内置的串口通信 API,设计开发一个可视化的串口通信例程,实现 IMU 原始数据的接收采集,并利用 Matlab 强大的科学计算功能,对数据进行实时处理,图形化显示数据处理结果。最后介绍了编译发布 M atlab 程序的步骤与注意事项。关键词:Matlab GUI;串口通信;IM U;软件编译中图分类号:T
2、P311?文献标识码:A?文章编号:1004?373X(2010)09?0038?03Serial Communication Program Development Based on MatlabGUI(1.PLA 91329 Unit,Weihai 264200,China;2.PLA 92859 Unit,Tianjin 300061,China)Abstract:Matlab has powerful scientific computation ability,and an embedded GU I tool is used to interface development.A v
3、isualized serial communication routines is designed with the GUI tool and embedded serial communication API,the recep?tion and acquisition of IMU original data is realized the scientific computation ability of Matlab is used for processing data real?timly and displaying result graphically.In the end
4、,steps to compile and release the program is introduced.Keywords:Matlab GUI;serial communication;IMU;software compiler收稿日期:2009?10?240?引?言Matlab 是 MathWorks 公司开发的一种科学计算软件。Matlab 运行稳定、可靠、使用方便,是广大科研人员进行科学研究的得力助手。Matlab 不仅具有强大的科学计算功能,还具有满足一般要求的数据采集以及界面设计开发功能。Matlab GUI(Graphic User Inter?face)就是内置于 Mat
5、lab 的进行图形界面开发的模块。本文利用 Matlab GUI 设计通过串口进行数据发送和接收的界面,并利用内置于 Matlab 的串口通信 API 实现串口数据发送与接收功能。1?Matlab GUI介绍启动 Matlab 后,运行 guide 命令即可以启动 Mat?lab GUI 开发工具。如图 1 所示。新建 Blank GUI,如图 2 所示。在新建 Blank GUI 界面中,包含了一般的界面元素,如菜单、按钮、坐标轴、控件等。添加必要的串口通信参数设置按钮。运行后的界面如图 3 所示。图 1?Matlab GUI 开发界面图 2?新建 Blank GUI 界面38通 信 设 备
6、王战军等:基于 Matlab GUI 的串口通信编程实现图 3?串口通信界面2?串口数据发送与接收功能实现2.1?建立串口通信流程的基本步骤Matlab 提供了对串口进行打开、关闭、以及串口参数设置等操作的一系列函数。利用这些函数可以选择串口号、设置串口通信参数(波特率、数据位、停止位、校验位等)、进行中断控制、流控制。从建立串口通信到结束串口通信的完整流程包括以下几个步骤:(1)为应用程序创建串口对象。实现该功能的函数为:obj=serial(?port?,?PropertyName?,PropertyValue,)其中参 数 port 为 完整 的串口 名称,如 com1。Property
7、Name 为串口通信参数,如 baudrate,startbits等。创建串口对 象的过程中,也 可以忽略 Proper?tyName。其函数为:obj=serial(?port?)(2)连接打开串口。实现该功能的函数为:fopen(obj)obj 即为使用创建串口对象函数的返回值。在连接打开串口后,可以对串口通信参数进行修改。(3)设置或者修改串口通信参数。在能够有效地进行串口通信前,必须设置正确的串口通信参数。实现该功能的函数为:props=set(obj,?PropertyName?,PropertyValue,)obj 即为使用创建串口对象函数的返回值;Proper?tyName 为串
8、口通信参数,如 baudrate,startbits 等。(4)从串口读写数据。在前面三个步骤正常完成后,即可以从串口读数据或者向串口写数据,也就是接收或者发送数据。实现读串口功能的函数有多个。其区别在于根据到达串口数据的类型选择合适的读函数。主要包括:fgetl,fgets,fread,fscanf。这里主要介绍fread,fread 函数实现从串口读入二进制数据。fread 的实现形式为:A=fread(obj,size)A 为读入的数据,以数组的形式存储,存储数据形式为字节;obj 即为使用创建串口对象函数的返回值;size 指定一次读操作读入字节的个数。实现写串口的函数有两个,分别为
9、fwrite 和 fprintf。fwrite 以二进制形式向串口写入数据,实现形式为:fwrite(obj,A)obj 即为使用创建串口对象函数的返回值;A 为写入的数据,以数组形式存储。fwrite 以文本形式向串口写入数据,即以 ASCII 码的形式向串口写数据,实现形式为:fprintf(obj,?cmd?)obj 即为使用创建串口对象函数的返回值;cmd 为写入的文本数据,以数组形式存储。(5)关闭串口以及释放串口对象占用的存储空间。关闭串口函数为:fclose(obj)。释放串口对象占用的内存空间,函数为:delete(obj)。释放串口对象在 Matlab工作区中占用的存储空间,
10、函数为:clear obj。以上 5 步是建立串口通信过程到关闭串口,释放串口占用资源的基本步骤。基本步骤可以实现手动收发数据。其例程如下:s=serial(?COM1?);fopen(s);s.BytesAvailableFcnMode=?terminator?;s.BytesAvailableFcn=instrcallback;fprintf(s,?*IDN?);out=fscanf(s);运行以上语句后,显示的结果如下:BytesAvailable event occurred at 17:01:29 for the object:Serial?COM1.串口数据接收完毕后,需要关闭串口
11、,并释放串口对象占用的资源,使用的命令如下:fclose(s);delete(s);clear s;2.2?串口中断设置及中断处理函数要实现自动收发数据,还需要定义串口中断处理函数以及触发串口中断的方式。定义串口中断处理函数也就是定义串口数据接收或者发送函数。定义触发串口中断的方式其目的是为了在串口检测到接收数据的时候,通知并启动串口数据接收函数进行数据接收操作;在串口输出缓存为空的时候,通知启动串口数据发送函数。(1)触发串口中断的方式。在 Matlab 串口通信编程中,Matlab 通过检测到串口通信事件,从而触发串口中断。涉及到串口读写的事件包括:Bytes available,Outp
12、ut empty。其中 Bytes available 事件有两种:一种39!现代电子技术2010 年第 9期总第 320 期?通信与信息技术 是接收到的字符数达到人工设定的数目时,则系统产生该事件;另一种是当接收到指定字符时,系统产生该事件。Output empty 事件是在系统检测到输出缓存区为空时,产生该事件。Bytes available 事件需要事先设置。可以使用函数:set(obj,?BytesAvailableFcnMode?,?byte?);set(obj,?BytesAvailableFcnCount?,240);以上两个函数设置当串口检测到输入缓存中到达了 240 个字符的
13、数据时,则触发串口中断。另外,也可以设置为当系统检测到某个字符达到串口,则触发串口中断。其设置函数为:set(obj,?BytesAvailableFcnMode?,?terminator?);set(obj,?terminator?,?H?)。以上两个函数设置当串口检测到字符 H 时,则触发串口中断。输出缓存为空事件的产生。该事件由系统自动检测产生,不需要用户特别设置。该事件一般在输出缓存中的最后一个字符发送完毕后产生。用户可以定义该事件引起的串口中断处理函数。(2)串口中断处理函数。串口中断处理函数可以根据用户需要自行定义。如串口读中断处理函数可以这样定义:obj.BytesAvailab
14、leFcn=receiveData。re?ceiveData 即为串口读中断处理函数。在读中断处理函数中可以进行串口读操作。即将输入缓存区中的数据读到用户自定义的存储变量中,以备后续的数据处理与分析。类似可以定义输出缓存为空时触发的串口中断处理函数:obj.OutputEmptyFcn=writeData。本文开发的串口通信程序用于接收采集 IMU(In?ertial Measurement Unit)输出的加速度计和陀螺的测量数据。通过定义串口读中断事件和串口中断处理函数,实现了数据的自动采集,并以 Matlab 图形方式实时显示数据。3?串口通信程序的编译发布3.1?编译程序为了对代码进行
15、保密,以及方便用户发布可以在不同平台运行的可执行程序,Matlab 提供了 Matlab 程序编译与发布功能。在进行 Matlab 程序编译之前,需要设置编译工具。在 Matlab 命令窗 口中,输入运行mbuild setup,进行编译工具设置。如图 4 所示。mbuild?setup 命令运行后,Matlab 会检测已经安装在本机上的编译器,用户可以自行选择任意一个编译器,选择完毕后,运行编译命令,Matlab 将使用用户选定的编译器对程序进行编译。设置完毕编译工具后,即可以在命令窗口中运行编译命令,将 Matlab 程序编译成可执行程序。命令格式为:mcc?options?mfile1
16、mfile2 mfileN;options 为编译参数;mfile1 为待编译的 Matlab 文件,如果包含多个 Matlab 文件,可以直接列在 mfile1后面。图 4?设置 Matlab 编译工具如将一个文件名为 myfun.m 的 Matlab 文件编译成一个独立可执行程序,可以使用 mcc 命令:mcc?m myfun;mcc 命令可以用使用多个编译参数,相应参数的含义可以参见 Matlab 帮助文档。3.2?发布程序Matlab 文件编译完毕后,生成的可执行程序还需要 Matlab 环境的支持,要发布到没有安装 Matlab 的机器上运行,还需要进行最后一项工作,即打包 Matl
17、ab 组件运行环境(Matlab Component Runtime,MCR)。将MCR 与可执行程序一起打包,拷贝到其他没有安装Matlab 的机器上,在该机器上安装 MCR,安装完毕即可以直接在该机器上运行编译的 Matlab 可执行程序。MCR 安装文件位于:Matlab Root toolboxcompiler deploy win32在 2008版 Matlab 中,已经内置了 Matlab 编译发布工具箱,在 Matlab 命令窗口中运行 deploytool 命令,即可以调出该工具窗口,通过该工具可以方便、快捷地编译发布 Matlab 程序。4?结?语Matlab 具有强大的科学
18、计算功能和图形显示功能,选用 Matlab 作为数据处理与分析工具是合适的,但其界面开发和数据采集功能相对较弱,不如 VisualC+或者 LabView 强大。不过,对于一般的界面开发,和普通功能的串口通信开发,Matlab 是足以胜任的,同时也可以直接利用其强大的数据分析与处理功能。本文基于Matlab GUI的串口通信功能的编程实现表明(下转第 44 页)?40通 信 设 备王战军等:基于 Matlab GUI 的串口通信编程实现两种激励下天线的近轴方向图形状基本相同,增益和副瓣电平值相差不大。相比理想高斯馈源,波纹喇叭激励时天线最大交叉极化电平上升 6.2 dB,这是由波纹喇叭?=45
19、#平面内最大交叉极化电平引起的,因此在工程设计时波纹喇叭的交叉极化电平需要控制在48 dB以下。4?结?语研究了一种波束波导馈电的新型偏置近场卡塞格伦天线,采用了去极化的设计方法,相比结构对称的近场卡塞格伦天线,既避免了副镜的遮挡效应照成的天线口径效率下降、旁瓣恶化、驻波比提高,也消除了结构偏置引起了极化纯度下降。采用高斯基模辐射效率高且方向图圆周对称的波纹喇叭作为馈源,并给出了设计过程。最后通过对一个设计实例的分析,验证了波纹喇叭和天线系统设计的正确性,表明了该新型偏置双反射面天线具有非常低的近轴旁瓣电平和交叉极化电平。偏置近场卡塞格伦天线既适应于微波频段下的高功率应用,更适应在高口径效率和
20、低旁瓣电平要求的星载环境下工作。参?考?文?献 1MORABITO D D,IMBRIALE W A,KEIHM S.Observ?ing the moon at microwave frequencies using a large?diame?ter deep space network ante?nnaJ.IEEE Trans.on Ante?nnas and Propagation,2008,56(3):650?660.2 IM E,DURDEN S L,WU C,et al.The 94 GHz cloudprofiling radar for the cloudSat missio
21、n C.Montana:IEEE Aerospace Conference Proceedings,2001.3NAKAJIM A T.A new 100 GHz band front?end systemwith a waveguide?type dual?polarization sideband?separatingSIS receiver for the NRO 45 m radio telescope J.Publica?tions of the Astronomical Society of Japan,2008,60(3):435?443.4EMAACHER Lars,KASPA
22、REK Walter.Analysis of amultiple?beam waveguide for free?space transmission of mi?crowaves J.IEEE T rans.on Antennas and Propagation,2001,49(3):483?493.5 FERNANDEZ A.Quasioptical transmission lines for ECRHat TJ?II stellarator J.International Journal of Infrared andMillimeter Waves,2000,21(12):1945?
23、1957.6 IMBRIALE W A,HOPPE D J,ESQUIVEL M S,et al.ABeam waveguide design for high?power applications C/Intense Microwave and Particle Beams III.Los Angeles:Proceedings of the SPIE Meeting,1992:310?318.7 龚云峰,谢拥军,岳亮,等.高功率近场卡塞格伦天线的设计J.现代电子技术,2009,32(13):1?4.8 叶云裳.航天器天线(上)M.北京:中国科学技术出版社,2007.9 BIRD T,Gra
24、net C.Fabrication and space?qualifying a light?weight corrugated horn with low sidelobes for global?Earthcoverage J.IEEE Antennas&Propagation Magazine,2008,50(1):80?86.10 杨可忠.特殊波束面天线技术 M.北京:人民邮电出版社,2009.作者简介:谷胜明?男,1984 年出生,2007 年毕业于南京航空航天大学获学士学位,现为该校电磁场与微波技术专业硕士研究生,北京遥测技术研究所客座研究生。主要研究方向波束波导及反射面天线。刘少
25、斌?男,1965 年出生,教授。主要从事计算电磁学方面的研究。张凤林?男,1964 年出生,研究员。长期从事卫星导航与测控天线的研究与研制工作。刘?昊?男,1976 年出生,高级工程师,在航天科技集团 704 所从事遥测遥控天线的研制工作。1998 年毕业于中国科技大学获学士学位,2003 年毕业于中国科技大学获博士学位。(上接第 40 页)利用 Matlab GUI 可以进行包含一般界面元素的界面开发,在此基础上,加入串口通信功能,实现数据的实时采集与分析处理,并进行图形化显示。参?考?文?献 1 陈垚光,毛涛涛,王正林,等.精通 Matlab GUI 设计M.北京:电子工业出版社,2008
26、.2 秦襄培.Matlab 图像处理与界面编程宝典 M.北京:电子工业出版社,2009.3Igor Penjivrag.MatlabGUI 编程 EB/OL.2007?11?2.http:/M 陈安宇,陈伟,石彬,等.Matlab 图形用户界面的应用研究J.机电工程技术,2008,16(10):16?21.5 张立炎,张天贺,黄亮,等.燃料电池空气供给系统建模及基于 Matlab GUI 仿真界面设计 J.系统仿真技术,2008,10(2):10?13.6 夏庆观,盛党红,温秀兰.基于 Matlab GUI 的零件图像识别J.中国制造业信息化,2008,15(23):15?18.7 赵震,刘志刚,刁利军.基于 Matlab 的船用螺旋桨计算机实时仿真及 GUI 设计 J.计算机应用与软件,2008,49(3):49?52.作者简介:王战军?男,1972 年出生,硕士。长期从事导航制导与控制专业方向的研究。44通 信 设 备谷胜明等:波束波导馈电的新型偏置近场卡塞格伦天线