陳飛+王文韜
摘 要: 實時數據滾動更新在遙測數據監測中占據著重要的地位。但隨著遙測數據采集速率的增大,幀間隔越來越小,屏幕刷新引起的閃爍也越來越嚴重。在此提出通過控件技術實現數據列表滾動功能,并通過內存拷貝,利用雙緩存機制,解決數據快速更新引起的閃爍。通過測試證明,該軟件運行穩定,操作方便,解決了屏幕閃爍問題,在遙測數據監測中發揮了重要作用。
關鍵詞: 遙測; 控件; 數據滾動更新; 屏幕閃爍; 雙緩存
中圖分類號: TN957.52?34 文獻標識碼: A 文章編號: 1004?373X(2014)07?0028?03
Design and implementation of list scroll control in telemetry data
CHEN Fei, WANG Wen?tao
(China Air?to?Air Missile Academy, Luoyang 471099, China)
Abstract: The real time data updating plays an important role in telemetry data monitoring. But screen flicker caused by refresh becomes more and more serious and the inter?frame space becomes smaller with the telemetry data acquisition rate increasing. A new method of data list scroll is introduced, which is realized with control technology, and through memory copy and double buffer storage mechanism to solve the screen flicker. The practical application shows that the software can work stable and convenient, and has high efficiency in telemetry data monitoring.
Keywords: telemetry; control; data updating; screen flicker; double buffer
0 引 言
隨著經濟的發展和科技的進步,各國越來越重視空空導彈的研制[1],空空導彈整體系統越來越復雜[2],相應遙測傳輸的信息量也就越來越大,需要實時監測的參數也就越來越多[3]。而不同的參數類型需要匹配不同的顯示格式,例如模擬量參數需要滾動顯示,各種總線參數需要以曲線的方式連續顯示。
在數據滾動更新過程中,隨著遙測數據采集速率的增大[4],幀間隔越來越小,屏幕快速更新引起的閃爍也越來越嚴重。
本文針對需要連續滾動顯示參數采取控件編寫[5]的方法,將常用功能封裝在控件中[6],提供給遙測數據采集軟件調用;并通過內存拷貝,利用雙緩存機制,解決了數據快速更新引起的閃爍,較好的實現了采集信息列表化滾動的功能。
1 軟件設計
1.1 功能設計
在數據驅動的列表滾動控件中,首先應該能夠滿足數據滾動顯示,而滾動顯示的過程實際是程序在屏幕上不停的重新繪圖,然后刷新顯示出來。
采用傳統的方法把繪圖代碼寫進函數中,通過函數的互相調用,經過繪制、擦除、重繪三個階段[7],將圖形顯示在屏幕上,當刷新比較快時,將出現比較嚴重的閃爍問題,而遙測數據的更新是以毫秒級為基礎的,所以軟件的首要功能也是最基本的功能應能夠解決當數據刷新頻率較快時的屏幕閃爍問題。
此外控件還應該具有以下功能:
(1) 標題欄與滾動欄運行時互相獨立;
(2) 可以動態改變行列的高度寬度;
(3) 當數據異常時,報警顯示;
(4) 運行過程中可以臨時取消顯示某一參數;
(5) 所有前景色、背景色均可設置;
(6) 預留接口以供程序調用。
1.2 軟件結構
從加載列表滾動控件[8]到使用一個控件的流程如圖1所示。分析圖1可以得出此控件需要以下幾個模塊:
(1) 讀寫配置文件信息模塊;
(2) 設置背景色、字體大小、參數顯示信息、報警值模塊;
(3) 參數顯示報警模塊;
(4) 改變行寬列寬信息模塊。
圖1 控件使用流程圖
2 軟件實現
2.1 滾動采取雙緩存技術
雙緩存技術是在內存中操作,然后再把操作結果拷貝到屏幕內存中進行顯示的技術。應用雙緩存技術實時顯示的滾動數據,是數據更新后的結果,而不是更新過程,更新過程是在內存中開辟的一塊區域中完成,對屏幕操作只有一次過程,更新的效率得到大幅提高。
傳統方法與雙緩存技術的比較[9]如圖2所示。
圖2 傳統方法與雙緩存技術的比較
雙緩存技術的使用過程如下[10]:
(1) 定義顯示設備對象和位圖對象:
CDC memDC;
CBitmap memBitmap;
(2) 建立與屏幕顯示內容兼容的內存顯示設備和位圖,并將位圖選入到內存顯示設備中:
memDC.CreateCompatibleDC(NULL);
memBitmap.CreateCompatibleBitmap(pDC, nWidth,nHeight);
Cbitmap*pOldBitmap=memDC.SelectObjet (&memBitmap);
(3) 先將背景色清除,然后繪圖:
memDC.FillSolidRect(0,0,nWidth,nHeight,
RGB(255,255,255));
memDC.MoveTo(……);
memDC.LineTo(……);
(4) 調用BitBlt在屏幕上顯示設備對象中的更新結果;
(5) 繪圖完畢后,釋放繪圖對象:
memDC.DeleteDC();
memBitmap.DeleteObject();
2.2 運行過程中動態改變列寬、行寬
由于控件不能獨立運行,必須嵌入到某個容器程序中,與該容器一起運行。當某個程序調用控件時,控件的大小可以動態設置,設置后就固定不變。
當需要改變列表控件的列寬時,在鼠標獲得列的焦點后,只需要像ListCtrl控件拖動某列即可改變列的寬度。
而為了運行時界面的美觀,數據需要鋪滿整個控件,這就需要在控件中均勻分布各行。當需要改變行寬時,改變的是所有的行寬。所以本控件是在計算數據滾動區域高度后,根據需要改變的行寬,重新分布各行,并且相應改變字體大小,以適應新的行寬。
2.3 讀寫配置文件信息
當控件被應用程序首次加載時,根據預留接口可以配置參數信息,包括參數名、參數對應數據顯示上下限、報警值、字體大小、背景色、文本色、行寬、列寬等信息。程序運行后,根據顯示需要,可以動態更改行寬列寬信息,以適應屏幕需要。
為了體現使用控件的便利,這些初步配置信息和更改信息,必須被保存,以供應用程序下次加載控件時自動調用。
3 使用效果
把列表滾動控件集成到遙測數據采集軟件中,列表滾動控件運行良好,占用內存空間少。實時運行過程中,可以動態調整列寬行寬信息,當數據超出報警值,可以顯示報警信息,運行界面如圖3所示。
圖3 列表滾動控件運行效果
在100 ms至6 ms間隔的采集信息測試過程中,數據滾動更新穩定,沒有出現閃爍現象。
4 結 語
基于ActiveX技術的為數眾多的軟件組件都提供了滿足某個規范的一系列編程接口,應用程序可以通過該編程接口使用有軟件組件提供的各種功能,而無需知道這些功能在具體的軟件組件里是如何實現的。雙緩存技術能夠有效的解決數據頻繁刷新引起的屏幕閃爍問題。本軟件就是基于這兩種技術開發出來的,供遙測數據采集軟件調用,測試表明,該軟件運行穩定,能夠滿足實時遙測數據的采集分析。
參考文獻
[1] 任淼,王秀萍.2011年國外空空導彈發展綜述[J].航空兵器,2012(3):3?7.
[2] 樊會濤.空空導彈系統總體設計[M].北京:國防工業出版社,2007.
[3] 李英麗,劉春亭.空空導彈遙測系統設計[M].北京:國防工業出版社,2006.
[4] 安桂生,陳雷.空空導彈靶場遙測接收處理的現狀與發展趨勢[J].航空兵器,2006(3):56?59.
[5] 孫鑫,余安萍.VC++深入詳解[M].北京:電子工業出版社,2006.
[6] 方可燕,張雙民,徐振明.Visual C++ 6.0實戰與精通[M].北京:清華大學出版社,2000.
[7] 孫家廣.計算機圖形學[M].北京:清華大學出版社,2003.
[8] 任哲.MFC Windows應用程序設計[M].北京:清華大學出版社,2004.
[9] 劉婷婷,潘彤,陳彬茹.利用雙緩存技術提高繪圖效率[J].電腦編程技巧與維護,2012(18):22?23.
[10] 姜曉峰,李云飛.計算機圖形圖像技術與應用教程[M].北京:北京希望電子出版社,2002.
[11] 周憲英,高成文.光滑不等距插值算法及其在遙測數據處理中的應用[J].現代電子技術,2013,36(18):13?15.
[12] 劉亞南,陳雷,常樹龍,等.遙測數據融合軟件的設計與實現[J].現代電子技術,2012,35(4):136?138.
[13] 王冬冬,李宇,張保祥.基于FPGA與ARM的遙測數據網絡化采集[J].現代電子技術,2011,34(16):89?92.
[14] 常樹龍.空空導彈遙測數據三維實時顯示系統設計與實現[J].現代電子技術,2010,33(4):64?66.
memDC.CreateCompatibleDC(NULL);
memBitmap.CreateCompatibleBitmap(pDC, nWidth,nHeight);
Cbitmap*pOldBitmap=memDC.SelectObjet (&memBitmap);
(3) 先將背景色清除,然后繪圖:
memDC.FillSolidRect(0,0,nWidth,nHeight,
RGB(255,255,255));
memDC.MoveTo(……);
memDC.LineTo(……);
(4) 調用BitBlt在屏幕上顯示設備對象中的更新結果;
(5) 繪圖完畢后,釋放繪圖對象:
memDC.DeleteDC();
memBitmap.DeleteObject();
2.2 運行過程中動態改變列寬、行寬
由于控件不能獨立運行,必須嵌入到某個容器程序中,與該容器一起運行。當某個程序調用控件時,控件的大小可以動態設置,設置后就固定不變。
當需要改變列表控件的列寬時,在鼠標獲得列的焦點后,只需要像ListCtrl控件拖動某列即可改變列的寬度。
而為了運行時界面的美觀,數據需要鋪滿整個控件,這就需要在控件中均勻分布各行。當需要改變行寬時,改變的是所有的行寬。所以本控件是在計算數據滾動區域高度后,根據需要改變的行寬,重新分布各行,并且相應改變字體大小,以適應新的行寬。
2.3 讀寫配置文件信息
當控件被應用程序首次加載時,根據預留接口可以配置參數信息,包括參數名、參數對應數據顯示上下限、報警值、字體大小、背景色、文本色、行寬、列寬等信息。程序運行后,根據顯示需要,可以動態更改行寬列寬信息,以適應屏幕需要。
為了體現使用控件的便利,這些初步配置信息和更改信息,必須被保存,以供應用程序下次加載控件時自動調用。
3 使用效果
把列表滾動控件集成到遙測數據采集軟件中,列表滾動控件運行良好,占用內存空間少。實時運行過程中,可以動態調整列寬行寬信息,當數據超出報警值,可以顯示報警信息,運行界面如圖3所示。
圖3 列表滾動控件運行效果
在100 ms至6 ms間隔的采集信息測試過程中,數據滾動更新穩定,沒有出現閃爍現象。
4 結 語
基于ActiveX技術的為數眾多的軟件組件都提供了滿足某個規范的一系列編程接口,應用程序可以通過該編程接口使用有軟件組件提供的各種功能,而無需知道這些功能在具體的軟件組件里是如何實現的。雙緩存技術能夠有效的解決數據頻繁刷新引起的屏幕閃爍問題。本軟件就是基于這兩種技術開發出來的,供遙測數據采集軟件調用,測試表明,該軟件運行穩定,能夠滿足實時遙測數據的采集分析。
參考文獻
[1] 任淼,王秀萍.2011年國外空空導彈發展綜述[J].航空兵器,2012(3):3?7.
[2] 樊會濤.空空導彈系統總體設計[M].北京:國防工業出版社,2007.
[3] 李英麗,劉春亭.空空導彈遙測系統設計[M].北京:國防工業出版社,2006.
[4] 安桂生,陳雷.空空導彈靶場遙測接收處理的現狀與發展趨勢[J].航空兵器,2006(3):56?59.
[5] 孫鑫,余安萍.VC++深入詳解[M].北京:電子工業出版社,2006.
[6] 方可燕,張雙民,徐振明.Visual C++ 6.0實戰與精通[M].北京:清華大學出版社,2000.
[7] 孫家廣.計算機圖形學[M].北京:清華大學出版社,2003.
[8] 任哲.MFC Windows應用程序設計[M].北京:清華大學出版社,2004.
[9] 劉婷婷,潘彤,陳彬茹.利用雙緩存技術提高繪圖效率[J].電腦編程技巧與維護,2012(18):22?23.
[10] 姜曉峰,李云飛.計算機圖形圖像技術與應用教程[M].北京:北京希望電子出版社,2002.
[11] 周憲英,高成文.光滑不等距插值算法及其在遙測數據處理中的應用[J].現代電子技術,2013,36(18):13?15.
[12] 劉亞南,陳雷,常樹龍,等.遙測數據融合軟件的設計與實現[J].現代電子技術,2012,35(4):136?138.
[13] 王冬冬,李宇,張保祥.基于FPGA與ARM的遙測數據網絡化采集[J].現代電子技術,2011,34(16):89?92.
[14] 常樹龍.空空導彈遙測數據三維實時顯示系統設計與實現[J].現代電子技術,2010,33(4):64?66.
memDC.CreateCompatibleDC(NULL);
memBitmap.CreateCompatibleBitmap(pDC, nWidth,nHeight);
Cbitmap*pOldBitmap=memDC.SelectObjet (&memBitmap);
(3) 先將背景色清除,然后繪圖:
memDC.FillSolidRect(0,0,nWidth,nHeight,
RGB(255,255,255));
memDC.MoveTo(……);
memDC.LineTo(……);
(4) 調用BitBlt在屏幕上顯示設備對象中的更新結果;
(5) 繪圖完畢后,釋放繪圖對象:
memDC.DeleteDC();
memBitmap.DeleteObject();
2.2 運行過程中動態改變列寬、行寬
由于控件不能獨立運行,必須嵌入到某個容器程序中,與該容器一起運行。當某個程序調用控件時,控件的大小可以動態設置,設置后就固定不變。
當需要改變列表控件的列寬時,在鼠標獲得列的焦點后,只需要像ListCtrl控件拖動某列即可改變列的寬度。
而為了運行時界面的美觀,數據需要鋪滿整個控件,這就需要在控件中均勻分布各行。當需要改變行寬時,改變的是所有的行寬。所以本控件是在計算數據滾動區域高度后,根據需要改變的行寬,重新分布各行,并且相應改變字體大小,以適應新的行寬。
2.3 讀寫配置文件信息
當控件被應用程序首次加載時,根據預留接口可以配置參數信息,包括參數名、參數對應數據顯示上下限、報警值、字體大小、背景色、文本色、行寬、列寬等信息。程序運行后,根據顯示需要,可以動態更改行寬列寬信息,以適應屏幕需要。
為了體現使用控件的便利,這些初步配置信息和更改信息,必須被保存,以供應用程序下次加載控件時自動調用。
3 使用效果
把列表滾動控件集成到遙測數據采集軟件中,列表滾動控件運行良好,占用內存空間少。實時運行過程中,可以動態調整列寬行寬信息,當數據超出報警值,可以顯示報警信息,運行界面如圖3所示。
圖3 列表滾動控件運行效果
在100 ms至6 ms間隔的采集信息測試過程中,數據滾動更新穩定,沒有出現閃爍現象。
4 結 語
基于ActiveX技術的為數眾多的軟件組件都提供了滿足某個規范的一系列編程接口,應用程序可以通過該編程接口使用有軟件組件提供的各種功能,而無需知道這些功能在具體的軟件組件里是如何實現的。雙緩存技術能夠有效的解決數據頻繁刷新引起的屏幕閃爍問題。本軟件就是基于這兩種技術開發出來的,供遙測數據采集軟件調用,測試表明,該軟件運行穩定,能夠滿足實時遙測數據的采集分析。
參考文獻
[1] 任淼,王秀萍.2011年國外空空導彈發展綜述[J].航空兵器,2012(3):3?7.
[2] 樊會濤.空空導彈系統總體設計[M].北京:國防工業出版社,2007.
[3] 李英麗,劉春亭.空空導彈遙測系統設計[M].北京:國防工業出版社,2006.
[4] 安桂生,陳雷.空空導彈靶場遙測接收處理的現狀與發展趨勢[J].航空兵器,2006(3):56?59.
[5] 孫鑫,余安萍.VC++深入詳解[M].北京:電子工業出版社,2006.
[6] 方可燕,張雙民,徐振明.Visual C++ 6.0實戰與精通[M].北京:清華大學出版社,2000.
[7] 孫家廣.計算機圖形學[M].北京:清華大學出版社,2003.
[8] 任哲.MFC Windows應用程序設計[M].北京:清華大學出版社,2004.
[9] 劉婷婷,潘彤,陳彬茹.利用雙緩存技術提高繪圖效率[J].電腦編程技巧與維護,2012(18):22?23.
[10] 姜曉峰,李云飛.計算機圖形圖像技術與應用教程[M].北京:北京希望電子出版社,2002.
[11] 周憲英,高成文.光滑不等距插值算法及其在遙測數據處理中的應用[J].現代電子技術,2013,36(18):13?15.
[12] 劉亞南,陳雷,常樹龍,等.遙測數據融合軟件的設計與實現[J].現代電子技術,2012,35(4):136?138.
[13] 王冬冬,李宇,張保祥.基于FPGA與ARM的遙測數據網絡化采集[J].現代電子技術,2011,34(16):89?92.
[14] 常樹龍.空空導彈遙測數據三維實時顯示系統設計與實現[J].現代電子技術,2010,33(4):64?66.