logo资料库

用MATLAB的GUIDE工具做有GUI界面的串口通信上位机.pdf

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
这是我很久之前写串口通信程序时编的,网上这写资料很少,我是看着 MATLAB 的帮 助文档自己一点点写的, 虽然最后放弃了 matlab 上位机程序的方案, 但是还是整理了一 下之前的一些收获,写下以下的说明。 编译环境 :MATLAB 2009a 1 打开 GUIDE 工具,点击红圈中的 GUIDE 图标。 2 直接利用默认设置点 OK 即可
3 在控件篮拖拽控件到如下图的形式
4 进行控件设置,右击控件点 “ Property Inspector ”, 如图
一般仅设置 Tag 选项和 String 选项。其中 String 选项在按钮控件中就是 GUI 显示时的字符。 Tag 属性较为重要,在 GUI 编程时控件的索引主要利用 Tag 选项的属性并且在 GUI 生成回调函数时候也 是由 Tag 属性的值命名的。这里将 “打开串口 ”按钮控件的 String 设置为 “打开串口 ”, tag设置为 pb_OpenSerialPort。 具体控件的设置和关于 GUI 的编程还是看下帮助(截图部分)或找本这方面的书看一下。 这里对我即将用的功能简述一下, MALTAB 的 GUI 主要由两个文件,当设置好 GUIDE 时点击保 存,这时将在当前路径自动产生两个名字相同的文件, 但扩展标识符不同, 一个为 .fig 文件,一个为 .m 文件, .fig 主要是 GUI 图形文件,和 GUIDE 设计的图像相同, .m 文件为程序文件,所有事件响应和 计算功能都在这里实现。 MATLAB 的按钮以及各种控件事件响应是依靠一种叫做回调函数 (Callback Function) 来实现的 (我 理解为和 Visual C++中的消息映射, C#中的异步委托事件响应一种原理 ),自动生成的 M 文件中已经 自动做好回调函数的名称和参数了,我们需要做的就是在其中添加你要进行的处理。
例如:我们要在鼠标单击按钮 “打开串口 ”时进行一系列的串口初始化动作,这时右键单击 “打开串 口按钮 ”如图 则 MALAB 会自动转向相应的 M 文件的回调函数的位置。如图 这里,因为该按钮的 Tag 为"pb_OpenSerialPort",则 GUIDE 自动生成的回调函数名即为 pb_OpenSerialPort_Callback,函数有三个参数, hObject 是当前控件对象, 即打开串口按钮对象 (面向对象技术中的概念) ,索引或设 置当前对象(打开串口按钮对象)时只需要引用 hObject 就可以了。例如:改变当前
空间的可见性,只需调用 set(hObject,'Visable','off'); 打开串口对象在单击该按钮时即会 隐藏。 eventdata我暂时没有用到,所以暂且不管他 handles 我理解是整个 GUI 界面的索引句柄,所有 GUI 界面上的控件都可以通过他来 索引, 几乎有全局作用域, 例如在打开串口按钮的回调中要将关闭串口按钮显示出来, 可以这样调用 set(handles.pb_CloseSerialPort,'Visable','on');就可以了! 这里 handles 还有一个作用就是在不同控件间进行参数传递,只要对 handle 的成员变量进行赋值就可 以了。当然后面要调用一下 guidata(hObject, handles);将变量保存。 例如打开串口按钮里面有个数据 10 需要关闭串口按钮调用可以这样写。 %打开串口按钮回调函数中 handles.double_vir=10; guidata(hObject, handles); %关闭串口按钮回调函数中 a=handles.double_vir; 5 进行串口设置 ,参看如下图中的 MATLAB 帮助
串口初始化 (主要在打开串口按钮的回调函数中),包括 COM 端口 ,BaudRate,DataBits,StopBits Bytes available 事件设置,主要触发串口响应 Bytes available 事件的条件。 BytesAvailableFcn Specify the M-file callback function to execute when a specified number of bytes is available in the input buffer, or a terminator is read ,即指定当一个确定数量的字节数据 ( 由 BytesAvailableFcnCount 属性 设置 ) 存在输入缓冲区时或一个结束符被读到时执行的 m文件的回调函数。 BytesAvailableFcnCount Specify the number of bytes that must be available in the input buffer to generate a bytes-available event. 指定 产生 bytes-available 事件串口输入缓冲区必须存在的字节数。 BytesAvailableFcnMode Specify if the bytes-available event is generated after a specified number of bytes is available in the input buffer, or after a terminator is read 。指定是由串口输入缓冲区指定数量 的字节数产生 bytes-available 事件还是由读到结束符产生 bytes-available
事件。(本文选择 byte ) 串口初始化代码: %%%COM端口初始化 o_SerialPort=serial(string_Select_COM); set(o_SerialPort,'BaudRate',double_Baud);%%%Baud 初始化 set(o_SerialPort,'DataBits',double_DataBit);%%% 设置数据长度 set(o_SerialPort,'StopBits',double_StopBits);%%% 设置停止位长度 set(o_SerialPort,'InputBufferSize',1024000);%%% 设置输入缓冲区大小为 1M %%%串口事件回调设置 o_SerialPort.BytesAvailableFcnMode='byte'; o_SerialPort.BytesAvailableFcnCount=10; % 输入缓冲区存在 10 个 字节触发回调函数 o_SerialPort.BytesAvailableFcn={@EveBytesAvailableFcn,handles };%回调函数的指定 fopen(o_SerialPort);% 打开串口 %这时在 M文件中添加回调函数 function EveBytesAvailableFcn( t,event,handles ) fread(o_SerialPort,10)% 在串口输入缓冲区中读取十个字节 %其他数据处理及文字显示 end
分享到:
收藏