陸英棟,張 磊,項(xiàng)黎寧,曹平軍
(1.海軍工程大學(xué) 動(dòng)力工程學(xué)院,湖北 武漢 430033;2.國防大學(xué) 政治學(xué)院,上海 201600;3.91257部隊(duì),浙江 舟山 316000)
目前,在所有船舶動(dòng)力裝置中,只有汽輪機(jī)能利用核能,由于核用汽輪機(jī)蒸汽初始參數(shù)低,汽輪機(jī)級組都在濕蒸汽區(qū)工作,所以將核用類汽輪機(jī)稱之為飽和蒸汽汽輪機(jī),簡稱濕汽輪機(jī)[1]。濕汽輪機(jī)的變工況熱力計(jì)算對檢驗(yàn)設(shè)計(jì)單位設(shè)計(jì)樣機(jī)的合理性、安全性以及已投產(chǎn)使用機(jī)組運(yùn)行的穩(wěn)定性、可靠性具有十分重要的意義[2]。變工況熱力計(jì)算作為掌握濕汽輪機(jī)性能最基礎(chǔ)、最重要的環(huán)節(jié),其計(jì)算程序代碼復(fù)雜多樣。設(shè)計(jì)人員往往是通過程序源代碼直接進(jìn)行計(jì)算,但對于實(shí)際操作汽輪機(jī)的使用者來說,掌握并使用源代碼進(jìn)行變工況熱力計(jì)算是十分困難的,也降低了使用者的工作效率。為進(jìn)一步提高工作效率,簡化操作過程,并為汽輪機(jī)工程相關(guān)領(lǐng)域工作人員提供方便簡單的參數(shù)輸入及結(jié)果輸出的友好操作界面,本文基于MATLAB GUI實(shí)現(xiàn)對濕汽輪機(jī)的變工況熱力計(jì)算的人機(jī)交互功能。
圖形用戶界面(GUI)是MATLAB的核心應(yīng)用之一,是通過窗口、圖標(biāo)、按鈕、菜單、文本等圖形對象構(gòu)成的界面,利用句柄圖形用戶接口函數(shù)實(shí)現(xiàn)用戶和計(jì)算機(jī)之間的交互操作過程[3]?;镜膱D形用戶對象可分為3類:用戶界面控件對象(Uicontrol)、下拉式菜單對象(Uimenu)和內(nèi)容式菜單對象(Uicontextmenu)。為了更好理解用戶界面對象的層次結(jié)構(gòu),圖1為GUI圖形對象之間的層次樹表。
圖1 GUI圖形對象之間的層次樹表
MATLAB GUI 與VC++、VB等一系列計(jì)算機(jī)軟件開發(fā)語言相比具有強(qiáng)大的數(shù)據(jù)分析、矩陣運(yùn)算、數(shù)學(xué)建模的的優(yōu)勢,使用GUI開發(fā)人機(jī)交互平臺可以避免復(fù)雜的界面程序編寫,根據(jù)其內(nèi)置的圖形界面開發(fā)模塊,通過拖移相關(guān)的圖形用戶對象,可以直觀的生成滿足開發(fā)者需要的控件要求。從開發(fā)者的角度,GUI的圖形語言具有較VC++、VB以及JAVA更簡便、高效的特點(diǎn),可以利用強(qiáng)大的圖形開發(fā)環(huán)境(GUIDE)開發(fā)相應(yīng)的應(yīng)用程序[4]。表1為GUI主要控件屬性功能。
表1 GUI主要控件屬性功能
應(yīng)用GUI開發(fā)一個(gè)完整的人機(jī)交互平臺的基本過程可分為以下3個(gè)步驟。
1)事先明確交互平臺設(shè)計(jì)任務(wù)、功能以及需要用到的控件對象類型,并添加到GUI中。
2)利用GUI自帶的布局工具,對前期添加的控件進(jìn)行合理布局,布局時(shí)充分考慮使用方便性,符合使用者的行為邏輯,在滿足功能布局時(shí),盡可能保證界面美觀。
3)設(shè)置控件屬性,編寫相關(guān)控件回調(diào)函數(shù)(Callback Function),內(nèi)嵌計(jì)算程序,保證所設(shè)計(jì)的GUI能正確響應(yīng)操作者的指令。
濕汽輪機(jī)變工況性能分析模塊類別較多,其中最重要、最核心的模塊是級的熱力計(jì)算模塊,該模塊中包括壓力級的熱力計(jì)算、調(diào)節(jié)級的變工況計(jì)算、級內(nèi)超音速出口速度計(jì)算、水蒸氣性質(zhì)計(jì)算模塊以及汽輪機(jī)整機(jī)變工況熱力計(jì)算。將所有腳本程序函數(shù)化是實(shí)現(xiàn)人機(jī)交互函數(shù)調(diào)用的基礎(chǔ),本文以汽輪機(jī)調(diào)節(jié)級和壓力級耦合計(jì)算模塊為例,詳細(xì)敘述函數(shù)化過程。圖2是汽輪機(jī)整機(jī)耦合算法計(jì)算流程圖。
濕汽輪機(jī)整機(jī)的耦合計(jì)算是把調(diào)節(jié)級和壓力級作為一個(gè)整體來進(jìn)行計(jì)算,調(diào)節(jié)級和壓力級單級都是根據(jù)逆順序算法,先從級后向級前計(jì)算,再由級前向級后計(jì)算,整個(gè)機(jī)組是先計(jì)算壓力級組,得到壓力級組的級前狀態(tài),并作為調(diào)節(jié)級的起算點(diǎn),再計(jì)算調(diào)節(jié)級。在計(jì)算過程中,每一級的級前計(jì)算狀態(tài)都是前一級的級后狀態(tài),以此為相鄰兩級之間的數(shù)據(jù)耦合點(diǎn)[5]。
在計(jì)算開始前,我們單憑整機(jī)級后排汽點(diǎn)K的壓力值仍然無法確定該點(diǎn)的熱力狀態(tài)參數(shù),必須事先估計(jì)汽輪機(jī)整機(jī)的內(nèi)效率ηi,根據(jù)公式Δhi=ηiΔht計(jì)算整機(jī)的比焓降,其中Δht為汽輪機(jī)的理想等熵比焓降,以此確定整機(jī)級后排汽比焓,通過壓力和比焓值,確定K的狀態(tài)。圖3為整機(jī)耦合的熱力計(jì)算過程簡圖。
圖2 汽輪機(jī)整機(jī)耦合算法計(jì)算流程圖
圖3 汽輪機(jī)整機(jī)耦合算法熱力過程簡圖
濕汽輪機(jī)整機(jī)的變工況熱力計(jì)算函數(shù)命名為wet_steam.m,用于對汽輪機(jī)整個(gè)機(jī)組進(jìn)行額定工況和變工況下的熱力計(jì)算,其基本結(jié)構(gòu)是將函數(shù)Pressure.m、Control.m和Supersonic.m進(jìn)行耦合,其中函數(shù)Pressure.m、Control.m和Supersonic.m分別為壓力級單級熱力計(jì)算函數(shù)、調(diào)節(jié)級單級熱力計(jì)算函數(shù)和級內(nèi)超音速出口速度計(jì)算函數(shù)[6]。
計(jì)算開始前,同樣事先通過xlsread將整機(jī)的通流部分結(jié)構(gòu)尺寸讀入MATLAB數(shù)據(jù)庫,再在計(jì)算時(shí)調(diào)用相應(yīng)級的通流部分結(jié)構(gòu)尺寸。函數(shù)wet_steam.m的輸入?yún)?shù)有:進(jìn)汽質(zhì)量流量qm、水蒸氣進(jìn)汽壓力P0、水蒸氣進(jìn)汽溫度t0、級組排汽壓力P2、預(yù)估排汽比焓值h1、轉(zhuǎn)速n、軸端汽封效率ηe和發(fā)電機(jī)發(fā)電效率ηm。函數(shù)wet_steam.m的輸出參數(shù)為汽輪機(jī)組的整機(jī)性能參數(shù)。
根據(jù)事先確定的濕汽輪機(jī)熱力計(jì)算平臺的設(shè)計(jì)任務(wù)和功能要求,為實(shí)現(xiàn)各個(gè)功能單獨(dú)運(yùn)行,且實(shí)現(xiàn)數(shù)據(jù)共享,采用GUI對各個(gè)功能部分進(jìn)行圖形用戶界面設(shè)計(jì),編寫相應(yīng)GUI對象控件的回調(diào)函數(shù)。整個(gè)計(jì)算平臺由1個(gè)主界面和4個(gè)子模塊界面(調(diào)節(jié)級單級計(jì)算模塊、壓力級單級計(jì)算模塊、整機(jī)熱力計(jì)算模塊和水蒸氣性質(zhì)計(jì)算器模塊)構(gòu)成。用戶根據(jù)功能需求可以通過界面上的按鈕在主界面和子界面模塊中切換。
主界面是操作者進(jìn)入計(jì)算平臺的第一個(gè)用戶界面,包括平臺標(biāo)題、功能選擇列表、計(jì)算平臺使用說明和退出系統(tǒng)按鈕。功能選擇列表中包括4個(gè)子界面按鈕,分別對應(yīng)4個(gè)不同計(jì)算模塊,用戶任意點(diǎn)擊其中一個(gè)按鈕,界面就會切換到相應(yīng)的子界面模塊中。主界面布局如圖4所示。
圖4 計(jì)算平臺主界面布局
為實(shí)現(xiàn)點(diǎn)擊鼠標(biāo)單擊功能按鈕,系統(tǒng)能準(zhǔn)確切換到對應(yīng)的模塊中,需要編寫相應(yīng)按鈕的回調(diào)函數(shù)。以按鈕“調(diào)節(jié)級單級計(jì)算”為例,找到按鈕的回調(diào)函數(shù),并對其進(jìn)行修改,修改內(nèi)容如下:
function pushbutton1_Callback(hObject, eventdata, handles)
%hObject handle to pushbutton1 (see GCBO)
%eventdata reserved - to be defined in a future version of MATLAB
%handles structure with handles and user data (see GUIDATA)
clc; % 當(dāng)單擊按鈕時(shí),清空所有MATLAB輸入面上的錯(cuò)誤信息,并關(guān)閉當(dāng)前窗口
clear all;
delete(gcf);
run(′Control.m′)
此時(shí),當(dāng)鼠標(biāo)單擊“調(diào)節(jié)級單級計(jì)算”按鈕,MATLAB后臺執(zhí)行上述命令,實(shí)現(xiàn)系統(tǒng)自動(dòng)進(jìn)入子模塊“調(diào)節(jié)級單級計(jì)算平臺”,如圖5所示。
圖5 調(diào)節(jié)級單級熱力計(jì)算平臺界面圖
濕汽輪機(jī)熱力計(jì)算平臺實(shí)際實(shí)現(xiàn)計(jì)算功能是在子模塊界面中,每一個(gè)子模塊中有可能還有一層子模塊。每個(gè)子模塊中的控件對象類型和其實(shí)現(xiàn)的功能均相似,區(qū)別在于其調(diào)用的計(jì)算函數(shù)不同。因此,本文以“汽輪機(jī)整機(jī)耦合熱力計(jì)算平臺”這個(gè)子模塊的GUI設(shè)計(jì)為例說明其實(shí)現(xiàn)過程。汽輪機(jī)整機(jī)耦合熱力計(jì)算平臺界面控件對象大致可分為4類:靜態(tài)文本,包括標(biāo)題和輸入、輸出參數(shù)名稱以及輸出計(jì)算結(jié)果的顯示欄;可編輯文本,主要是輸入?yún)?shù)框中的初始參數(shù)輸入欄;按鈕類,包括繪圖按鈕以及功能型按鈕;按鈕組,包括整機(jī)輸入?yún)?shù)組、整機(jī)熱力參數(shù)匯總組和曲線圖組。
通過修改、編寫控件對象的回調(diào)函數(shù),實(shí)現(xiàn)各個(gè)控件的顯示和功能實(shí)現(xiàn)。具體實(shí)現(xiàn)過程如下:
1)靜態(tài)文本修改字符串String為需要顯示的字符,輸出結(jié)果處String清空,如修改靜態(tài)文本text1的String為“進(jìn)汽流量”,將輸出結(jié)果處的text18的String清空。
2)輸入框中的可編輯文本的字符串String可根據(jù)用戶輸入值改變,如在進(jìn)汽流量后輸入數(shù)字19,可編輯文本Edit1的String自動(dòng)變成19。
3)編輯按鈕的回調(diào)函數(shù),使當(dāng)鼠標(biāo)單擊按鈕時(shí)實(shí)現(xiàn)預(yù)定功能,以按鈕“開始計(jì)算”為例,當(dāng)點(diǎn)擊按鈕“開始計(jì)算”后,系統(tǒng)自動(dòng)讀取輸入框中的數(shù)據(jù),并開始計(jì)算,截取部分回調(diào)函數(shù)源代碼如下:
function pushbutton2_Callback(hObject, eventdata, handles)
%hObject handle to pushbutton2 (see GCBO)
%eventdata reserved - to be defined in a future version of MATLAB
%handles structure with handles and user data (see GUIDATA)
G_S=get(handles.edit1,′String′); %讀入整機(jī)蒸汽進(jìn)汽流量
. . .
G_S=str2num(G_S); %字符轉(zhuǎn)數(shù)字
. . .
global RHO %設(shè)置反動(dòng)度矩陣為全局變量
. . .
run(′wet_steam.m′) %執(zhí)行汽輪機(jī)整機(jī)熱力計(jì)算
set(handles.text11,′String′,XXX); %輸出計(jì)算結(jié)果
圖6為用戶利用計(jì)算平臺對汽輪機(jī)進(jìn)行變工況熱力計(jì)算的可視化結(jié)果。
本文基于已有汽輪機(jī)各類型級的熱力計(jì)算編寫的腳本程序,通過輸入輸出參數(shù)提取,將其改寫為函數(shù)程序,并通過MATLAB GUI開發(fā)了汽輪機(jī)變工況熱力計(jì)算平臺,主要總結(jié)如下。
1)介紹了MATLAB圖形用戶界面的構(gòu)成及使用說明,描述了各個(gè)GUI控件對象的功能及使用時(shí)機(jī),并規(guī)劃了軟件的開發(fā)步驟。
圖6 變工況下整機(jī)熱力計(jì)算平臺可視化結(jié)果
2)將汽輪機(jī)各個(gè)級類型的熱力計(jì)算模塊函數(shù)化,使其可以相互調(diào)用,簡化控件對象回調(diào)函數(shù)的編程步驟,使程序更具有可讀性。
3)詳細(xì)介紹了計(jì)算平臺主界面和子界面的編寫過程,實(shí)現(xiàn)主界面和子界面模塊相互自由切換,舉例介紹了控件對象回調(diào)函數(shù)的編寫方法,并通過實(shí)例計(jì)算,證明軟件的可行性,操作平臺具有友好的人機(jī)交互界面和良好的用戶體驗(yàn)。