资源描述
1MATLAB及相关技术 1
2.1 MATLAB的发展现状 1
2.2 图形用户界面(GUI) 1
2.3 GUI控件对象类型及描述 2
2.4 控件对象的属性 3
2MATLAB串口通信技术 4
3.1 MATLAB外部函数接口简介 4
3.2 USB-CAN总线 5
3GUI设计方法 5
4.1 GUI设计标准 5
4.2 创建用户界面 6
5.1 系统功能分析 9
5.2 软件界面 10
5.3 主界面的设计实现 10
设计总结 13
致 谢 14
参 考 资 料 14
1 总体介绍
基于MATLAB的在线监控平台是指通过MATLAB软件和USB转CAN总线实现单片机上的数据接收和发送,从而实现伺服系统速度、电流的采集及波形显示;实现对速度的控制。下文将先介绍MATLAB/GUI界面和USB-CAN总线串口通信技术,然后分析基于MATLAB的GUI设计方法,最后设计一个GUI界面。
随着计算机技术的发展,计算机在信号处理中的应用越来越广泛,并且变得越来越重要,它能使得各种复杂的处理算法得以实现。但是数据采集到计算机后要进行各种处理,使用VC、VB等编程语言就显得不方便。由于MATLAB提供功能强大的各种计算,只要几个语句就能实现诸如各种方法的滤波、系统辨识、小波变换等,因此采用MATLAB软件非常适合。Matlab不仅具有强大的科学计算功能,还具有满足一般要求的数据采集以及,界面设计开发功能。Matlab GUI(Graphic User Interface)就是内置于Matlab的进行图形界面开发的模块。本文利用Matlab GUI设计通过串口进行数据发送和接收的界面,基于 Matlab的串口通信通过USB-CAN总线实现串口数据发送与接收功能。
2 MATLAB及相关技术
2.1 MATLAB的发展现状
MATLAB产品系列被广泛地应用于包括信号与图像处理、控制系统设计、通讯、系统仿真等诸多领域,是集数学计算结果可视化和编程于一体, 能够方便地进行科学计算和大量工程运算的数学软件。它的一大特性就是数据采集,报告生成,和依靠MATLAB语言编程产生独立C/C++代码等等。其在信号处理中的应用显得越来越重要,使得各种复杂的处理算法得以实现。MATLAB 提供了众多外部函数接口, 本文从中选择MEX 文件接口作为MATLAB 对外界进行读写通道,首先USBCAN 接口卡进行设计, 接下来以这个接口卡为通道, 实现了MATLAB对于硬件的访问。
2.2 图形用户界面(GUI)
GUI是由各种图形对象组成的用户界面,在这种用户界面下,用户的命令和对程序的控制是通过“选择”各种图形对象来实现的。
MATLAB中的图形用户界面设计向导包括以下6个工具:
1.布局编辑器(Layout Edtor)——在图形窗口中创建及布置图形对象。布局编辑器是可以启动用户界面的控制面板,上述工具都必须从布局编辑器中访问,用guide命令可以启动,或在启动平台窗口中选择GUIDE来启动布局编辑器
2. 几何排列工具(Alignment Tool)——调整各对象相互之间的几何关系和位置;
3. 对象浏览器(Object Browser)——用于获得当前MATLAB图形用户界面程序中的全部对象信息,对象的类型,同时显示控件的名称和标识,在控件上双击鼠标可以打开该控件的属性编辑器;
4. 属性查看器(Property Inspector)——查询并设置属性值;
5. 菜单编辑器(Menu Editor)——创建、设计、修改下拉式菜单和快捷菜单;
6. Tab顺序编辑器(Tab Order Editor)——用于设置当用户按下键盘上的Tab键时,对象被选中的先后顺序。
2.3 GUI控件对象类型及描述
控件对象是事件响应的图形界面对象。当某一事件发生时,应用程序会做出响应并执行某些预定的功能子程序(Callback)。
控件对象及其功能:
1.按钮(Push Buttons):执行某种预定的功能或操作;
2.开关按钮(Toggle Button):产生一个动作并指示一个二进制状态(开或关),当鼠点击它时按钮将下陷,并执行callback(回调函数)中指定的内容,再次点击,按钮复原,并再次执行callback中的内容;
3. 单选框(Radio Button):单个的单选框用来在两种状态之间切换,多个单选框组成一个单选框组时,用户只能在一组状态中选择单一的状态,或称为单选项;
4. 复选框(Check Boxes):单个的复选框用来在两种状态之间切换,多个复选框组成一个复选框组时,可使用户在一组状态中作组合式的选择,或称为多选项;
5.文本编辑器(Editable Texts):用来使用键盘输入字符串的值,可以对编辑框中的内容进行编辑、删除和替换等操作;
6.静态文本框(Static Texts):仅仅用于显示单行的说明文字;
7. 滚动条(Slider): 可输入指定范围的数量值;
8. 边框(Frames):在图形窗口圈出一块区域;
9. 列表框(List Boxes):在其中定义一系列可供选择的字符串;
10.弹出式菜单(Popup Menus): 让用户从一列菜单项中选择一项作为参数输入;
此外还有坐标轴(Axes)用于显示图形和图像。
MATLAB中的控件大致可分为两种,一种为动作控件,鼠标点击这些控件时会产生相应的响应。一种为静态控件,是一种不产生响应的控件,如文本框等。
每种控件都有一些可以设置的参数,用于表现控件的外形、功能及效果,既属性。属性由两部分组成:属性名和属性值,它们必须是成对出现的。
2.4 控件对象的属性
控件对象属性:第一类是所有控件对象都具有的公共属性,第二类是控件对象作为图形对象所具有的属性。
1.控件对象的公共属性
Parent 取值为某个图形窗口对象的句柄,该句柄表明了控件对象所在的图形窗口;
Children 取值为空矩阵,因为控件对象没有自己的子对象;
Tag 取值为字符串,定义了控件的标识值,在任何程序中都可以通过这个标识值控制该控件对象;
UserDate 取值为空矩阵,用于保存与该控件对象相关的重要数据和信息;
Visible 取值为no 或off。
2.控件对象的基本控制属性
BackgroundColor 取值为颜色的预定义字符或RGB数值;
ForegroundColor 取值为颜色的预定义字符或RGB数值;
Enable 取值为on(缺省值),inactive和off;
Extend 取值为四元素矢量[0,0 width, height],记录控件对象标题字符的位置和尺寸;
String 取值为字符串矩阵或数组,定义控件对象标题或选项内容;
Max,Min 取值都为数值;
Callback 取值为字符串,可以是某个M文件名或一小段MATLAB语句,当用户激活某个控件对象时,应用程序就运行该属性定义的子程序;
Style 取值可以是pushbutton, radiobutton, checkbox, edit, text, slider, frame, popupmenu 或listbox;
Value 取值可以是矢量,也可以是数值,其含义及解释依赖于控件对象的类型。
3.Callback管理属性
BusyAction 取值为cancel或queue;
ButtDownFun 取值为字符串,一般为某个M文件名或一小段MATLAB程序;
Creatfun 取值为字符串,一般为某个M文件名或一小段MATLAB程序;
DeletFun 取值为字符串,一般为某个M文件名或一小段MATLAB程序;
HandleVisibility 取值为on, callback或off;
Interruptible 取值为on 或off。
此外还有控件对象的修饰控制属性和控件对象的辅助属性。
3 MATLAB串口通信技术
3.1 MATLAB外部函数接口简介
MATLAB 具有良好的扩展性以及强大的数据分析能力和处理能力,且拥有一套完整的、功能齐全的编程环境,。但在某些情况下, 与外部环境的数据和程序进行实时交换是非常重要的。但MATLAB只支持串口和很少一部分硬件, 不能实现对数据的实时采集, 它所处理的数据必须是现成的。因此它不能很好地用于需要在现场对数据进行分析和处理。MATLAB本身是一个跨平台的软件, 并不具备直接访问硬件的能力。即使安装了驱动程序并能正常工作的硬件设备, MATLAB 也没有统一的形式对其进行访问。所以对于USBCAN 接口卡的设计完成后, 需要选择一种MATLAB的外部接口函数, 以便于MATLAB通过USBCAN 接口卡对于CAN 总线上的数据进行接收和发送。通过定义串口对象的属性,就能定义串口的通信模式,从串口对象属性也能了解串口的状态。
表1 串口对象属性
串口属性 含义
BaudRate 定义传输波特率
DataBits 定义每帧数据的比特位数
Parity 定义奇偶校验类型
StopBits 定义用于表示帧结束的比特位数
Terminator 定义结束字符
ReadAsyncMode 定义异步读操作为连续方式还是手工方式
BreakInterruptFcn 定义中断事件的回调函数
PinStatusFcn 定义当串口的CD,CTSC,DSR 或RI 针状态变化时触发的回调函数
3.2 USB-CAN总线
本课题设计的CAN-USB转接卡的功能是:采集CAN总线上的数据,通过USB总线和上位控制站之间进行数据传输。在通讯方面,一方面要满足CAN总线 的协议标准, 实现开放性, 互操作性, 在高速通信的情况下做到拥有较好的抗干扰性能; 另一方面, 转接卡兼容USB2.0 总线, 转接卡可以通过USB连接到PC机。其主要设计参数如下:
数据传输速率: 波特率在5KBPS~1MPS范围内;USB总线标准: 满足USB2.0协议的标准支持CAN2.0B 协议( 兼容CAN2.0A 协议);运行环境:WindowsXP
设计的具体实现是采用单片机通过控制USB控制芯片,与PC机进行通信,从PC 机得到采集数据的指令和向PC机上传数据的指令。同时,要从CAN 网络读取数据分析, 所以单片机通过不同的片选信号控制,两个CAN 控制芯片,分别能够从两路CAN总线上采集数据,和将从PC机得到的数据通过两个CAN 控制芯片分别发送出去。
4 GUI设计方法
4.1 GUI设计标准
一个优秀的界面基本上符合下面的标准:
1.易用性:设计界面时力求简洁、直接、清晰的反映界面的功能和特征。组件名称易懂,用词准确,与同一界面上的其他组件相区分,做到顾名思义。
2.规范性:通常界面设计都按Windows界面的规范来设计,即包含“菜单条、工具栏、按钮、右键快键菜单”(GUI设计)的标准格式。
3.统一性:统一性包括使用标准的组件,也指使用相同的信息表现方法,如在字体、标签风格、颜色、术语、显示错误信息等方面保持一直。
4.合理性:界面大小合适布局简洁、有序、易于操作。
在MATLAB命令行中输入Guide,弹出如图1所示的GUI设计向导控制面板。MATLAB为GUI设计准备了四种模板,分别为Blank GUI(Default)、GUI with Uicontrols(带控件对象的GUI模板)、GUI with Axes and Menu(带坐标轴与菜单的GUI模板)与Modal Question Dialog(带模式问话对话框的GUI模板)。
创建一个MATLAB用户图形界面的基本步骤为:
1.决定这个用户图形界面需要什么样的元素,每个元素需要什么样的函数。在纸上手动粗略地画出组件的布局图。
2.调用MATLAB工具guide对图像中的控件进行布局。图像窗口的大小,排列和其中的控件布局都可以利用它进行控制。
3.我们可以用MATLAB属性编辑器(property inspector)给每一个控件起一个名字(Tag),还可以设置每一个控件的其他特性,例如颜色,显示的文本等。
4.把图像保存到一个文件中。当文件保存后,程序将会产生两个文件,文件名相同而扩展名相同。fig文件包括你创建的用户图形界面,M文件包含加载这个图像的代码和每个GUI元素的主要响应。
5.编写代码,执行每一个与回调函数相关的行为。
4.2 创建用户图形界面
选择默认模板,生成如图2所示的模板界面。在设计界面左边的控件对象区选取所需对象,拖拽到右侧空白区要放置的地方创建该对象。按照此方法,在空白界面下分别放置了俩个Pop-up Menu(列表框),九个Static Text(静态文本框),九个Push Button(命令按钮),六个Edit Text(文本编辑框)和四个Frames(边框),调整对象的位置,一个Radio Button(单选按钮) 调整对象的位置,形成如图3所示的GUI界面。
图1 GUI向导控制面板
图2 默认的模板界面
图3 创建的模板界面
4.2.1控件的设计
在绝大多数的图形用户界面中都包含控件。控件是图形对象,它与菜单一起用于建立图形用户界面。通过使用各种类型的控件,可以建立起操作简便,功能强大的图形用户界面。与菜单对象一样,可以通过命令行方式与GUI设计工具两种方式来建立控件。在命令行方式下,可以通过函数uicontrol来建立控件对象。该函数的调用格式为:
controlhandle=uimenu('PropertyName1',PropertyValue1,…)
controlhandle是创建的控件对象的句柄值;PropertyName1是控件的某个的
属性名,PropertyValue1是与属性名相对应的属性值。
对象属性编辑器在GUI设计向导控制面板中按下Property Editor按钮可打开对象属性编辑器。对象属性编辑器界面分为2个部分:上部是图形对象列表,列出了所有根对象下的子对象。包括每个图形窗口对象以及窗口对象中的各控件对象。用户可以在此选择自己所需要设置的图形对象。下部的是图形对象的属性列表。列出了用户所选中的图形对象的所有属性名称以及属性的值。当用户选中一个属性,则在两个文本框中会分别显示出属性的名称和当前的属性值,可以利用此对其属性的修改。
4.2.1 回调函数的编写
回调程序编辑器的打开有如下方法:
A.在GUI设计向导控制面板中按下CallbackEditor按钮。
B.在图形窗口中的Toolw菜单下选择CallbackEditor选项。一个GUI应用软件的实现,最终是要通过对控件对象的操作来完成,而这些操作必定是通过MATLAB中函数代码的执行来完成的。函数代码的编制既可以通过编写回调函数完成,然后在编写时可以把该控件的函数代码直接书写在Callback中;也可以把函数代码放在一个自定义的。M文件中,而在Callback中只将其文件名写上。在编写回调函数时,handles是一个特别有用的结构数组,它以图形窗口中的所有对象的Tag值为域,存储着所有图形对象的句柄,通过handles可以方便地进行数据调用。 再利用所有对象都具有的UserData属性来进行数据存储、传递,编写一个完美的回调函数就是一件轻而易举的事了。
对控件执行默认操作时,matlab自动执行按钮的callback下的代码。
比如按钮,就是单击按钮一下。所以对于编程的新人来说,只用在相应函数下,添加自己期望执行的操作代码就可以了。比如说希望鼠标在控件上单击时执行某写代码,那将代码添加在ButtonDownFcn下就好。希望在控件销毁(比如说某窗口)时,执行一些代码,那可以把代码添加在DeleteFcn下面。控件是否支持 “单击”,“鼠标划过”“鼠标松开”等等,可以去help查看它的Fcn有哪些。在控件上右键 选择view callbacks 就可以看见它所支持的常用的回调函数callbacks。需要对什么进行反应,直接点进去,添加自己的代码就可以了。
5. 系统设计
5.1 图形功能分析
1.用MATLAB为串口数据采集系统设计界面完成串口参数设置,串口数据采集的开关以及数据读写;
2.设计界面配置数据采集系统的参数,曲线显示界面与图形变换与处理。
5.2 软件界面
系统的界面包括了链接设备区,CAN波特率选择下拉菜单,ID方式选择下拉菜单例的滚动条,使用滤波屏蔽滤波单选按钮,链接及释放设备按钮;发送接收测试区发送接收按钮读写数据框;详细设计如图4所示。
图4 运行界面窗口
5.3 主界面的实现
5.3.1 串口选择
使用下拉菜单方式让使用者方便的进行选择设置。
1.CAN波特率选择范围5KBPS~1MPS,如图5所示;
图5 波特率选择
2.ID方式选择包括2515方式,SJA方式,右对齐方式。如图6所示;
图6 ID方式选择
5.3.2 串口数据参数设置
硬件设备USB-CAN A2
Qm_usb.dll是接口DLL;
Qm_usb.dll放置在应用软件Exe文件所在目录下。
函数说明
初始化设备函数:
Init_can(com_NUM,Model,CanBaudRate,SET_ID_TYPE,FILTER_MODE,RXF,RXM)
说明:本函数用于初始化USB接口,并对CAN总线进行基础设置。
参数:
CanBaudRate:CAN波特率
com_NUM:设备连接的端口。0:自动选着,其他值:端口号
Model:设备类型 1:A1型 2:A2 型 3:A3型
SET_ID_TYPE:
值
意义
0
2512方式
1
SJA1000方式
2
右对齐方式
示例
Init_can(com_NUM,Model,CanBaudRate,SET_ID_TYPE,FILTER_MODE,RXF,RXM)
var ret:integer;
REF,RXM:array[0..3]ofBYTE;
ret:=Init_can(0,2,20,0,2,@REX,@RXM);//初始化函数演示
5.3.2 接收和发送数据函数
发送数据
函数:Can_sent(IDbuff;Databuff;FreamType, Bytes)
IDbuff:ID缓冲区 四字节数组
Databuff:数据缓冲区 八字节数组
FreamType:发送的帧类型。
接收数据
函数:Can_receive(IDbuff;Databuff;FreamType, Bytes)
在连接设备按钮的回调函数callback中写入程序
tt2=handles.text2;
loadlibrary('QM_USB.dll','qm_usb.h')
fm=calllib('QM_USB','Init_can',0,2,400,1,0,[0 0 0 0],[0 0 0 0]);
if fm==0
set(tt2,'String','已连接');
set(tt2,'ForegroundColor',[0.2 0.4 0.3]);
else
set(tt2,'String','未连接');
set(tt2,'ForegroundColor','red');
end
在释放按钮的回调函数callback中写入程序
tt2=handles.text2;
fm=calllib('QM_USB','Quit_can');
unloadlibrary('QM_USB')
if fm==0
set(tt2,'String','未连接');
set(tt2,'ForegroundColor','red');
end
设计总结
致 谢
参考质料
[1] 李显宏. MATLAB7.x界面设计与编译技巧[M].北京:电子工业出版社,2006.
[2] 秦襄培.Matlab图像处理与界面编程宝典[M].北京:电子[J].中国制造业信息化,2008,15(23):15-18.
[3] 李炎新. 用Matlab实现高速数据采集自动化[J].测控技术,2007.11.9-13.
[4] 余成波,杨箐.数字信号处理及Matlab实现[M].清华大学出版社,2005:87-126.
[5] 陈矗光,毛涛涛,王正林,等.精通Matlab GUI设计[M].北京:电子工业出版杜。2008.
[6] 刘秀.用Matlab实现硬件端口采集的方法[J].兵工自动化,2007,(3):1-7.
[7] 王彦良.基于MATLAB绘制各种根轨迹的图形用户接口设计[J].教育教学论坛,2010,(20):2-5.
[8] 王明伟,李茜,汤伟.基于MATLAB串口通信的数据采集系统的设计[J].微计算机信息,2009,(8).6-9.
[9] 杨佳,王英志.柳彦春.GUI设计在数字信号处理课程中的应用[J].商情,2010,(8):1-3.
[10] 程伟,程文波,李灿平.基于MATLAB的实时数据采集与分析研究[J].电子测量技术,2008,(8).
[11] 张立炎,张天贺,黄亮,等.燃料电池空气供给系统建模及基
参考文献于Matlab GUI仿真界面设计[J].系统仿真技术,2008,10.
15
展开阅读全文