李銀虎 王 帥 古泉穎
(1.深圳市中冀聯(lián)合通訊技術(shù)有限公司,廣東 深圳 518057;2.桂林電子科技大學(xué)信息與通信學(xué)院,廣西 桂林 541004)
MATLAB 是 matrix laboratory (矩陣實(shí)驗(yàn)室)的縮寫,是1984 年由美國Mathworks 公司推出的一套高性能的數(shù)值計(jì)算、工程應(yīng)用軟件,它將矩陣運(yùn)算、數(shù)值分析、圖形處理、編程技術(shù)結(jié)合在一起,為用戶提供了一個(gè)強(qiáng)有力的分析、計(jì)算和程序設(shè)計(jì)工具,非常適合用來編寫大型工程計(jì)算、科學(xué)仿真程序代碼[1,2]。
而MATLAB的圖形用戶界面(Graphical User Interface,GUI)功能可以方便用戶完成圖形化界面控制軟件,這種場(chǎng)合下的應(yīng)用,使MATLAB像VC,C#等軟件一樣,可以實(shí)現(xiàn)復(fù)雜而友好的人機(jī)交互。
PC機(jī)的特點(diǎn)是具有較強(qiáng)的數(shù)據(jù)顯示、分析處理能力、很好的人機(jī)界面和大容量的存儲(chǔ)功能。本文以PC機(jī)為上位機(jī),設(shè)計(jì)基于MATLAB的顯控軟件,實(shí)現(xiàn)了與BD/GPS衛(wèi)星信號(hào)模擬器主機(jī)的通信。
MATLAB早期以矩陣運(yùn)算為主,但隨著科學(xué)計(jì)算可視化的需求,MATLAB 在第4 版推出了句柄圖形,自此之后,MATLAB的圖形界面設(shè)計(jì)功能也日益完善。如今,MATLAB 已成為集數(shù)值計(jì)算、符號(hào)運(yùn)算和圖形處理功能為一身的科學(xué)計(jì)算語言,滿足了不同領(lǐng)域用戶的需求。
從MATLAB 6.x版開始,它的圖形用戶界面設(shè)計(jì)功能有了很大提高,利用它可以方便地實(shí)現(xiàn)圖形化窗口界面的交互方式。所謂圖形用戶界面,是指包含了各種圖形控制對(duì)象,如圖形窗口、菜單、對(duì)話框以及文本框等用戶界面,也稱為控件。利用這些用戶界面,用戶可以和計(jì)算機(jī)之間進(jìn)行信息交流,并通過編寫控件的回調(diào)函數(shù)(Callback),完成特定的功能。
在MATLAB 中創(chuàng)建圖形用戶界面有兩種方法[3,4]。一種是在 M 腳本文件和函數(shù)文件中直接利用句柄圖形指令建立各個(gè)控件對(duì)象并設(shè)置其屬性;另一種方法是利用 MATLAB 提供的圖形化界面設(shè)計(jì)向?qū)В℅UIDE)開發(fā)環(huán)境。采用第一種方法建立用戶界面工作量大,控件屬性設(shè)置、修改繁瑣,一般需要設(shè)計(jì)者有豐富的經(jīng)驗(yàn)。而采用GUIDE 開發(fā)環(huán)境進(jìn)行用戶界面設(shè)計(jì)操作方便、效率高,可以達(dá)到所見即所得的編程效果,利用這個(gè)開發(fā)環(huán)境,可以在很短時(shí)間內(nèi)設(shè)計(jì)出一個(gè)GUI。
從Matlab6.0版本開始,Matlab軟件中增加了設(shè)備控制工具箱,提供了對(duì)RS一232通信標(biāo)準(zhǔn)的串口通信的支持,負(fù)責(zé)上下位機(jī)之間的通信。
設(shè)備控制工具箱有如下特點(diǎn)[3]:
(1)支持基于串行接口(RS-232、RS-422、RS-485)、GPIB總線(IEEE2488、HPIB標(biāo)準(zhǔn))、VISA總線的通信;
(2)通信數(shù)據(jù)支持二進(jìn)制和文本(ASCII) 兩種方式,文本方式支持 SCPI ( standard commands for programmable instruments) 語言;
(3)支持異步通信和同步通信;
(4)支持基于事件驅(qū)動(dòng)的通信。
從以上MATLAB設(shè)備控制工具箱的特點(diǎn)可以看到,MATLAB可以滿足實(shí)現(xiàn)串行通信的要求。
(1)GUIDE設(shè)計(jì)向?qū)?。通過GUIDE設(shè)計(jì)一個(gè)完整的GUI ,需分為兩個(gè)階段完成[4]。
第一個(gè)階段:圖形界面的結(jié)構(gòu)設(shè)計(jì)階段。利用設(shè)計(jì)向?qū)?gòu)造整個(gè)圖形界面的布局,合理設(shè)計(jì)菜單、安排控件位置等,并進(jìn)行必要的屬性設(shè)計(jì)。
第二個(gè)階段:功能設(shè)計(jì)階段。為菜單、控件編寫相應(yīng)的回調(diào)函數(shù)(Callback),具體實(shí)現(xiàn)界面的各種功能。
首先,在MATLAB 的命令窗口輸入指令guide,或者通過菜單操作新建 GUI,然后選擇建立新的空白(Blank GUI(Default))的用戶界面選項(xiàng)時(shí),就會(huì)出現(xiàn)工作臺(tái)(LayoutEditor)界面,如圖1 所示。
在其中可以拖放需要的控件并設(shè)置窗口和各個(gè)控件的屬性,雙擊控件,就可以打開控件屬性編輯器,進(jìn)行控件屬性設(shè)置,如圖2所示。
常用的屬性有:
①Tag 屬性的取值是一個(gè)字符串,用來標(biāo)記控件的名字,在進(jìn)行程序設(shè)計(jì)時(shí),可以利用該名字來指定控件,一般不必修改。
②String 屬性為該控件顯示的字符串,通過編輯文本框,用戶可以方便的輸入或修改已經(jīng)存在的字符串。
其他還有字體設(shè)置,控件位置等等。在設(shè)計(jì)中,首先要根據(jù)需求,設(shè)計(jì)出總體方案,要考慮有幾個(gè)輸入?yún)?shù),用到幾個(gè)文本框控件(text)、幾個(gè)編輯框控件(edit),幾個(gè)按鈕(pushbutton)等等。并把各控件的位置用鼠標(biāo)拖動(dòng)、排列成一個(gè)合適的布局。
圖1 圖形用戶界面設(shè)計(jì)向?qū)?/p>
圖2 控件屬性編輯器
(2)顯控軟件系統(tǒng)方案。軟件設(shè)計(jì)方案可劃分為三個(gè)階段:
第一階段:在MATLAB/GUI軟件中創(chuàng)建用戶界面.根據(jù)用戶的需求,設(shè)置相應(yīng)的BD/GPS模擬器參數(shù)包括的星歷參數(shù),設(shè)定初始時(shí)間、速度、位置(經(jīng)度、緯度、高度)、用戶軌跡生成。衛(wèi)星的通道,通道參數(shù)等回顯信息。如圖3所示。
圖3 GUI用戶輸入設(shè)計(jì)
第二階段:MATLAB/GUI實(shí)現(xiàn)串口通信。通過GUI串口編程,將所定義的場(chǎng)景數(shù)據(jù)進(jìn)行打包,然后按照一定的通信協(xié)議送給BD/GPS衛(wèi)星信號(hào)模擬器主機(jī),BD/GPS衛(wèi)星信號(hào)模擬器主機(jī)實(shí)時(shí)地傳回各通道衛(wèi)星信號(hào)狀態(tài)信息。串口通信設(shè)計(jì)架構(gòu)如圖4所示。
圖4 MATLAB與模擬器串口通信
第三階段:數(shù)據(jù)顯示及分析。對(duì)用戶終端存儲(chǔ)的數(shù)據(jù)進(jìn)行分析、處理,并顯示測(cè)試結(jié)果,即對(duì)第二階段存儲(chǔ)的衛(wèi)星信號(hào)模擬器上傳給MATLAB數(shù)據(jù)和BD/GPS接收機(jī)數(shù)據(jù)進(jìn)行處理,根據(jù)顯示信息分析結(jié)果。
第四階段:向下位機(jī)下發(fā)場(chǎng)景文件,實(shí)現(xiàn)主機(jī)啟動(dòng)。從官網(wǎng)下載星歷文件,用UltraEdit軟件將星歷文件按一定的數(shù)據(jù)格式和處理形成場(chǎng)景文件。然后通過MATLAB讀取文件下發(fā)給下位機(jī),實(shí)現(xiàn)主機(jī)的運(yùn)行,顯控軟件的任務(wù)就完成了。
本設(shè)計(jì)的通信端口模塊的主要完成場(chǎng)景文件和數(shù)據(jù)幀的傳送,包括選擇通信的端口, 設(shè)置端口的波特率、數(shù)據(jù)位、停止位和奇偶校驗(yàn)。例如BD/GPS模擬器和上位機(jī)之間通信的波特率為115200等設(shè)置[5,6]。
本應(yīng)用軟件中使用了串口的收發(fā)功能, 發(fā)端是連接MATLAB上位機(jī)端口,下發(fā)場(chǎng)景文件;收端是連接衛(wèi)星信號(hào)模擬器后,向上位機(jī)傳送數(shù)據(jù)幀,其作用是軟件和硬件的橋梁。
在用串口對(duì)象讀寫數(shù)據(jù)前,必需先通過數(shù)據(jù)fopen將串口對(duì)象和設(shè)備相連。連接以后,一些屬性值是只是讀。如InputBufferSize及OutputBufferSize等,所以必須在使用fopen函數(shù)前設(shè)置好的。我們可以用一下的語句來測(cè)試或驗(yàn)證連接狀態(tài)。一旦串口對(duì)象和設(shè)備連接成功,就可以讀寫數(shù)據(jù)系統(tǒng)界面。
本設(shè)計(jì)采用中斷的方式,可以設(shè)置當(dāng)串口檢測(cè)到輸入緩存中到達(dá)了字符個(gè)數(shù)來觸發(fā)串口中斷,也可以設(shè)置時(shí)間來觸發(fā)串口中斷。首先對(duì)串口進(jìn)行初始化串口初始化配置串口對(duì)象屬性,判斷物理接口是否連接,然后等待中斷,在中斷回調(diào)函數(shù)處理數(shù)據(jù)對(duì)象[7]。
圖5是設(shè)計(jì)的串口的端口設(shè)置模塊,圖6是完成的整個(gè)軟件運(yùn)行情況。
圖5 通信端口設(shè)置模塊
圖6 顯控系統(tǒng)主界面
利用MATLAB 的圖形用戶界面(GUI)設(shè)計(jì)功能,可以開發(fā)出很友好的交互式圖形界面,可以很快設(shè)計(jì)一個(gè)參數(shù)輸入界面,可以使數(shù)據(jù)處理快速、靈活、直觀、高效,可以迅速開發(fā)出滿足各種需要的界面友好的數(shù)據(jù)處理軟件。本文設(shè)計(jì)的顯控軟件可以很好地與主機(jī)完成串口通信,實(shí)現(xiàn)對(duì)BD/GPS衛(wèi)星信號(hào)模擬器的控制與信息顯示。
[1]陳懷琛.MATLAB及其在理工課程中的應(yīng)用指南[M].西安:西安電子科技大學(xué)出版社,2000.
[2]張志涌.精通MATLAB6.5版[M].北京:北京航空航天大學(xué)出版社,2003.
[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的GUI技術(shù)在電子教學(xué)中的應(yīng)用[J].電氣電子教學(xué)學(xué)報(bào),2000,22(3):77-79
[6]張立材.基于MATLAB環(huán)境的串行數(shù)據(jù)通信[J].微計(jì)算機(jī)信息,2004,20(3):100-101
[7]向先波,徐國華,張琴.MATLAB環(huán)境下PC機(jī)與單片機(jī)的串行通信及數(shù)據(jù)處理[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2004,(12):27-31.