蔡尚峰
摘要:数据处理是发动机性能检测的重要组成部分,是衡量发动机动力性和经济性的基础。能否达到测试目的,并得出明确的结论,关键在于是否能正确的处理试验数据。本文以柴油-天然气双燃料发动机的排放算法为基础,利用MATLAB软件强大的数据处理功能对发动机进行了排放计算处理。同时,利用MATLAB包含的GUI功能编制了能反映发动机排放水平的输入输出界面,并将最终结果导入与MATLAB接口的Excel文件中,完成了计算过程的程序化设计。
关键词:Matlab GUI;界面设计;双燃料发动机;排放计算
中图分类号:TP273.5 文献标识码:A 文章编号:1674-957X(2020)20-0030-02
0 引言
MATLAB具有强大的数据处理能力。同时,它还为用户提供了直观的程序设计流程、高品质的可视化体验以及便捷的与其他程序接口的功能。对于参数繁多又经常需要修改的大型计算程序,利用MATLAB GUI功能设计一个交互式图形用户界面就显得十分必要。
1 MATLAB GUI功能简介
MATLAB GUI通常采用图形对象的形式创建操作界面,如:窗口、光标、按钮、菜单、文本描述等。其中,按钮是最常用的控件,功能主要是执行命令。静态文本框主要用于对界面提供功能性的解释和说明。可编辑文本框则主要是为程序运行提供输入参数,包括文本或数字。用户通过键盘输入、鼠标点击等方式激活这些图形对象,即可使计算机执行相关程序来回应用户的操作。
2 本文MATLAB GUI图形界面设计理念
本文将Matlab GUI图形界面功能与双燃料发动机的排放算法相结合,编写了交互式的操作界面,并编写了后台回调函数,形成了发动机的排放计算系统。
考虑到大多数用户是非专业的计算机人员,本文在编写GUI界面时,遵循了简洁、直观的原则。为了使界面保持简洁,采用的控件主要是按钮、静态文本框和可编辑文本框。为了能更加直观的反映发动机的排放水平,应尽量减少参数的输入与输出。用户只需在输入界面输入相关试验参數,系统即可执行后台回调程序,完成复杂的计算,在输出界面得到可视化的计算结果。
2.1 本文GUI界面外观展现
本文通过编辑M脚本文件来创建GUI界面,在主窗口创建了三个按钮,分别对应天然气发动机、柴油机和双燃料发动机的排放计算。点击任意按钮,即可进入相应算法的参数输入界面。主窗口的界面示意图如图1所示。
以某双燃料发动机台架试验为例,在输入界面(INPUT)输入试验参数,输出界面(OUTPUT)即可得到对应的结果。在进行界面设计时,应尽量将输出数据与输入数据显示在同一界面,方便用户及时比对发现输入参数可能存在的错误。界面如图2所示。
2.2 所编界面的代码实现
本文的主界面对应的M文件代码如下(常用%表示注释说明内容):
图形窗口的语法格式为:窗口句柄=figure(属性1,属性值1,属性2,属性值2,……);%窗口句柄相当于窗口的名字或标志,表示使用figure函数按MATLAB缺省的属性值建立图形窗口。
例如:a=figure(‘toolbar’,’none’,’name’,’算法选择界面’); %创建主窗口的标题栏“算法选择界面”
构成对话框窗口的基本元素及调用的函数或命令都是通过调用uicontrol()函数来完成的,其语法格式为:返回句柄=uicontrol(属性1,属性值1,属性2,属性值2,……)。
例如:d=uicontrol('style','pushbutton','position',[220 160 100 50],'string','双燃料模式'); %创建“双燃料模式”按钮
set(d,'Callback','sub03') %点击“双燃料模式”对应的按钮后,调用双燃料模式输入界面“sub03”对应的M文件
其中,设置命令set中的“sub03”对应双燃料模式算法的输入界面。由于本界面大量的创建按钮以及文本框,所以仅列举部分文本框和按钮的代码,在此以双燃料模式算法的界面“sub03”为例。
“sub03”界面对应的代码如下所示:
title=figure('toolbar','none','name','双燃料模式算法');
uicontrol('style','text','fontsize',35,'position',[450 870 400 70],'string','双燃料模式算法'); %创建标题“双燃料模式算法”
a=uicontrol('style','text','fontsize',10,'position',[80 700 220 20],'string','请输入天然气中甲烷的含量(%):'); %创建静态文本框,为随后的参数输入提供解释说明
b=uicontrol('style','edit','fontsize',10,'string',num2str(CH4),'position',[320 700 50 20]); %将a中输入的数值默认为天然气中甲烷(CH4)的含量,并将数字转化为字符串形式
c=uicontrol('style','text','fontsize',10,'position',[80 650 220 20],'string','请输入天然气中乙炔的含量(%):');
d=uicontrol('style','edit','fontsize',10,'string',num2str(C2H2),'position',[320 650 50 20]);……
mm=uicontrol('style','pushbutton','position',[560 80 100 70],'string','OK'); %創建名为“OK”的按钮
set(mm,'Callback','equ03') %点击“OK”按钮后,系统自动调用名为“equ03”的文件,开始执行计算
在上述代码中,“equ03”文件中存放的是双燃料模式算法对应的代码,主要由双燃料算法的算式构成,同时也包含了一些对“sub03”文件中输入数据的读取和输出参数的表示等。数据的读取可用get()函数获得,其语法为V=get(句柄名,属性)。其中V为指定属性的返回属性值,如果不指定属性,则返回当前句柄的所有属性值。
“equ03”文件中的部分程序代码如下所示:
CH4=str2num(get(b,'string')); %提取“sub03”文件中句柄b对应的CH4含量,并将字符串重新转化成数字形式
C2H2=str2num(get(d,'string'));……
aa=uicontrol('style','text','fontsize',10,'position',[760 440 180 25],'string','排气质量流量(kg/h):');
bb=uicontrol('style','edit','fontsize',10,'string',num2str(GEXHW),'position',[960 440 80 25]); %后台计算结束后,在文本框中显示排气质量流量值
cc=uicontrol('style','text','fontsize',10,'position',[760 190 180 25],'string','NOx的质量流量(kg/h):');
dd=uicontrol('style','edit','fontsize',10,'string', num2str(MNOx),'position',[960 190 80 25]);……
由上述代码可知,甲烷(CH4)和乙炔(C2H2)的含量要经过数字与字符串的相互转换才能从“sub03”文件中的句柄b和d中提取出来。在“equ03”文件中,句柄bb和dd对应的编辑框中分别输出经计算得到的排气质量流量和NOx的质量流量值。其他排气组分质量流量的输出过程与上述例子相似,在此不做赘述。
2.3 MATLAB与Excel的结合
倘若进一步优化,将输出数据直接导入Excel文件中,系统自动保存,即可省去手动抄写的麻烦,节省大量时间。实现这一功能最简捷的指令便是依靠“xlswrite”函数。目前,用户普遍使用的MATLAB软件为MATLAB7.0以上的版本,其中便自带了“xlswrite”函数。本界面所对应的“xlwrite”函数代码如下所示:
FINAL={'排气流量' 'CO2流量' 'CO流量' 'HC流量' 'O2流量' 'NOx流量';
GEXHW MCO2 MCO MHC MO2 MNOx};
xlswrite('excel.xlsx',FINAL) %将FINAL中的输出数据导入名为excel的文件中
当程序运行时,系统便自动创建了名为“excel.xlsx”的文件,输出数据便能自动保存到此文档中。以此发动机的第一工况为例,当双燃料模式算法对应的程序运行结束后,自动导入Excel中的结果如图3所示。
3 结论
本文结合双燃料发动机的排放算法,利用MATLAB GUI界面设计功能,对某双燃料发动机的排放水平进行了模拟计算,并将计算结果固化在Excel表格中。通过实例验证,证明本文设计的操作程序能够根据已知数据准确地计算排放结果,给双燃料发动机排放水平的研究工作带来极大的便利。同时,此界面的设计不但能够促进MATLAB与Excel两款软件的配合使用,还可以使用户在不具备高超的编程技能或者对数据库应用技术不甚了解的情况下,完成对数据的处理任务,具备较高的通用性,是一件实用性非常强的工具。
参考文献:
[1]王玉林,葛蕾,李艳斌.新型界面设计开发工具:MATLAB/GUI[J].无线电通信技术,2009,34(6):50-52.
[2]李磊.基于MATLAB GUI的数字图像处理系统设计[D].成都:成都理工大学,2012.
[3]余承依.基于Matlab数值计算的GUI设计[J].漳州师范学院学报(自然科学版),2004,04.
[4]印金国.Matlab可视化界面设计与控件使用[J].电脑编程技巧与维护,2007(1):30-35.
[5]张显库,高君佩.Matlab图形界面设计技术及应用[J].电子与电脑,1998.