尹常艷,段彥鵬
(西安泛華科技開發(fā)有限公司,陜西 西安 710075)
當前電子裝備的功能日益強大,對其的維修保障提出了更高要求。裝備維修保障時,測試設(shè)備利用測試程序,調(diào)用適配器、板卡等資源完成功能檢測,從而得出測試結(jié)果。因而測試程序的開發(fā)成為了自動測試的核心工作,其重要程度日趨顯著[1-2]。
現(xiàn)階段電子裝備進行維修保障需要通過專業(yè)的測控廠商,根據(jù)測試需求提供一套內(nèi)置測試程序集測試系統(tǒng)。當測試程序需要維護升級時,也需借助技術(shù)人員實現(xiàn)。測試程序的開發(fā),不但要求技術(shù)人員要全面了解測試設(shè)備、被測設(shè)備、接口等信息,還需要具有相關(guān)軟件的開發(fā)能力,然后通過編程實現(xiàn)測試功能。
主流開發(fā)環(huán)境強大的軟件功能、靈活的編程方式毋庸置疑,但也具有開發(fā)周期長、入門門檻較高的缺點。另外由于各開發(fā)環(huán)境所使用的語言、編程方式存在差異,進而導致各開發(fā)環(huán)境開發(fā)的測試程序之間的可互換性差。
由于上述各種因素,本文針對電子裝備測試程序開發(fā)的需求,充分考慮了開發(fā)環(huán)境的易用性及測試程序的通用性,利用虛擬儀器技術(shù),提出一種整合開發(fā)過程和資源,快速、便捷地根據(jù)測試需求開發(fā)測試程序,完成對被測裝備的測試。
虛擬儀器技術(shù)是利用高性能的模塊化硬件,結(jié)合靈活高效的軟件完成各種測試、測量和自動化的應(yīng)用。美國國家儀器公司開發(fā)LabVIEW圖形開發(fā)工具,提供了強大的軟件功能,縮短了產(chǎn)品投放市場時間、提高了產(chǎn)品開發(fā)和生成的效率[3]。LabVIEW中提供的VI腳本功能,可編程實現(xiàn)程序的創(chuàng)建、編輯和運行,減少VI的重復編輯。本文即利用VI腳本技術(shù)創(chuàng)建LabVIEW程序代碼。
測試程序的開發(fā)工具是編寫,編譯,調(diào)試測試程序的開發(fā)環(huán)境,也稱為測試程序軟件開發(fā)環(huán)境[4]。為減少軟件開發(fā)過程對程序生成的影響,本開發(fā)方法設(shè)計一套圖形化的開發(fā)方法,用戶設(shè)計出整個測試過程,配置相應(yīng)的屬性等參數(shù),通過調(diào)試后將測試流程自動轉(zhuǎn)化為LabVIEW程序代碼,實現(xiàn)程序的開發(fā)。文中介紹的開發(fā)工具主要由工具箱、流程圖繪制、屬性配置、變量管理、調(diào)試輸出、流程保存,生成程序這幾大功能塊構(gòu)成[5]。
工具箱提供測試流程中所需的功能模塊。根據(jù)功能劃分為固有模塊和擴展模塊。固有模塊包含開發(fā)過程所必須的模塊,如流程控制模塊(While、Switch、Timer等)和基本運算模塊(Add、Subt等);擴展模塊是將第三方提供的用于測試程序流程開發(fā)的模塊,如數(shù)據(jù)采集、信號分析等功能,通過工具將其封裝為具有Plugin方式的DLL,再以Plugin方式加載至擴展模塊中。
流程圖繪制完成圖形化測試流程的編輯。用戶拖拽工具箱上的模塊,將其放置在流程圖繪制窗口,通過連線將各子模塊按邏輯聯(lián)系在一起,完成某些特定功能。
屬性配置用于顯示和編輯對象屬性。屬性分為基本屬性和擴展屬性?;緦傩园▽ο蟮幕拘畔?,如名稱、顏色等信息。擴展屬性是對象特有屬性,如針對采集功能,擴展屬性包括采樣率、采樣間隔等信息[6]。
變量管理模塊集中管理程序中所有變量。測試程序中連線只代表程序的執(zhí)行流程,模塊間的數(shù)據(jù)交互是依靠變量完成。模塊的輸入可以是一個變量值,也可是多個變量的數(shù)學、邏輯、基本函數(shù)運算,最終模塊輸入以表達式形式給出,該模塊還會對用戶組合的表達式進行邏輯分析,避免輸入非法表達式。
調(diào)試輸出用來動態(tài)調(diào)試用戶開發(fā)的測試流程,降低測試程序自動生成過程中的出錯概率。用戶可針對流程圖上的任一節(jié)點來設(shè)置斷點、添加探針。在監(jiān)測窗口可觀察設(shè)置的各種變量的變化。調(diào)試可采用單步、跳出等方式,在流程圖繪制窗口形象的展示[7]。
調(diào)試后無錯誤,將測試流程整體保存為流程配置文件。該文件采用 XML文件形式,文中節(jié)點出現(xiàn)的順序即為執(zhí)行順序,節(jié)點的屬性即為配置參數(shù),節(jié)點的包含關(guān)系即為節(jié)點功能單元的嵌套關(guān)系。
最后利用VI腳本技術(shù),按照程序中節(jié)點的配置參數(shù)和執(zhí)行邏輯自動生成LabVIEW的程序代碼。生成測試程序分為參數(shù)解析和程序生成兩部分。參數(shù)解析模塊對測試程序的流程文件進行解析,將流程配置信息組織成需要的接口參數(shù)。程序生成模塊利用VI腳本技術(shù),通過識別接口參數(shù)不同的對象,將其生成并放置在框圖中,然后根據(jù)層級關(guān)系移動,最終進行連線,從而生成測試程序[82]。
根據(jù)測試需求設(shè)計測試流程。在工具箱上拖拽所需的功能塊,按照測試邏輯連接各功能塊,通過屬性窗口中設(shè)置各功能塊的參數(shù)、路徑等信息。完成后通過設(shè)置斷點、探針、變量等,在輸出和變量窗口觀察調(diào)試信息,對流程進行調(diào)試。
開發(fā)工具將調(diào)試無誤的測試流程信息整理保存,自動生成流程配置文件。該文件用于記錄流程執(zhí)行順序。文件中節(jié)點出現(xiàn)的順序即為執(zhí)行順序,節(jié)點的屬性即為配置參數(shù),節(jié)點的包含關(guān)系即為節(jié)點功能單元的嵌套關(guān)系。過程如下:測試流程頂層用節(jié)點Root表示測試流程開始,然后記錄測試流程的第一層級的流程控制節(jié)點。流程控制節(jié)點(WhileLoop、IfStruct、Parallel等)在文件中用容器記錄,每個控制節(jié)點分別在下層節(jié)點中詳細記錄各自特性信息。例如 WhileLoop,在下層節(jié)點中記錄其節(jié)點編號、標題、及所在容器的編號。如果其下層還包含容器,則繼續(xù)遞歸直至所有流程信息記錄完畢。另外測試流程中還包括變量參數(shù)信息,在流程配置文件中用變量節(jié)點記錄。變量節(jié)點中存儲了程序中定義的所有變量信息,從中可以解析出變量名稱、類型、維數(shù)等信息。
解析并整理流程配置文件,將節(jié)點的相關(guān)配置信息組織成程序生成時所需要接口參數(shù)信息。
解析文件調(diào)用LabVIEW中的XML文件操作函數(shù)實現(xiàn)。從流程配置文件中解析得到的節(jié)點類型及相關(guān)的信息,例如節(jié)點類型為While循環(huán),則從該節(jié)點獲取容器號、容器名、循環(huán)條件等信息;若節(jié)點類型為 Active,則從中獲取調(diào)用函數(shù)的名稱或者是 Dll函數(shù)的路徑、參數(shù)名、參數(shù)值等信息。若某節(jié)點的子節(jié)點類型仍是容器節(jié)點,則繼續(xù)遞歸,直至獲取該節(jié)點的所有信息;整個測試流程中所有節(jié)點信息會統(tǒng)一放置在接口參數(shù)信息中[9]。
利用LabVIEW VI腳本技術(shù),按照接口參數(shù)信息將測試流程中所有節(jié)點依次添加至 LabVIEW 程序框圖上。例如:節(jié)點類型是While循環(huán)或者條件結(jié)構(gòu),則在程序框圖設(shè)定位置自動放置While循環(huán)或者條件結(jié)構(gòu)。函數(shù)節(jié)點是根據(jù)解析出的類型劃分為內(nèi)置函數(shù)、子函數(shù)和外部庫節(jié)點。對于內(nèi)置函數(shù),開發(fā)工具根據(jù)函數(shù)名自動將該函數(shù)放置程序框圖上;對于子函數(shù),則從記錄的路徑中將該函數(shù)放置在程序框圖上;對于外部庫節(jié)點,則將調(diào)用庫函數(shù)放置在程序框圖上,然后按照 Dll路徑,導出函數(shù)調(diào)用規(guī)范以及參數(shù)信息(參數(shù)名,參數(shù)數(shù)據(jù)方向,參數(shù)類型,參數(shù)值等)配置庫節(jié)點。至此,測試流程中相關(guān)函數(shù),變量、結(jié)構(gòu)信息均以在程序框圖上生成。
接著,遍歷程序框圖中的對象,根據(jù)接口函數(shù)信息記錄的層級關(guān)系,將部分函數(shù)、變量等功能塊分別移動到各自的容器中,然后獲取所有需要連線對象,找到連線的源端子和目標端子將兩者連接,實現(xiàn)數(shù)據(jù)的傳遞。
最后對程序框進行整理,保存在指定路徑下。
至此,測試流程已經(jīng)轉(zhuǎn)化為了 LabVIEW 程序代碼。
為了驗證該方法,編寫一個模擬電壓輸出程序。生成的流程配置文件如圖1所示。
圖1 多通道模擬電壓程序流程配置文件Fig.1 Multi-channel analog voltage program flow configuration file
圖2 (左)生成節(jié)點 (右)節(jié)點移入容器Fig.2 (left) Generating node (right)node immigration container
圖中括號1中Container表示容器,其中包含了While循環(huán)(C部分)和4個函數(shù)(A和B)。從1中可以看出A中兩個函數(shù)在while之前,B中兩個函數(shù)在while之后。While循環(huán)內(nèi)部包含3個函數(shù)分別用Activity表示。結(jié)束條件是由Condition表示,是由while內(nèi)一個函數(shù)的端子控制。括號2中Variable是函數(shù)中的變量信息。圖 1(左)是根據(jù)流程配置文件生成控件、流程控制節(jié)點、函數(shù)等信息;圖 2(右)是將相關(guān)信息放入流程控制節(jié)點;圖3是將控件、函數(shù)等根據(jù)端子連線信息連接后,整理框圖,保存程序運行。
根據(jù)實驗驗證,該方法生成的流程配置文件能夠?qū)y試流程結(jié)構(gòu)描述清楚,根據(jù)其記錄的信息,利用VI腳本技術(shù)可以正確生成VI程序。
圖3 (左)連線后整理程序(右)運行程序Fig.3 (left) Collate program after connection (right) running program
本文介紹的測試程序圖形化開發(fā)方法,所有的功驗證能塊、流程控制結(jié)構(gòu)等均以圖形元素的形式展示,相比傳統(tǒng)的文本編程方式,具有形象直觀、編程門檻低,極大的降低了開發(fā)人員的學習成本[10]。同時,采用連線的方式控制節(jié)點的執(zhí)行順序,便于程序調(diào)試。
本文提出的測試程序開發(fā)方法提出來一種快速生成測試程序的思路。用戶可以采用其它工具生成測試程序的流程配置文件,并通過熟悉的開發(fā)環(huán)境,編寫腳本程序自動生成測試程序。
[1] 陳希祥, 邱靜, 劉冠軍. 裝備系統(tǒng)測試性方案優(yōu)化設(shè)計技術(shù)研究[J]. 中國機械工程, 2010, 21(2): 141-145.
[2] 王俊亞, 陳棣湘, 潘孟春. 基于模型的裝備快速測試方法研究[J]. 計算機測量與控制, 2011, 19(10): 2347-2350.
[3] 林業(yè)翔. 基于labVIEW的自動測試系統(tǒng)的研究與實現(xiàn)[D].華南理工大學, 2016.
[4] 齊永龍, 宋斌, 劉道煦. 國外自動測試系統(tǒng)發(fā)展綜述[J].國外電子測量技術(shù), 2015, 34(12): 1-4+7.
[5] 梁磊, 劉士儀, 李明. 基于活動圖的OWL-S過程模型的圖形化建模及實現(xiàn)[J]. 軟件, 2012, 33(4): 101-104.
[6] 艾華. 便攜式多功能裝備故障綜合測試儀設(shè)計[J]. 中國新通信, 2017, 19(20): 148-149.
[7] 李向東, 高甲子. 艦船裝備系統(tǒng)軟件一體化測試技術(shù)與質(zhì)量控制方法研究[J]. 船舶標準化與質(zhì)量, 2017(5): 53-59.
[8] 紀亮. 國家物聯(lián)網(wǎng)感知裝備產(chǎn)業(yè)計量測試中心落戶無錫[J].中國計量, 2017(9): 33.
[9] 李爍, 李明明. 中國醫(yī)學裝備協(xié)會醫(yī)學裝備計量測試專委會學術(shù)會議暨首屆青年學組成立大會成功召開[J]. 中國醫(yī)學裝備, 2017, 14(8): 140.
[10] 盧超, 黃蔚, 胡國超. 基于圖形數(shù)據(jù)結(jié)構(gòu)的復雜對象建模設(shè)計[J]. 軟件, 2015, 36(12): 220-223.