林秀娜等
摘要:根據(jù)應(yīng)用需求,基于MATLAB GUI設(shè)計(jì)了數(shù)據(jù)格式標(biāo)準(zhǔn)化軟件。首先對基于MATLAB GUI的軟件設(shè)計(jì)流程進(jìn)行了概述,之后對MATLAB GUI 數(shù)據(jù)傳遞的關(guān)鍵技術(shù)方法進(jìn)行了介紹,結(jié)合對設(shè)計(jì)軟件的主要功能的說明,分析了MATLAB GUI設(shè)計(jì)的優(yōu)缺點(diǎn)。
關(guān)鍵詞:MATLAB;GUI;數(shù)據(jù)格式;軟件設(shè)計(jì)
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2015)01-0063-03
Data Format Standardization Software Design Based on MATLAB GUI
LIN Xiu-na1, QU Bao-an1, CHEN Chuan-hua2, WANG Qiang1, JIA Li-guo1, XING Wei-wei1
(1.Taian Fiducial Seismic Station of Earthquake Administration of Shandong Province,Taian 271000, China; 2.Jiaxiang Seismic Station of Earthquake Administration of Shandong Province,Jining 272400, China)
Abstract: According to application demand, data format standardization software was designed based on MATLAB GUI. Firstly, software design flow based on MATLAB GUI is summarized. Then key technology and method about MATLAB GUI data transmission is introduced. Combining with illustration about the main function of the software, advantages and disadvantages of MATLAB GUI design is analyzed.
Key words: MATLAB; GUI; data format; software design
MATLAB以其強(qiáng)大的數(shù)據(jù)處理能力在矩陣運(yùn)算、數(shù)值分析、圖形處理等方面有著廣泛的應(yīng)用。自第4版推出句柄圖形,尤其是MATLAB 6.0版圖形用戶界面(GUI)設(shè)計(jì)功能有了很大提高之后,將圖形化窗口界面與數(shù)據(jù)處理模塊互相結(jié)合的交互方式愈發(fā)普及。由此帶來的友好界面化的數(shù)據(jù)處理使MATLAB的受益群體由熟悉MATLAB各種函數(shù)的專業(yè)人員向不了解MATLAB的人員擴(kuò)展,在拓展MATLAB應(yīng)用群體的同時(shí)為各個(gè)領(lǐng)域的數(shù)據(jù)處理帶來了極大的便利。所謂圖形用戶界面,是指包含了各種圖形控制對象,如圖形窗口、菜單、對話框以及文本框等用戶界面,也稱為控件。利用這些用戶界面,用戶可以和計(jì)算機(jī)之間進(jìn)行信息交流,并通過編寫控件的回調(diào)函數(shù)(Callback),完成特定的功能。該文結(jié)合實(shí)例,對基于MATLAB GUI的軟件設(shè)計(jì)進(jìn)行了綜合介紹。
1 設(shè)計(jì)流程
基于MATLAB GUI的軟件設(shè)計(jì)可以概括為三步走:1) 軟件界面設(shè)計(jì);2) 模塊功能開發(fā);3) 軟件封裝。
MATLAB GUI提供了GUIDE開發(fā)環(huán)境,可以方便的進(jìn)行界面的設(shè)計(jì)和開發(fā)。GUIDE能夠把前臺和后臺分開編輯,前臺以MATLAB圖形的方式運(yùn)行,用于軟件界面的設(shè)計(jì),同時(shí)對界面各個(gè)功能模塊的屬性進(jìn)行配置。用戶只需要設(shè)置各個(gè)對象相應(yīng)的屬性,系統(tǒng)自動(dòng)生成與之對應(yīng)的界面,大大減少了開發(fā)的難度。后臺以M文件的形式存儲,可用于開發(fā)各個(gè)模塊功能,包括各個(gè)功能模塊完成的操作,功能模塊之間數(shù)據(jù)的傳遞等等。前臺的圖形開發(fā)界面和后臺的M文件是相互關(guān)聯(lián)的,前臺每添加一個(gè)元件,后臺就會(huì)產(chǎn)生相應(yīng)的函數(shù)。MATLAB GUI的數(shù)據(jù)傳遞是整個(gè)設(shè)計(jì)的難點(diǎn),也是關(guān)鍵部分,該文將對此做詳細(xì)的說明。完成界面設(shè)計(jì)和模塊功能開發(fā)之后,需要將設(shè)計(jì)的軟件進(jìn)行封裝,將軟件轉(zhuǎn)換為可執(zhí)行文件,與MATLAB的運(yùn)行環(huán)境MCRInstaller.exe一起打包,從而實(shí)現(xiàn)程序的移植和推廣應(yīng)用。
2 數(shù)據(jù)傳遞
MATLAB GUI的數(shù)據(jù)傳遞按照傳遞類型分為GUI之間的數(shù)據(jù)傳遞和GUI內(nèi)部各個(gè)控件之間的數(shù)據(jù)傳遞,GUI間和GUI內(nèi)的數(shù)據(jù)傳遞方式分為六種。
1) global定義全局變量。
此方式適用于GUI內(nèi)以及GUI間。此方式應(yīng)用簡單,不需要其他的參數(shù)傳遞命令。但是,在任控件應(yīng)用全局變量之前要先聲明全局變量,即global‘變量名稱,而且若某一函數(shù)內(nèi)部不慎修改了全局變量,則會(huì)造成變量混亂。
2) 應(yīng)用setappdata\getappdata函數(shù)。
此方式適用于GUI內(nèi)以及GUI間??梢詫?shí)現(xiàn)多個(gè)變量的存取,應(yīng)用相對global繁瑣,但是適用范圍廣,且沒有應(yīng)用缺陷。首先將變量名稱和標(biāo)量值用setappdata傳遞給GUI或控件,使用時(shí)再用getappdata從GUI或控件中調(diào)出。
3) 應(yīng)用save和load函數(shù)
此方式適用于GUI內(nèi)以及GUI間。此方式是將變量的值先存到磁盤,用時(shí)從磁盤載入數(shù)據(jù)。當(dāng)然,這種方式涉及到磁盤讀寫,速度相對較慢。
4) 應(yīng)用UserData。
此方式僅適用于GUI內(nèi)。每個(gè)控件均具有UserData屬性,將數(shù)據(jù)存儲到該控件中,使用時(shí)用get函數(shù)從UserData直接獲取。此方式應(yīng)用簡單 ,但是每個(gè)對象僅能存取一個(gè)變量值,因此當(dāng)同一對象存儲兩次變量時(shí) ,先前的變量值就會(huì)被覆蓋掉,因此都用UserData存儲簡單與單一的數(shù)據(jù)。
5) handles和GUIdata函數(shù)
此方式僅適用于GUI內(nèi)。使用handles.變量名在handles中添加該變量,之后用GUIdata保存改變量。此方式應(yīng)用繁瑣,而且新添加變量后可能就會(huì)覆蓋已添加變量。
6) varargin和varargout函數(shù)。
此方式僅適用與GUI間傳遞數(shù)據(jù),且只適合與主子結(jié)構(gòu),即從主GUI調(diào)用子GUI,之后關(guān)閉子GUI,而不適合并列結(jié)構(gòu)或遞進(jìn)結(jié)構(gòu)。
根據(jù)不同的數(shù)據(jù)傳遞方式,基于所設(shè)計(jì)軟件的功能需求,主要應(yīng)用了可以進(jìn)行多個(gè)變量傳遞而且相對安全穩(wěn)定的setappdata\getappdata函數(shù),同時(shí)輔以UserDate方式,實(shí)現(xiàn)了整個(gè)數(shù)據(jù)格式標(biāo)準(zhǔn)化軟件的數(shù)據(jù)傳遞功能。
3 應(yīng)用分析
根據(jù)應(yīng)用需求,設(shè)計(jì)了泰安基準(zhǔn)地震臺地磁歷史數(shù)據(jù)標(biāo)準(zhǔn)化軟件,用于數(shù)據(jù)格式的統(tǒng)一轉(zhuǎn)換和基礎(chǔ)的數(shù)據(jù)處理。根據(jù)MATLAB GUI軟件設(shè)計(jì)開發(fā)流程,軟件的界面見圖1所示,根據(jù)國際數(shù)據(jù)交換格式標(biāo)準(zhǔn),數(shù)據(jù)相關(guān)信息均為英文。
軟件界面主要分為五個(gè)功能區(qū),分別為12個(gè)頭記錄的錄入和選擇,注釋記錄的錄入,選擇打開數(shù)據(jù)文件,數(shù)據(jù)處理以及生成標(biāo)準(zhǔn)化數(shù)據(jù)文件。其中頭記錄的Reported和選擇數(shù)據(jù)文件之間有主動(dòng)數(shù)據(jù)的傳遞,即Reported錄入報(bào)告分量之后,分別自動(dòng)傳達(dá)到打開數(shù)據(jù)文件的不同的顯示框,以便Select File選擇與該分量對應(yīng)的數(shù)據(jù)文件,見圖1中所示。當(dāng)點(diǎn)擊Select File選擇相應(yīng)分量的數(shù)據(jù)文件之后,即顯示數(shù)據(jù)文件的路徑信息和文件名,見圖2中所示,即Select File與顯示框也有主動(dòng)的數(shù)據(jù)關(guān)聯(lián)。Digital Sampling與數(shù)據(jù)處理部分的Lowpass Filter存在數(shù)據(jù)被動(dòng)傳遞,即點(diǎn)擊Lowpass Filter后,從Digital Sampling獲取數(shù)據(jù)的采樣率,以進(jìn)行濾波。同樣,Plot Data、Select File、Lowpass Filter和Plot Filtered Data之間存在多個(gè)數(shù)據(jù)變量的傳遞。Lowpass Filter的Callback程序如下:
function lowpassfilter2_Callback(hObject, eventdata, handles)
value=get(handles.digitalsampling1,'Value');%獲取digitalsampling的值
switch value %根據(jù)value獲取string的值,即得到采樣率
case 1
samplerate=1;
case 2
samplerate=1/60;
case 3
samplerate=1/3600;
end
ynumber=getappdata(handles.selectfile2,'number1'); %獲取觀測數(shù)據(jù)
if length(ynumber)<1
errordlg('請先讀入數(shù)據(jù)文件','warn');
else
ynumberf=myfilterlp(15,samplerate/10,ynumber,samplerate);%低通濾波
setappdata(handles.lowpassfilter2,'ynumberf',ynumberf); %保存濾波
%后數(shù)據(jù)
end
先獲取Digital Sampling 的值,根據(jù)取值得到對應(yīng)的String的值,即為采樣率,從Select File調(diào)取數(shù)據(jù),進(jìn)行濾波,之后保存濾波后的數(shù)據(jù)以備其他控件調(diào)用。
圖2所示為軟件的Select File功能、濾波前后對比繪圖、軟件控件操作的驗(yàn)證及警告功能等。
4 結(jié)論和討論
綜上所述,基于應(yīng)用需求,設(shè)計(jì)了基于MATLAB GUI的數(shù)據(jù)格式標(biāo)準(zhǔn)化軟件,經(jīng)過界面設(shè)計(jì),數(shù)據(jù)傳遞函數(shù)調(diào)用編程等,完成了控件之間的操作和數(shù)據(jù)傳遞,實(shí)現(xiàn)了軟件的各個(gè)功能。
基于MATLAB GUI軟件設(shè)計(jì),將MATLAB的強(qiáng)大的數(shù)據(jù)處理能力與友好的圖形用戶界面相結(jié)合,實(shí)現(xiàn)了MATLAB功能的黑箱操作,極大地拓展了MATLAB數(shù)據(jù)處理能力的受眾。而且MATLAB提供的GUIDE開發(fā)環(huán)境簡便易用,降低了界面設(shè)計(jì)的復(fù)雜度,提高了設(shè)計(jì)效率。但是MATLAB GUI基于控件的界面,在進(jìn)行界面設(shè)計(jì)時(shí)需要進(jìn)行綜合考慮,花費(fèi)較多精力,不適用于大型程序的開發(fā)。對于每個(gè)控件的屬性進(jìn)行設(shè)定時(shí)容易引起錯(cuò)誤,從而導(dǎo)致已經(jīng)設(shè)計(jì)好的界面無法用GUIDE打開,只能重新設(shè)計(jì)。而且,MATLAB程序的封裝性相對較差。但是在進(jìn)行數(shù)據(jù)和圖像處理時(shí),MATLAB GUI無疑具有較大優(yōu)勢。
參考文獻(xiàn):
[1] 陳懷琛.MATLAB及其在理工課程中的應(yīng)用指南[M].西安:西安電子科技大學(xué)出版社,2000.
[2] 紀(jì)元法,孫希延,施滸立.MATLAB的兩種圖形用戶界面參數(shù)輸入方法[J].電腦知識與技術(shù),2008,13:728-731.
[3] 焦勇,周喻虹.基于MATLAB的快速圖形化數(shù)據(jù)處理軟件設(shè)計(jì)[J].電子科技,2005(7):40-42.
[4] 余承依.基于Matlab數(shù)值計(jì)算的GUI設(shè)計(jì)[J].漳州師范學(xué)院學(xué)報(bào):自然科學(xué)版,2004,17(4):38-40.
[5] 張志涌.精通MATLAB 6.5版[M].北京:北京航空航天大學(xué)出版社,2003.