蔡尚峰
摘要:數(shù)據(jù)處理是發(fā)動機(jī)性能檢測的重要組成部分,是衡量發(fā)動機(jī)動力性和經(jīng)濟(jì)性的基礎(chǔ)。能否達(dá)到測試目的,并得出明確的結(jié)論,關(guān)鍵在于是否能正確的處理試驗(yàn)數(shù)據(jù)。本文以柴油-天然氣雙燃料發(fā)動機(jī)的排放算法為基礎(chǔ),利用MATLAB軟件強(qiáng)大的數(shù)據(jù)處理功能對發(fā)動機(jī)進(jìn)行了排放計(jì)算處理。同時,利用MATLAB包含的GUI功能編制了能反映發(fā)動機(jī)排放水平的輸入輸出界面,并將最終結(jié)果導(dǎo)入與MATLAB接口的Excel文件中,完成了計(jì)算過程的程序化設(shè)計(jì)。
關(guān)鍵詞:Matlab GUI;界面設(shè)計(jì);雙燃料發(fā)動機(jī);排放計(jì)算
中圖分類號:TP273.5? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻(xiàn)標(biāo)識碼:A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文章編號:1674-957X(2020)20-0030-02
0? 引言
MATLAB具有強(qiáng)大的數(shù)據(jù)處理能力。同時,它還為用戶提供了直觀的程序設(shè)計(jì)流程、高品質(zhì)的可視化體驗(yàn)以及便捷的與其他程序接口的功能。對于參數(shù)繁多又經(jīng)常需要修改的大型計(jì)算程序,利用MATLAB GUI功能設(shè)計(jì)一個交互式圖形用戶界面就顯得十分必要。
1? MATLAB GUI功能簡介
MATLAB GUI通常采用圖形對象的形式創(chuàng)建操作界面,如:窗口、光標(biāo)、按鈕、菜單、文本描述等。其中,按鈕是最常用的控件,功能主要是執(zhí)行命令。靜態(tài)文本框主要用于對界面提供功能性的解釋和說明??删庉嬑谋究騽t主要是為程序運(yùn)行提供輸入?yún)?shù),包括文本或數(shù)字。用戶通過鍵盤輸入、鼠標(biāo)點(diǎn)擊等方式激活這些圖形對象,即可使計(jì)算機(jī)執(zhí)行相關(guān)程序來回應(yīng)用戶的操作。
2? 本文MATLAB GUI圖形界面設(shè)計(jì)理念
本文將Matlab GUI圖形界面功能與雙燃料發(fā)動機(jī)的排放算法相結(jié)合,編寫了交互式的操作界面,并編寫了后臺回調(diào)函數(shù),形成了發(fā)動機(jī)的排放計(jì)算系統(tǒng)。
考慮到大多數(shù)用戶是非專業(yè)的計(jì)算機(jī)人員,本文在編寫GUI界面時,遵循了簡潔、直觀的原則。為了使界面保持簡潔,采用的控件主要是按鈕、靜態(tài)文本框和可編輯文本框。為了能更加直觀的反映發(fā)動機(jī)的排放水平,應(yīng)盡量減少參數(shù)的輸入與輸出。用戶只需在輸入界面輸入相關(guān)試驗(yàn)參數(shù),系統(tǒng)即可執(zhí)行后臺回調(diào)程序,完成復(fù)雜的計(jì)算,在輸出界面得到可視化的計(jì)算結(jié)果。
2.1 本文GUI界面外觀展現(xiàn)
本文通過編輯M腳本文件來創(chuàng)建GUI界面,在主窗口創(chuàng)建了三個按鈕,分別對應(yīng)天然氣發(fā)動機(jī)、柴油機(jī)和雙燃料發(fā)動機(jī)的排放計(jì)算。點(diǎn)擊任意按鈕,即可進(jìn)入相應(yīng)算法的參數(shù)輸入界面。主窗口的界面示意圖如圖1所示。
以某雙燃料發(fā)動機(jī)臺架試驗(yàn)為例,在輸入界面(INPUT)輸入試驗(yàn)參數(shù),輸出界面(OUTPUT)即可得到對應(yīng)的結(jié)果。在進(jìn)行界面設(shè)計(jì)時,應(yīng)盡量將輸出數(shù)據(jù)與輸入數(shù)據(jù)顯示在同一界面,方便用戶及時比對發(fā)現(xiàn)輸入?yún)?shù)可能存在的錯誤。界面如圖2所示。
2.2 所編界面的代碼實(shí)現(xiàn)
本文的主界面對應(yīng)的M文件代碼如下(常用%表示注釋說明內(nèi)容):
圖形窗口的語法格式為:窗口句柄=figure(屬性1,屬性值1,屬性2,屬性值2,……);%窗口句柄相當(dāng)于窗口的名字或標(biāo)志,表示使用figure函數(shù)按MATLAB缺省的屬性值建立圖形窗口。
例如:a=figure(‘toolbar’,’none’,’name’,’算法選擇界面’);? %創(chuàng)建主窗口的標(biāo)題欄“算法選擇界面”
構(gòu)成對話框窗口的基本元素及調(diào)用的函數(shù)或命令都是通過調(diào)用uicontrol()函數(shù)來完成的,其語法格式為:返回句柄=uicontrol(屬性1,屬性值1,屬性2,屬性值2,……)。
例如:d=uicontrol('style','pushbutton','position',[220 160 100 50],'string','雙燃料模式');? %創(chuàng)建“雙燃料模式”按鈕
set(d,'Callback','sub03') %點(diǎn)擊“雙燃料模式”對應(yīng)的按鈕后,調(diào)用雙燃料模式輸入界面“sub03”對應(yīng)的M文件
其中,設(shè)置命令set中的“sub03”對應(yīng)雙燃料模式算法的輸入界面。由于本界面大量的創(chuàng)建按鈕以及文本框,所以僅列舉部分文本框和按鈕的代碼,在此以雙燃料模式算法的界面“sub03”為例。
“sub03”界面對應(yīng)的代碼如下所示:
title=figure('toolbar','none','name','雙燃料模式算法');
uicontrol('style','text','fontsize',35,'position',[450 870 400 70],'string','雙燃料模式算法');? %創(chuàng)建標(biāo)題“雙燃料模式算法”
a=uicontrol('style','text','fontsize',10,'position',[80 700 220 20],'string','請輸入天然氣中甲烷的含量(%):');? %創(chuàng)建靜態(tài)文本框,為隨后的參數(shù)輸入提供解釋說明
b=uicontrol('style','edit','fontsize',10,'string',num2str(CH4),'position',[320 700 50 20]);? %將a中輸入的數(shù)值默認(rèn)為天然氣中甲烷(CH4)的含量,并將數(shù)字轉(zhuǎn)化為字符串形式
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');? %創(chuàng)建名為“OK”的按鈕
set(mm,'Callback','equ03')? %點(diǎn)擊“OK”按鈕后,系統(tǒng)自動調(diào)用名為“equ03”的文件,開始執(zhí)行計(jì)算
在上述代碼中,“equ03”文件中存放的是雙燃料模式算法對應(yīng)的代碼,主要由雙燃料算法的算式構(gòu)成,同時也包含了一些對“sub03”文件中輸入數(shù)據(jù)的讀取和輸出參數(shù)的表示等。數(shù)據(jù)的讀取可用get()函數(shù)獲得,其語法為V=get(句柄名,屬性)。其中V為指定屬性的返回屬性值,如果不指定屬性,則返回當(dāng)前句柄的所有屬性值。
“equ03”文件中的部分程序代碼如下所示:
CH4=str2num(get(b,'string'));? %提取“sub03”文件中句柄b對應(yīng)的CH4含量,并將字符串重新轉(zhuǎn)化成數(shù)字形式
C2H2=str2num(get(d,'string'));……
aa=uicontrol('style','text','fontsize',10,'position',[760 440 180 25],'string','排氣質(zhì)量流量(kg/h):');
bb=uicontrol('style','edit','fontsize',10,'string',num2str(GEXHW),'position',[960 440 80 25]); %后臺計(jì)算結(jié)束后,在文本框中顯示排氣質(zhì)量流量值
cc=uicontrol('style','text','fontsize',10,'position',[760 190 180 25],'string','NOx的質(zhì)量流量(kg/h):');
dd=uicontrol('style','edit','fontsize',10,'string', num2str(MNOx),'position',[960 190 80 25]);……
由上述代碼可知,甲烷(CH4)和乙炔(C2H2)的含量要經(jīng)過數(shù)字與字符串的相互轉(zhuǎn)換才能從“sub03”文件中的句柄b和d中提取出來。在“equ03”文件中,句柄bb和dd對應(yīng)的編輯框中分別輸出經(jīng)計(jì)算得到的排氣質(zhì)量流量和NOx的質(zhì)量流量值。其他排氣組分質(zhì)量流量的輸出過程與上述例子相似,在此不做贅述。
2.3 MATLAB與Excel的結(jié)合
倘若進(jìn)一步優(yōu)化,將輸出數(shù)據(jù)直接導(dǎo)入Excel文件中,系統(tǒng)自動保存,即可省去手動抄寫的麻煩,節(jié)省大量時間。實(shí)現(xiàn)這一功能最簡捷的指令便是依靠“xlswrite”函數(shù)。目前,用戶普遍使用的MATLAB軟件為MATLAB7.0以上的版本,其中便自帶了“xlswrite”函數(shù)。本界面所對應(yīng)的“xlwrite”函數(shù)代碼如下所示:
FINAL={'排氣流量' 'CO2流量' 'CO流量' 'HC流量' 'O2流量' 'NOx流量';
GEXHW MCO2 MCO MHC MO2 MNOx};
xlswrite('excel.xlsx',F(xiàn)INAL)? %將FINAL中的輸出數(shù)據(jù)導(dǎo)入名為excel的文件中
當(dāng)程序運(yùn)行時,系統(tǒng)便自動創(chuàng)建了名為“excel.xlsx”的文件,輸出數(shù)據(jù)便能自動保存到此文檔中。以此發(fā)動機(jī)的第一工況為例,當(dāng)雙燃料模式算法對應(yīng)的程序運(yùn)行結(jié)束后,自動導(dǎo)入Excel中的結(jié)果如圖3所示。
3? 結(jié)論
本文結(jié)合雙燃料發(fā)動機(jī)的排放算法,利用MATLAB GUI界面設(shè)計(jì)功能,對某雙燃料發(fā)動機(jī)的排放水平進(jìn)行了模擬計(jì)算,并將計(jì)算結(jié)果固化在Excel表格中。通過實(shí)例驗(yàn)證,證明本文設(shè)計(jì)的操作程序能夠根據(jù)已知數(shù)據(jù)準(zhǔn)確地計(jì)算排放結(jié)果,給雙燃料發(fā)動機(jī)排放水平的研究工作帶來極大的便利。同時,此界面的設(shè)計(jì)不但能夠促進(jìn)MATLAB與Excel兩款軟件的配合使用,還可以使用戶在不具備高超的編程技能或者對數(shù)據(jù)庫應(yīng)用技術(shù)不甚了解的情況下,完成對數(shù)據(jù)的處理任務(wù),具備較高的通用性,是一件實(shí)用性非常強(qiáng)的工具。
參考文獻(xiàn):
[1]王玉林,葛蕾,李艷斌.新型界面設(shè)計(jì)開發(fā)工具:MATLAB/GUI[J].無線電通信技術(shù),2009,34(6):50-52.
[2]李磊.基于MATLAB GUI的數(shù)字圖像處理系統(tǒng)設(shè)計(jì)[D].成都:成都理工大學(xué),2012.
[3]余承依.基于Matlab數(shù)值計(jì)算的GUI設(shè)計(jì)[J].漳州師范學(xué)院學(xué)報(自然科學(xué)版),2004,04.
[4]印金國.Matlab可視化界面設(shè)計(jì)與控件使用[J].電腦編程技巧與維護(hù),2007(1):30-35.
[5]張顯庫,高君佩.Matlab圖形界面設(shè)計(jì)技術(shù)及應(yīng)用[J].電子與電腦,1998.