童 艷,朱 丹
(中國人民解放軍91550部隊(duì),遼寧 大連 116023)
測(cè)控?cái)?shù)據(jù)實(shí)時(shí)監(jiān)測(cè)軟件設(shè)計(jì)方法研究
童 艷,朱 丹
(中國人民解放軍91550部隊(duì),遼寧 大連 116023)
測(cè)控?cái)?shù)據(jù)實(shí)時(shí)監(jiān)測(cè)軟件是測(cè)控系統(tǒng)中的關(guān)鍵分系統(tǒng)之一,承擔(dān)著大量測(cè)控信息的實(shí)時(shí)監(jiān)視任務(wù),由于其監(jiān)測(cè)的數(shù)據(jù)具有信息量大、發(fā)送頻率高、種類多樣等特點(diǎn),如何提升軟件的性能和效率,成為了測(cè)控軟件領(lǐng)域的一項(xiàng)重要課題;為實(shí)現(xiàn)該軟件信息監(jiān)測(cè)功能實(shí)時(shí)、全面、可靠,從軟硬件平臺(tái)、軟件架構(gòu)和算法設(shè)計(jì)等方面開展研究;采用多線程設(shè)計(jì)實(shí)現(xiàn)大量并行數(shù)據(jù)的接收,利用面向?qū)ο蟪绦蛟O(shè)計(jì)方法使數(shù)據(jù)處理層和展現(xiàn)層分離,對(duì)有曲線顯示需求的數(shù)據(jù)存儲(chǔ)方法進(jìn)行了算法優(yōu)化,從而實(shí)現(xiàn)軟件的全面效能提升設(shè)計(jì);設(shè)計(jì)的軟件經(jīng)實(shí)際環(huán)境測(cè)試,設(shè)計(jì)方法能夠有效提升軟件的效能,保證了測(cè)控?cái)?shù)據(jù)監(jiān)測(cè)功能的實(shí)時(shí)性和可靠性,增強(qiáng)了測(cè)控?cái)?shù)據(jù)實(shí)時(shí)監(jiān)測(cè)軟件的數(shù)據(jù)承載能力;同時(shí)該方法設(shè)計(jì)的軟件具有較好的可擴(kuò)展性和可維護(hù)性。
高效能;測(cè)控;實(shí)時(shí)監(jiān)測(cè);面向?qū)ο?;算法?yōu)化
測(cè)控?cái)?shù)據(jù)實(shí)時(shí)監(jiān)測(cè)軟件是測(cè)控任務(wù)中用于實(shí)時(shí)監(jiān)視測(cè)控?cái)?shù)據(jù)信息必不可少的應(yīng)用軟件之一,在測(cè)控?cái)?shù)據(jù)實(shí)時(shí)處理系統(tǒng)中,是為測(cè)控任務(wù)指揮人員提供目標(biāo)實(shí)時(shí)飛行信息以及測(cè)控系統(tǒng)運(yùn)行情況的窗口[1],是測(cè)控指揮員的眼睛。由于測(cè)控目標(biāo)通常具有飛行速度快、測(cè)控信息量大、安全控制標(biāo)準(zhǔn)極高等特點(diǎn)[2],對(duì)其測(cè)控?cái)?shù)據(jù)實(shí)時(shí)監(jiān)測(cè)軟件的實(shí)時(shí)性和可靠性要求會(huì)隨之提高。因此,在測(cè)控?cái)?shù)據(jù)監(jiān)測(cè)軟件的研制過程中,需要考慮測(cè)控?cái)?shù)據(jù)信息量大、頻率高、種類復(fù)雜等特點(diǎn),采取必要的手段最大限度的提高軟件效能。
軟件效能是指軟件在一定條件下實(shí)現(xiàn)特定功能的能力和運(yùn)行效率。影響軟件效能的因素有很多,有確定的和不確定的。本文立足于分析影響軟件效能的確定性因素,分析其對(duì)軟件效能的影響,力求在軟件設(shè)計(jì)研究中,實(shí)現(xiàn)軟件的高效能。
1.1 軟件運(yùn)行的軟硬件平臺(tái)
1.1.1 硬件平臺(tái)
現(xiàn)如今計(jì)算機(jī)硬件設(shè)備發(fā)展迅猛,作為計(jì)算機(jī)硬件核心的CPU,已經(jīng)從單核發(fā)展為雙核,甚至多核,使得計(jì)算機(jī)的并行處理速度顯著提升,內(nèi)存配置也普遍達(dá)到4-16GB。因此,無論是計(jì)算機(jī)內(nèi)存容量還是處理器速度都不能成為軟件發(fā)展的瓶頸。
1.1.2 軟件平臺(tái)
桌面操作系統(tǒng)主要分為兩大類,分別為類Unix操作系統(tǒng)和Windows操作系統(tǒng)。
其中,Windows操作系統(tǒng)以其在桌面操作方式和界面程序開發(fā)上占有絕對(duì)優(yōu)勢(shì),成為目前最流行的系統(tǒng),具有豐富的開發(fā)平臺(tái)供選擇。
1.2 軟件結(jié)構(gòu)
在收集到軟件需求之后,軟件架構(gòu)工作就開始了。如果把軟件開發(fā)比喻成蓋房子,那么軟件的架構(gòu)就是打地基和搭建框架,由此可以看出軟件結(jié)構(gòu)設(shè)計(jì)的重要性。一個(gè)好的軟件架構(gòu)師在軟件開始研發(fā)時(shí),能夠?yàn)槿蘸筌浖男芴嵘於▓?jiān)實(shí)的基礎(chǔ)。軟件架構(gòu)需要把系統(tǒng)作橫向和縱向的板塊劃分。板塊劃分的好處是任意板塊的變化可以局限在這一板塊,不會(huì)影響到其它板塊的設(shè)計(jì)。另外,板塊劃分可以使復(fù)雜的軟件功能和數(shù)據(jù)處理流程變得清晰而具有條理性。
值得一提的是,軟件架構(gòu)的目標(biāo)是:可靠性、安全性、可擴(kuò)展性、可定制化、可維護(hù)性等。因此,這也是軟件架構(gòu)時(shí)需要把握的原則。
1.3 軟件所采用的算法效率
作為軟件開發(fā)人員,我們都知道,同樣的功能可以通過不同種算法來實(shí)現(xiàn)。而不同的算法其運(yùn)行效率是不一樣的。不得不承認(rèn)有時(shí)一個(gè)優(yōu)秀的算法能夠比普通算法提高軟件運(yùn)行效率數(shù)十倍甚至上百倍。
然而,好的算法固然重要,但一味的從理論角度去研究提高算法效率,而不考慮實(shí)際應(yīng)用環(huán)境是不科學(xué)的,事實(shí)上,算法適用才是最重要的。換言之,軟件所采用的算法與其應(yīng)用的環(huán)境匹配度越高,軟件的運(yùn)行效能才能達(dá)到最優(yōu)。因此,采用什么算法,是要通過對(duì)軟件應(yīng)用環(huán)境的透徹分析來決定的。例如,有時(shí)時(shí)間效率和空間效率在算法實(shí)現(xiàn)上會(huì)有對(duì)立,這時(shí)候就要根據(jù)實(shí)際需求做出合理的折中。
1.4 程序代碼的優(yōu)化及其它
眾所周知,通過優(yōu)化程序代碼可以節(jié)省更多存儲(chǔ)空間和運(yùn)行時(shí)間。好的編程習(xí)慣也可以提升軟件運(yùn)行效率。隨著測(cè)控任務(wù)執(zhí)行密度和并發(fā)度的不斷加深,測(cè)控軟件準(zhǔn)備實(shí)施的高效率能力也面臨考驗(yàn)[3]。因此,對(duì)測(cè)控軟件功能的模塊化設(shè)計(jì)和組件提取技術(shù)近年來得到發(fā)展[4-5],不但提升了軟件的開發(fā)效率,其模塊化封裝也有利于軟件的可靠性和穩(wěn)定性。
結(jié)合測(cè)控?cái)?shù)據(jù)實(shí)時(shí)監(jiān)測(cè)軟件的應(yīng)用需求,通過對(duì)以上影響軟件運(yùn)行效率四大因素的分析,主要從以下幾個(gè)方面提升測(cè)控?cái)?shù)據(jù)實(shí)時(shí)監(jiān)測(cè)軟件的效能。
2.1 軟硬件平臺(tái)的選擇
為滿足實(shí)時(shí)處理能力,硬件平臺(tái)選擇酷睿3.6 GHz雙核CPU,4 GB內(nèi)存。
為滿足測(cè)控信息多樣化顯示需求,軟件平臺(tái)選擇Windows 2007操作系統(tǒng),編程環(huán)境基于VC++集成MapInfo地理信息管理系統(tǒng),有利于實(shí)現(xiàn)包括電子地圖背景下測(cè)控目標(biāo)軌跡的測(cè)控信息監(jiān)測(cè)界面,全方位多角度展現(xiàn)測(cè)控目標(biāo)軌跡、參數(shù)以及測(cè)控設(shè)備的測(cè)量信息,供測(cè)控技術(shù)人員和指揮人員了解測(cè)控系統(tǒng)運(yùn)行情況和作出重要決策。
2.2 軟件架構(gòu)
2.2.1 按照信息源設(shè)計(jì)多線程處理程序
測(cè)控信息監(jiān)測(cè)軟件的信息源通常包括光測(cè)、雷測(cè)、GPS/BD等外測(cè)設(shè)備測(cè)量數(shù)據(jù)、遙測(cè)設(shè)備測(cè)量數(shù)據(jù)、發(fā)射艦軌跡信息、實(shí)時(shí)數(shù)據(jù)處理節(jié)點(diǎn)的中間結(jié)果信息以及配合測(cè)控的其它指揮控制中心的交換信息。這些信息同時(shí)以1 Hz-20 Hz的不同頻率通過組播方式被轉(zhuǎn)發(fā)到數(shù)據(jù)處理中心的主干網(wǎng)上,它們屬于不同的組播地址,測(cè)控?cái)?shù)據(jù)監(jiān)測(cè)軟件從主干網(wǎng)上接收這些信息,通過信息校驗(yàn)及解析,最終需要把所有信息以地圖、表格、曲線、示意圖等形式直觀的顯示出來。作為測(cè)控指揮決策依據(jù),顯示的數(shù)據(jù)必須全面,不能有漏點(diǎn)。因此,對(duì)其可靠性和實(shí)時(shí)性要求較高。
由于信息源發(fā)送信息的并行性,設(shè)計(jì)多線程處理程序,提升軟件的運(yùn)行效率[6]。設(shè)計(jì)每個(gè)線程對(duì)應(yīng)一個(gè)信息源接收,從而保證數(shù)據(jù)接收的實(shí)時(shí)性。多線程數(shù)據(jù)接收模型如圖1所示。
圖1 多線程數(shù)據(jù)接收模型
2.2.2 采用面向?qū)ο蟮臄?shù)據(jù)處理方法
由于數(shù)據(jù)種類繁多,對(duì)接收的數(shù)據(jù)需要分類存儲(chǔ)和顯示。為保證實(shí)時(shí)性,采用數(shù)據(jù)處理層和展現(xiàn)層分離的方式,設(shè)計(jì)數(shù)據(jù)接收類和數(shù)據(jù)顯示類,如圖2所示,它們之間用消息和共享內(nèi)存達(dá)到同步通信的目的[7]。為了防止內(nèi)存使用沖突,采用同步讀寫鎖的方式共享內(nèi)存數(shù)據(jù)。
圖2 面向?qū)ο髷?shù)據(jù)處理結(jié)構(gòu)設(shè)計(jì)
其中,數(shù)據(jù)接收類按照不同數(shù)據(jù)幀格式解析數(shù)據(jù)并存儲(chǔ),供數(shù)據(jù)接收線程調(diào)用。數(shù)據(jù)顯示類是基于多文檔應(yīng)用程序創(chuàng)建的多個(gè)窗口顯示類,屬于主線程類。由于數(shù)據(jù)接收類和數(shù)據(jù)顯示類屬于不同線程,如此可以充分發(fā)揮計(jì)算機(jī)并行處理能力,大大提高軟件數(shù)據(jù)處理與顯示的效率。
2.2.3 實(shí)時(shí)測(cè)控?cái)?shù)據(jù)監(jiān)測(cè)算法優(yōu)化設(shè)計(jì)
由于接收數(shù)據(jù)的頻率為1~20 Hz,而顯示頻率需求為4 Hz,因此,在主線程設(shè)置定時(shí)器以控制窗口刷新頻率為4 Hz。同時(shí)根據(jù)組播組數(shù)由主線程創(chuàng)建多個(gè)數(shù)據(jù)接收線程。每個(gè)數(shù)據(jù)接收線程在完成網(wǎng)絡(luò)初始化工作后開始等待網(wǎng)上數(shù)據(jù)信息。當(dāng)收到網(wǎng)上數(shù)據(jù)時(shí),調(diào)用數(shù)據(jù)接收類,對(duì)信息進(jìn)行分類解析。對(duì)需要以表格、示意圖等方式顯示的信息直接存儲(chǔ)到相應(yīng)的共享內(nèi)存數(shù)據(jù)結(jié)構(gòu)中。而對(duì)于需要以曲線顯示的數(shù)據(jù),由于接收頻率(20 Hz)大于顯示刷新頻率(4 Hz),需要將其以20 Hz的頻率積累存儲(chǔ),以4 Hz頻率刷新顯示。考慮到數(shù)據(jù)量大,存儲(chǔ)頻率高,將其交由較為空閑的數(shù)據(jù)顯示類處理,通過消息驅(qū)動(dòng)數(shù)據(jù)顯示類存儲(chǔ)曲線數(shù)據(jù)。數(shù)據(jù)顯示類的消息響應(yīng)函數(shù)調(diào)用其對(duì)應(yīng)的文檔結(jié)構(gòu)類,采用MFC類庫提供的CObArray類動(dòng)態(tài)存儲(chǔ)數(shù)據(jù),供數(shù)據(jù)顯示類在收到定時(shí)器發(fā)送的窗口刷新消息時(shí)作為曲線數(shù)據(jù)源使用。其算法流程如圖3所示。
圖3 實(shí)時(shí)測(cè)控?cái)?shù)據(jù)監(jiān)測(cè)算法流程
主要實(shí)現(xiàn)過程如下:在VC++ 環(huán)境下創(chuàng)建工程Project,建立多文檔應(yīng)用程序。在CProjectApp::InitInstance()函數(shù)中創(chuàng)建線程如圖1,并用如下語句設(shè)置定時(shí)器:
SetTimer(hSJWnd,1,250,NULL);
其中hSJWnd為定時(shí)器響應(yīng)窗口句柄。該窗口中的定時(shí)器響應(yīng)函數(shù)為void CSJView::OnTimer(UINT nIDEvent),在該函數(shù)中向各窗口發(fā)送窗口刷新消息如下:
SendMessageTimeout(hXXXWnd,WM_XXX,0,0,SMTO_ABORTIFHUNG,100,NULL);
hXXXWnd為各窗口句柄,WM_XXX為消息。
線程響應(yīng)函數(shù)設(shè)計(jì)如下:
UINT ReceiveXSD ata_JDXX(LPVOID lpParam)
{
// 聲明局部變量 // 初始化客戶端 // 初始化服務(wù)器端 //
……
//加入組地址//
WSAJoinLeaf(m_socks,(SOCKADDR*)&m_sevaddr,sizeof(m_sevaddr),NULL,NULL,NULL,NULL,JL_RECEIVER_ONLY)
// 初始化網(wǎng)絡(luò)事件 //
……
// 接收網(wǎng)絡(luò)數(shù)據(jù)信息 //
while(1)
{// 等待網(wǎng)上信息 //
Index = WSAWaitForMultipleEvents(2,EventArray,FALSE,WSA_INFINITE,FALSE);
WSAEnumNetworkEvents(m_socks,EventArray[Index - WSA_WAIT_EVENT_0],&NetworkEvents);
……
if(NetworkEvents.lNetworkEvents & FD_READ)
{
……
re=recvfrom(m_socks,pBuff,MAXBUFFSIZE_JD,0,(LPSOCKADDR)&m_from,&clilen);
pBuffer=&pBuff[0];
PackOK=bufferpool.DispartPack(pBuffer);//調(diào)用解包類函數(shù)
……
}
}
}
各窗口中的曲線類數(shù)據(jù)存儲(chǔ)過程如下(以脈沖雷達(dá)測(cè)量數(shù)據(jù)為例):
void CMCView::OnMC(WPARAM wParam)//積累存儲(chǔ)消息響應(yīng)函數(shù)
{ CXXXDoc* pDoc =(CXXXDoc*)GetDocument();
pDoc->AddXXXLine(j,m_t[j],cl.mc[j].R*0.001,cl.mc[j].A,cl.mc[j].E,cl.mc[j].VR,zt);
……
}
其中,AddXXXLine為CXXXDoc類中設(shè)計(jì)的數(shù)據(jù)存儲(chǔ)函數(shù),除此函數(shù)之外還設(shè)計(jì)了GetXXXLine、GetTotalXXXLine等函數(shù)對(duì)CObArray對(duì)象進(jìn)行讀寫操作,便于完成數(shù)據(jù)存儲(chǔ)和顯示。
2.2.4 軟件基類模型設(shè)計(jì)
雖然測(cè)控軟件接收的數(shù)據(jù)種類繁多,但按照其數(shù)據(jù)種類可以劃分為:測(cè)量設(shè)備數(shù)據(jù)、軌跡坐標(biāo)數(shù)據(jù)、遙測(cè)參數(shù)、中心交換數(shù)據(jù)等。按照這些數(shù)據(jù)的不同顯示需求,利用C++語言提供的繼承機(jī)制,設(shè)計(jì)不同的顯示基類,包括:曲線顯示基類、表格顯示基類、曲線表格顯示基類、電子地圖顯示基類,這樣做有利于提高軟件開發(fā)效率,保證系統(tǒng)穩(wěn)定性[8]。同時(shí)采用配置文件管理方式,靈活配置設(shè)備數(shù)量、目標(biāo)數(shù)量、遙測(cè)參數(shù)等。這樣做不但能提高軟件維護(hù)效率,還有利于提高軟件復(fù)用能力,為不同型號(hào)目標(biāo)的測(cè)控?cái)?shù)據(jù)實(shí)時(shí)監(jiān)測(cè)軟件開發(fā)提供技術(shù)支持。
在實(shí)際測(cè)控系統(tǒng)中搭建測(cè)試環(huán)境,測(cè)試數(shù)據(jù)配置情況如表1所示。以25路原始測(cè)量數(shù)據(jù)、7路節(jié)點(diǎn)數(shù)據(jù)、2路中心交換信息進(jìn)行測(cè)試,基于UDP/IP以組播方式發(fā)送,數(shù)據(jù)發(fā)送頻率為1~20 Hz。軟件測(cè)試結(jié)果表明,軟件能夠正確接收測(cè)控信息并顯示,對(duì)各種數(shù)據(jù)窗口和分頁面進(jìn)行切換測(cè)試,反應(yīng)時(shí)間均小于1秒。軟件運(yùn)行前后計(jì)算機(jī)性能比較見表2。在軟件運(yùn)行時(shí)CPU占用率最大為15%,內(nèi)存占用最大為1.06 GB,遠(yuǎn)小于軟件性能需求中對(duì)資源占用率<70%的要求。
表1 測(cè)試數(shù)據(jù)配置情況
表2 計(jì)算機(jī)性能記錄
圖4為實(shí)際測(cè)試時(shí)截取的曲線類數(shù)據(jù)顯示畫面之一的發(fā)射系目標(biāo)軌跡圖,通過畫線和畫點(diǎn)兩種方式結(jié)合顯示軌跡數(shù)據(jù),畫線方式的好處是當(dāng)數(shù)據(jù)出現(xiàn)跳點(diǎn)時(shí)能夠清晰顯示數(shù)據(jù)變化情況。以畫點(diǎn)方式顯示接收數(shù)據(jù)點(diǎn),可以清晰記錄數(shù)據(jù)有無漏點(diǎn)情況。如圖可見顯示數(shù)據(jù)為20點(diǎn)/秒,與目標(biāo)軌跡數(shù)據(jù)的發(fā)送頻率20 Hz相符,漏點(diǎn)率為0。
圖4 曲線類顯示結(jié)果圖
本文從軟件架構(gòu)和算法優(yōu)化入手,力爭(zhēng)最大限度的發(fā)揮軟硬件性能,旨在提高測(cè)控?cái)?shù)據(jù)實(shí)時(shí)監(jiān)測(cè)軟件的效能。實(shí)際測(cè)試結(jié)果表明,采用的軟件效能提升設(shè)計(jì)方法,能夠保證軟件很好的完成在多種信息源、高頻大數(shù)據(jù)環(huán)境下的接收與顯示功能,有效提升了軟件效能,保證測(cè)控?cái)?shù)據(jù)監(jiān)測(cè)軟件的實(shí)時(shí)性和可靠性。同時(shí),其獨(dú)立的模塊化設(shè)計(jì)算法,使軟件具有很好的可擴(kuò)展性和可維護(hù)性。
[1] 蔣充劍,夏紹志,等. 靶場(chǎng)試驗(yàn)指揮控制中心系統(tǒng)及其應(yīng)用[J]. 艦船電子工程,2009, 29(2): 43-46.
[2] 沈佩珺,趙禎俊,安敬蕊,等. 無人機(jī)地面測(cè)控軟件[J]. 兵工自動(dòng)化,2014, 33(1): 91-94.
[3] 駱 芳,劉旺開,付興旺,等. 組件技術(shù)在計(jì)算機(jī)測(cè)控系統(tǒng)中的應(yīng)用[J]. 測(cè)控技術(shù),2006, 25(4): 84-86.
[4] 李曉偉,徐冰霖,郭 巍,等. 設(shè)計(jì)模式探析及其在測(cè)控軟件中的應(yīng)用[J]. 飛行器測(cè)控學(xué)報(bào),2012, 3: 21-26.
[5] 朱 偉,許春雷,孔 軍,等. 基于功能部件的指揮控制系統(tǒng)軟件設(shè)計(jì)[J]. 指揮控制與仿真,2010, 32(6): 98-100.
[6] 楊 坤. 多線程軟件執(zhí)行效率與改進(jìn)方法研究[J]. 計(jì)算機(jī)與網(wǎng)絡(luò),2011, 11: 38-40.
[7] 吳成富,歐 峰,陳懷民,等. 基于組播技術(shù)的共享內(nèi)存網(wǎng)絡(luò)設(shè)計(jì)與實(shí)現(xiàn)[J]. 測(cè)控技術(shù),2009, 28(10): 55-58.
[8] 陳 驍,孫 軍,劉志芳,等. 測(cè)控應(yīng)用軟件系統(tǒng)資源復(fù)用研究[J]. 計(jì)算機(jī)科學(xué),2013(6):392-394.
Study on Design Method of Measurement and Control Data Real-time Monitor Software
Tong Yan, Zhu Dan
(PLA Unit 91550,Dalian 116023,China)
Measurement and control data monitor software is one of the key subsystem of measurement and control system. It undertakes the real-time monitor of mass measurement and control data. Due to the monitor data with a large amount of information, send a high frequency, species diversity and other characteristics, how to improve the performance and efficiency of software has become an important subject in the measurement and control field. In order to realize the software information real-time monitoring function, comprehensive, reliable, carried out the research on hardware and software platform, software architecture and algorithm design. A large number of parallel data is realized by using multi-threaded design. Using object-oriented program design method makes the data processing layer and layer separated. The method of storage data for demand curve is optimized. So as to realize the comprehensive performance of the software design. Through testing by the actual environment, the design method improves the efficiency of software effectively, to ensure the real-time and reliability of measurement and control data monitoring function. The carrying capacity of the real-time monitoring software is enhanced. At the same time, the software designed by this method has good scalability and maintainability.
high-effect; measurement and control; real-time monitor; object-oriented; algorithm optimization
2016-08-05;
2016-09-13。
童 艷(1982-),女,碩士,工程師,主要從事測(cè)控軟件系統(tǒng)方向的研究。
1671-4598(2017)01-0101-04
10.16526/j.cnki.11-4762/tp.2017.01.029
TP311
A