?

基于句柄和腳本定制的試飛數據自動卸載工具

2016-09-08 09:23賈雨王爽劉升護
電子設計工程 2016年13期
關鍵詞:配置文件腳本控件

賈雨,王爽,劉升護

(中國飛行試驗研究院 陜西 西安 710079)

基于句柄和腳本定制的試飛數據自動卸載工具

賈雨,王爽,劉升護

(中國飛行試驗研究院 陜西 西安710079)

試飛數據卸載及位流分析是飛行試驗中的一個重要環節,直接影響著飛行試驗結果分析的及時性和有效性。本文提出了基于句柄和腳本定制相結合的試飛數據自主卸載工具,通過配置文件按照操作句柄或腳本設定的操作流程,自動調用相應的卸載和位流分析軟件進行數據卸載分析。經過實踐使用表明,該工具緩解了傳統數據卸載耗費大量人力的問題,同時確保了試飛數據的及時性和準確性。

試飛數據;數據卸載;位流分析;句柄;腳本

飛行試驗是在真實飛行條件下進行的科學研究和產品試驗,是航空航天科技發展的重要手段,是航空產品研制和鑒定的必須環節,是為用戶摸索和積累經驗的有效途徑。試飛數據處理的對象是經由測試系統在飛行試驗或地面試驗進行中所采集到的實驗數據,然后按照試飛課題要求對采集到的試驗數據進行加工、整理、分析,使得課題人員及時掌握飛行情況,診斷和檢測飛行參數的質量,給出在試驗狀態下飛行任務完成情況,以保證飛行安全和提高試飛質量,最終得到評價試驗對象的有用信息,它是航空武器裝備定型、鑒定最重要的依據。

目前,試飛數據的事后處理是在飛行結束之后地面卸載人員將機載記錄器記錄的飛行數據通過專業卸載軟件卸載到數據服務器上并根據需要進行位流分析,然后提供給數據處理人員進行數據的預處理與二次處理。隨著科技的進步和測試技術的發展,飛行試驗過程中的測試參數與日劇增,而且由于試飛架次的不斷增加,試飛數據量也隨之增大,然而目前數據卸載都是通過地面卸載人員手動完成,導致數據卸載變得愈加繁重和花費時間,對數據的快速處理要求帶來很大挑戰。

針對以上問題,文中提出了基于句柄和腳本定制相結合的自主卸載工具,在需要進行數據卸載時用戶只需要編寫一個簡單的配置文件,卸載工具只需要根據配置文件控制相關句柄或解析相應動作腳本,即可自動控制卸載軟件進行試飛數據卸載和位流分析,節省了大量的人工操作時間,有效提高了數據卸載的工作效率,而且還可以防止人為因素而引起的錯誤,保證飛行試驗數據卸載的準確性、及時性及完整性。

1 自主卸載工具設計

軟件控制指在自己的程序中針對某些特定的應用軟件模擬人的行為實現自動控制,軟件控制使得我們能將現已經成型的第三方一系列相關軟件集成為一個大的應用,大大地節約了系統開發時間。在本文中我們利用Windows系統的消息機制,在合適的時刻獲取目標程序的相應句柄,模擬Windows系統向其適當窗口發出相應的消息實現數據卸載和位流分析。同時考慮到第三方軟件升級等變動造成的窗口句柄實效,我們還實現了軟件的腳本控制功能,用戶可以根據需要選擇現有腳本或者自己編寫腳本對第三方軟件進行控制進行數據卸載和位流分析。

自主卸載工具的最主要目的是將地面卸載人員從重復繁瑣的卸載軟件操作中解放出來,減少卸載人員的工作量,因此,軟件設計只需要用戶讀取定義的一組配置信息文件,卸載工具通過運行相應的操作配置文件,自動調用相關的卸載軟件和位流分析軟件進行試飛數據的卸載及位流分析,極大減輕了卸載人員的工作量,同時保證試飛數據卸載及位流分析的完整性和有效性。卸載工具的工作流程定義如圖1所示。

圖1 工作流程

用戶配置文件為一個規范化的文本文檔,自主卸載工具讀取一段完整的用戶配置定義后根據用戶選擇利用Windows系統的消息機制控制句柄或者調用腳本解析模塊解析相應腳本動作文件,模擬按鍵操作控制相應的卸載軟件及位流分析軟件,卸載工具的用戶配置管理、句柄獲取與控制、動作腳本文件的解析以及日志記錄功能通過C++[1]開發環境編程實現。當卸載分析軟件開始工作時,自主卸載工具停止繼續解析配置文件,而是不斷檢測當前卸載分析軟件是否運行完畢,當檢測到當前的卸載分析軟件運行完畢時,關閉當前軟件,用戶配置管理讀取下一段完整的用戶配置定義開始下一個卸載操作控制直至用戶配置文件執行完畢。在下文中將著重介紹基于Windows系統的消息機制句柄控制模塊、腳本定義及解析模塊、戶配置模塊及日志記錄模塊。

2 Windows系統的消息機制句柄控制

2.1Windows消息機制概述

Windows是消息驅動的系統。Windows應用程序的鍵盤或鼠標等的輸入由Windows系統以消息的形式送給應用程序窗口。系統將會維護一個或多個消息隊列,所有產生的消息都會被放入或是插入隊列中。系統會在隊列中取出每一條消息,根據消息的接收句柄而將該消息發送給擁有該窗口的程序的消息循環。每一個激活程序在循環中獲得屬于自己的消息并根據接收窗口的句柄控制相關窗口過程。這就是Windows操作系統的消息機制。消息的數據結構如下:

在Windows程序中,消息是由MSG結構體來表示的。MSG結構體的定義如下[2]:

Typedef struct tagMsg{

HWND hwnd;

UNIT message;

WPARAM wParam;

LPARAM lParam;

DWORD time;

POINT pt;

}MSG;

其中,hwnd表示目標窗口的句柄。Message指定了消息類型。在Windows中,消息是由一個數值來表示的,不同的消息對應不同的數值。wParam和lParam用于指定消息的附加信息。time表示消息產生的時間,pt則是消息產生時鼠標在屏幕中的位置坐標。

2.2卸載軟件和位流分析軟件控制技術

上面介紹了Windows系統的消息機制,自主卸載工具要控制卸載軟件和位流分析軟件,還須要弄清楚兩個問題,如何獲取卸載軟件和位流分析軟件的對應窗口的句柄和如何向該窗口發送消息。

2.2.1獲取窗口句柄

Windows中用窗口句柄(Handle)來標識一個窗口。有句柄的控件本質上都是一個窗體(window),它們可以獨立存在,可以作為其它控件的容器,而沒有句柄的控件,如Label,是不能獨立存在的,只能作為窗口控件的子控件。窗口分為主窗口和子窗口,并且子窗口中還有子窗口。在這里我們利用SPY++工具來確定每一窗口(包括有句柄的控件)之間的從屬關系,SPY++以清晰的樹狀結構表示窗口的父窗口和子窗口。

要找到卸載軟件和位流分析軟件的某一控件,必須首先找出其窗口,再逐級的找出子窗口,直至找到想要控制的控件。要獲得窗體/控件的句柄,你先用SPY++獲得它的類名或窗口標題,如位流分析軟件PCMDUMP窗口標題為“PCM數據文件檢查”,然后用 FindWindow即可獲得其句柄,如PCMDUMP句柄

hWnd=::FindWindow(NULL,"PCM數據文件檢查");

其他窗體/控件也類似,只要用SPY++選獲得窗體從屬關系,便可以一步步用FindWindow或FindWindowEx獲得其句柄。

2.2.2發送Windows消息到受控窗體/控件

發送消息到指定卸載軟件或位流分析軟件的窗體/控件是通過以下兩個Windows API函數完成的:SendMessage和PostMessage。兩個函數的區別在于:PostMessage函數是非阻塞的,只是向線程消息隊列中添加消息,添加完之后立即返回。而SendMessage是非阻塞的,它并不是把消息加入到隊列里,而是直接翻譯消息和調用消息處理,直到消息處理完成后才返回。

應用程序窗口一般有按鈕、文本框、菜單、滾動條等不同的要素組成,要控制一個可控的控件,可以通過SendMessage這個API函數發送特定的消息,我們可以借助于SPY++工具,通過工具的“Message Log”功能,先進行一次類似操作,再查看該操作所須要的SendMessage函數的參數值。

1)控制菜單欄

要實現對菜單的控制,首先要去的菜單的標識信息,Windows應用程序的菜單是一個為樹狀結構,要取得菜單項的句柄就得從樹根出發逐級而下獲得。利用Windows API函數GetMenu取得主菜單的句柄,然后再用GetSubMenu取得子菜單的句柄,而取得菜單標識項則調用GetMenuItemID。得到了菜單項的標識后,就可以同過發送WM_COMMAMD消息選擇控制菜單項了。

::PostMessage(hParentWnd,WM_COMMAND,(WPARAM)menuid,NULL);

2)控制按鈕

按鈕的控制是向按鈕句柄發送CLICK消息。

::SendMessage(hChildWnd6,BM_CLICK,0,MAKELPARAM (2,2);

3)控制文本輸入

實現文本的輸入,是向文本框發送WM_SETTEXT消息,例如向文本框輸入一段文字,文字存放在str中。

str=m_FrameSet_Number;

::SendMessage(hChildWnd,WM_SETTEXT,0,(LPARAM)_T (str.c_str());

3 腳本及腳本定義解析

當卸載軟件或位流分析軟件版本發生變化時,如果不更新自主卸載工具繼續使用句柄控制會導致句柄獲取實效,無法繼續完成相關操作,在這里,我們為用戶提供腳本控制功能,用戶可以利用現有腳本或自定義動作腳本有效控制卸載軟件或位流分析軟件。

3.1腳本定義

隨著計算機的運算速度不斷提高,編程的方法和技術的不斷演變,面向軟件組件結構的系統設計方法逐漸為眾多的開發者所接受。程序開發的觀念正發生著變化:從使用高級程序設計語言編寫應用程序向結合腳本語言[3]開發應用程序過渡[4]。高級程序設計語言主要是用于構造帶有復雜數據結構和算法的組件。而腳本語言則是一種“穿線的語言”或“系統集成語言,它總是假設已經存在一個功能強大的組件集合,而運用腳本語言編程的目的就是根據應用需求粘貼組合這些組件,形成一個實際的應用系統。腳本語言具有以下優點[2]:腳本語言的無類型性;腳本語言的被解釋執行;腳本語言的簡單性;腳本語言的高效性。

在試飛數據卸載和位流分析過程中,卸載人員都是經過一個既定的操作流程操作一系列的卸載軟件和位流分析軟件組合完成試飛數據卸載分析工作,為了完成試飛數據的自動卸載和位流分析,在程序中需要定義一套完整的動作腳本語句。通過粘貼組合這些腳本語句,可以形成對某個卸載分析軟件進行完整操作的操作配置文件定義,然后利用C++編寫的腳本解析模塊自動解析該操作配置文件文件,最終實現試飛數據的自動卸載及位流分析。具體腳本操作定義如下所示:

#以"#"開頭的行為注釋行

[SLEEP]暫停時間(以秒計算)

[RUN]SIZE=[NORMAL(default)|MAX|MIN] " filepath""Para"

[OPEN]SIZE=[NORMAL(default)|MAX|MIN]"filepath"

[ACTIVE]"Feature"

[CLOSE]"Feature"

[MOUSEMOVE] x、y

[LCLICK]

[RCLICK]

[LDBLCLICK]

[KEYPRESS]STRING

[KEYDOWN]Char

[KEYUP]Char

[SCREENSAVE]

[SUSPEND]

[PAUSE]STRING

3.2解析模塊

盡管對于粘貼型和系統集成型應用程序,用腳本語言能以幾乎快10倍左右的速度開發,但是對于包含復雜數據結構和算法的系統,高級編程語言的類型性能夠使應用程序更容易控制。在那些運行速度要求很高的地方,高級編程語言能以比腳本語言快10到20倍的速度運行。而且腳本編程所使用的組件都需要用高級編程語言精心組織和編寫。顯然,兩類語言具有很強的互補性。把它們結合起來使用就能產生強大功能的編程環境:高級編程語言用于生成組件,腳本語言把它們組合起來構成應用程序。

通過腳本語句的粘貼組合形成的腳本文件,自動卸載工具可以快速輕松的實現不同的應用需求,同時,卸載工具需要“解釋”這些腳本文件,要根據腳本定義的不同需求來控制相應的位流分析和卸載軟件,即能夠對腳本文件解析執行。這些是腳本語言本身無法實現的,因此,該卸載工具利用C++編寫腳本解析模塊從而根據解析情況進行相關卸載及位流分析軟件的操作,實現腳本文件的解析功能。

解析模塊由分解源程序、語句解釋、表達式解析器和語法錯誤處理幾部分組成。解釋器對源程序進行邊解釋邊執行。在整個程序的解釋執行當中,若出現語法錯誤,就執行語法錯誤處理程序,提醒用戶腳本文件編寫錯誤。解析模塊的結構如圖2所示。

圖2 解析模塊結構

語句解釋是整個解析模塊的關鍵部分,每一個語句對應于一個方法,在一個循環里面對程序的所有語句進行解釋。每個語句的第一個“令牌”是關鍵字,根據關鍵字,調用相應的方法進行解釋,解析模塊能夠自動地在自定義的動作對象和鍵盤鼠標操作之間根據名稱一致性的原則實現屬性和方法的對應,例如當在腳本片斷中執行定義的行為描述“[KEYPRESS]ALT+F4”,那么就會模擬相應的鍵盤組合操作。在這里,我們通過HOOK技術[5],利用WINDOWS的消息機制實現鼠標鍵盤動作的模擬。HOOK技術即鉤子技術。在Windows系統中,鉤子是一種特殊的消息處理函數[6]。鉤子可以監視系統或進程中的各種事件消息,截獲發往目標窗口的消息并進行處理。這樣,我們就可以在系統中安裝自定義的鉤子,監視系統中特定事件的發生,完成特定的功能,比如截獲鍵盤、鼠標的輸入和日志監視等等。

4 用戶操作組件實現

用戶操作控制組件主要基于vc6.0開發環境完成。操作界面如圖3所示。用戶可通過加載運行配置文件進行數據卸載。

圖3 工具操作界面

4.1配置文件實現

用戶通過編輯配置文件組織數據的卸載分析流程,一個配置文件由幾組規范化的配置定義組成,每一組配置定義完成一個特定的數據卸載或位流分析操作,如FTrans卸載、PCM數據位流分析。由于每架飛機試飛數據數據類型相對穩定,而且卸載結果數據存儲路徑固定,配置文件經過一次編輯定義好一組卸載操作流程,以后只需要極小的修改即可完成一個飛行架次的數據卸載,自主卸載工具根據配置文件調用相關的卸載軟件完成試飛數據的卸載任務,配置文件如下所示:

#****************************D40f卸載

**************************

Begin:

Type:D40f

TestIni:FTrans.ini

Exe_FileName:

Source_FileName:D:JY est33120140630-1DATaRec.Raw

Result_FileName:D:JY est33120140630-1-pcm

Video_Dir:D:JY est33120140630-1-video

Drc:D:JY est331970#Script.Drc

End

#*************************位流分析-PCM

***************************

Begin:

Type:PCM

TestIni:PCMDUMP_PCM.ini

Exe_FileName:

Source_FileName:D:JY est33120140630-1DCM1.pcm

Result_FileName:D:JY est33120140630-1DCM1.DCM

FrameSet_Number:970-1

End

4.2卸載日志生成

日志文件記錄了卸載工具運行的運行狀態,如運行開始時間記錄,執行的卸載位流分析操作類型記錄,操作中的關鍵步驟以及錯誤信息的記錄,同時還對運行過程中的節點狀態進行截圖保存。通過查看卸載日志和節點狀態截圖,用戶可以準確掌握卸載工具的運行狀態和分析結果數據的正確性和完整性,保證試飛數據卸載及位流分析的正確性,為課題分析提供準確有效的試飛數據。

5 結束語

基于句柄和腳本定制的試飛數據自動卸載工具實現了句柄獲取與控制模塊、格式化的操作腳本定以及解析模塊和用戶配置模塊,有效解決了飛行試驗數據卸載耗費大量人力的難題,提高了數據卸載的工作效率,同時還具備日志記錄功能和關鍵畫面截取功能,防止人為因素而引起的錯誤,保證飛行試驗數據卸載的準確性和有效性。

[1]孫鑫.VC++深入詳解[M].北京:電子工業出版社,2006.

[2]OUSTERHOUT J K.Scripting:Higher Level Programming for the 21st Century[J].IEEE Computer,1998,31(3):23-30.

[3]邵堃,劉宗田.腳本語言發展研究[J].計算機科學,2000,27(1): 21-23.

[4]劉克勝,王忠壽.API Hook關鍵技術解析[J].網絡安全技術與應用,2006(11):48-50.

[5]崔紅志,索巖基.基于API的Win32串口通信編程技術[J].科技信息,2010(7):80-81.

[6]殷振嶺,商書風.系統鉤子與鍵盤監控[J].信息技術與信息化,2004(5):26-28.

Design of a flight test data independent downloading tool based on handle and script designing

JIA Yu,WANG Shuang,LIU Sheng-hu
(Chinese Flight Test Establishment,Xi'an 710079,China)

Data downloading and bits analysing is a very important step of flight test,which affects the level of the flight test results analysis transitive and validity.In this paper we proposed a self-determinative downloading tool based on handle and script designing.It can automatic call downloading or analyzing software to download or analyze flight test data throw configure file.substantial evidence the tool can reduce people's work effectively,and insure the transitive veracity of the flight test data at the same time.

flight test data;data downloading;bits analyzing;handle;script

TN06

A

1674-6236(2016)13-0045-04

2015-07-08稿件編號:201507067

賈 雨(1988—),男,陜西府谷人,碩士研究生,助理工程師。研究方向:試飛遙測監控與數據處理。

猜你喜歡
配置文件腳本控件
酒駕
安奇奇與小cool 龍(第二回)
基于.net的用戶定義驗證控件的應用分析
互不干涉混用Chromium Edge
基于Zookeeper的配置管理中心設計與實現
忘記ESXi主機root密碼怎么辦
關于.net控件數組的探討
為View桌面準備父虛擬機
快樂假期
小編的新年愿望
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合