基于 C++ builder 的高采樣率動態(tài)信號實時繪圖研究
0 引言
顫振飛行試驗是新機(jī)或有重大改型飛機(jī)都必須進(jìn)行的試飛科目,是世界公認(rèn)的Ⅰ類風(fēng)險試飛科目,所以必須通過實時監(jiān)控保障飛行安全。顫振試飛與其他試驗科目相比,具有風(fēng)險高、參數(shù)采樣率高的特點,對實時監(jiān)控系統(tǒng)的實時性、可靠性以及精確性都要求較高。
在開發(fā)顫振試飛實時監(jiān)控軟件過程中,為了在屏幕上實時精確繪制高采樣率顫振參數(shù)時間歷程曲線,對高采樣率動態(tài)信號實時繪圖技術(shù)做了深入研究,并采用C++ builder進(jìn)行編程實現(xiàn)。通過軟件測評和實時系統(tǒng)驗證,該監(jiān)控軟件運行穩(wěn)定、可靠,能實時精確顯示高采樣顫振參數(shù)時域曲線。
1 開發(fā)平臺介紹
C++ Builder是由Borland公司繼Delphi之后又推出的一款高性能可視化集成開發(fā)工具[7],它具有快速的可視化開發(fā)環(huán)境:只要簡單地把控件拖到窗體上,定義它的屬性,設(shè)置它的外觀,就可以快速地建立應(yīng)用程序界面。它內(nèi)置了100 多個完全封裝了Windows 公用特性且具有完全可擴(kuò)展性(包括全面支持ActiveX控件)的可重用控件。C++ Builder具有一個專業(yè)C++開發(fā)環(huán)境所能提供的全部功能:快速、高效、靈活的編譯器優(yōu)化,逐步連接,CPU透視,命令行工具等,實現(xiàn)了可視化的編程環(huán)境和功能強(qiáng)大的編程語言(C++)的完美結(jié)合。利用C++ Builder 開發(fā)實時監(jiān)控軟件,可以充分利用可視化編程語言的高效、靈活等優(yōu)點,使得開發(fā)出來的應(yīng)用程序具有更好的用戶界面,適合飛行監(jiān)控使用。
2 高采樣率動態(tài)信號實時繪圖算法研究及實現(xiàn)
顫振試飛實時監(jiān)控軟件通過接收服務(wù)器發(fā)送過來的數(shù)據(jù),對軟件界面上參數(shù)進(jìn)行實時顯示,并對關(guān)鍵參數(shù)數(shù)據(jù)進(jìn)行自動或者手動采集。由于顫振參數(shù)為高采樣率速變參數(shù),如果按照常規(guī)緩變參數(shù)那樣接收每點數(shù)據(jù)都畫圖的方法在屏幕上實時繪制時間歷程曲線,發(fā)現(xiàn)軟件數(shù)據(jù)顯示常有遲滯現(xiàn)象,并且嚴(yán)重影響軟件數(shù)據(jù)采集精度,因此對數(shù)據(jù)繪圖方法進(jìn)行優(yōu)化研究,將顫振數(shù)據(jù)實時采集到內(nèi)存里,并且用數(shù)組來存放采集數(shù)據(jù),然后利用TChart控件使用翻頁方式來實時顯示時間歷程曲線,每個頁面顯示一段時間內(nèi)的數(shù)據(jù)曲線,其中翻頁時間間隔(由采樣頻率決定)由定時器控制,也可以通過利用接收服務(wù)器發(fā)送數(shù)據(jù)點數(shù)到達(dá)定值后進(jìn)行翻頁的繪圖算法來實現(xiàn)。
2.1 C++ builder控件介紹
2.1.1 TTimer控件
TTimer控件是C++ builder提供的一個普通計時器,使用簡單方便,但具有兩大缺陷:定時精度差和消息優(yōu)先權(quán)低。首先,基于Windows計時器的硬件計時器每隔54.925 ms走1次(約18.2 次/s),也就是說,這種方式的定時器只能精確到大約55 ms,對于55 ms以下的時間精度便無能為力;另外,由于Windows是基于消息機(jī)制的系統(tǒng),任何事件的執(zhí)行都是通過發(fā)送和接收消息來完成的。
TTimer控件的優(yōu)先權(quán)太低,這樣一旦計算機(jī)的CPU被某個進(jìn)程占用,或系統(tǒng)資源緊張時,發(fā)送到消息隊列中的WM_TIMER消息就被暫時掛起,得不到實時處理。
2.1.2 多媒體定時器
多媒體定時器是由Windows系統(tǒng)提供的毫秒級定時器,其定時精度可達(dá)1 ms.從運行基理來看,多媒體定時器提供的是硬件中斷服務(wù),不傳送任何消息,優(yōu)先級很高。多媒體定時器使用自己獨立的線程,調(diào)用回調(diào)函數(shù)進(jìn)行處理,但在多媒體定時器的使用過程中需要注意的是:在多媒體定時器處理的線程結(jié)束之前不要再次啟動定時器,否則會造成死機(jī)。在使用之后一定要刪除定時器及響應(yīng)的參數(shù),否則系統(tǒng)的響應(yīng)會變得很慢。
2.1.3 TChart控件
C++ Builder嵌入了Borland公司產(chǎn)品Delphi的控件TeeChart[10],可以方便地實現(xiàn)曲線繪制,繪圖功能強(qiáng)大,界面友好。本文利用C++ Builder 自帶的畫圖控件TChart,它是TeeChart類庫中最主要的類,具有11 種標(biāo)準(zhǔn)的Series 類型,325 個屬性,125 個方法以及28 個事件,這使得TChart具有非常強(qiáng)大的繪圖功能。
2.2 繪圖算法具體實現(xiàn)
將顫振數(shù)據(jù)實時采集到內(nèi)存里,并且用數(shù)組Show-Buff []來存放采集數(shù)據(jù),然后利用TChart控件使用翻頁方式來實時顯示其時間歷程曲線。TChart 控件中Ad-dXY 函數(shù)和AddArray 函數(shù)都可以來實現(xiàn)繪圖功能,但是AddXY 函數(shù)每次調(diào)用都要刷新屏幕,當(dāng)需要實時繪圖參數(shù)較多時會引起監(jiān)控軟件界面數(shù)據(jù)顯示遲滯現(xiàn)象,因此本文采用用于繪制數(shù)組數(shù)據(jù)曲線的AddArray函數(shù)進(jìn)行繪圖,經(jīng)過實時系統(tǒng)驗證表明,AddArray 函數(shù)比AddXY函數(shù)能夠有效提高繪圖效率。
動態(tài)信號實時繪圖關(guān)鍵代碼如下:
兩種算法實時繪圖效果相同,如圖1所示為應(yīng)用于ARJ21 飛機(jī)飛行試驗實時監(jiān)控的動態(tài)信號實時繪圖效果:
該段動態(tài)參數(shù)事后處理數(shù)據(jù)繪圖效果如圖2所示。
由圖1、圖2對比可知,利用本文中高采樣率動態(tài)信號實時繪圖算法能有效還原真實信號,滿足任務(wù)監(jiān)控需求。
3 結(jié)語
文中基于C++ Builder開發(fā)的顫振試飛實時監(jiān)控軟件已經(jīng)成功應(yīng)用于ARJ21飛機(jī)顫振飛行試驗中,對保障飛行安全和任務(wù)完成發(fā)揮了重要作用。實踐表明,軟件中涉及到的高采樣率動態(tài)信號實時繪圖算法能有效還原顯示動態(tài)參數(shù)真實信號,可應(yīng)用于其他用戶群體中,如電力系統(tǒng)的振動檢測系統(tǒng)等。