蔡尚峰



摘要:數據處理是發動機性能檢測的重要組成部分,是衡量發動機動力性和經濟性的基礎。能否達到測試目的,并得出明確的結論,關鍵在于是否能正確的處理試驗數據。本文以柴油-天然氣雙燃料發動機的排放算法為基礎,利用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.