秦振漢,林 淵,胡廣明,郭雙紅
(航天科工慣性技術有限公司,北京 100074)
儀器互換性是衡量測控系統(tǒng)的重要指標,也是測試軟件設計和開發(fā)時面對的重點問題。提高互換性的目的是當測試設備儀器升級或替換后, 不會對現有的測試軟件造成太大影響;同時便于已有測試程序向其他測試設備的移植[1]。目前,已經陸續(xù)推出了多種儀器互換標準、規(guī)范[2-5],并在測控領域得到了廣泛的應用。但在實際工程項目中,仍然存在大量的非標準儀器、板卡,這些儀器的驅動程序未遵循或未完全遵循現有的標準,而是使用廠商自定義的指令集、API函數,相互間無法兼容。由這些非標準儀器、板卡構成的專用測試設備,在測試軟件開發(fā)中無法使用現有的互換性技術,當板卡或儀器進行升級或替換時,由于特定驅動程序的改變,經常導致現有的測試程序無法使用;同時,測試軟件和硬件驅動程序直接相關,無法快速、方便地移植其它測試設備上,測試軟件的可移植性很低。
為此,通過對開發(fā)實踐的歸納和總結,本文提出了一種提高專用測試設備互換性的工程實現方法。該方法忽略了各種儀器或板卡的具體實現細節(jié),將關注點放在更高一層的測試設備層面,通過對測試設備需要實現的測試需求的抽象,建立標準化的測試需求接口集合,并通過對這些接口的組合,建立特定的測試設備驅動接口。業(yè)務邏輯程序只依賴該接口,不涉及硬件的實現細節(jié)。同時,將測試儀器或板卡的具體操作封裝在驅動組件內部,并與配置文件一起發(fā)布,描述了測試設備的實現細節(jié)。
通過這種方式,為測試軟件的開發(fā)提供了規(guī)范的接口定義,業(yè)務邏輯面向接口進行開發(fā),便于現有軟件在不同測試設備上的移植;同時,將各種非標準儀器驅動對測試軟件的影響控制在驅動組件內部,提高了測試設備的儀器互換性。
目前常用的儀器互換性技術包括: SCPI互換、VPP互換、ATLAS語言規(guī)范、IVI-C、IVI-COM、IVI-MSS、IVI-Signal互換[2-5]等。這些技術可分為面向儀器的互換和面向信號的互換等兩類[5]。其中,SCPI互換、VPP互換、IVI-C和IVI-COM互換等屬于面向儀器的互換, 其基本思想是把同類儀器的操作封裝成相同的接口,其函數名稱、參數相同,主要解決同類儀器之間互換問題。但實際上隨著儀器的功能、種類越來越多,已經很難對儀器進行明確的分類,也不能覆蓋所有的測試儀器。面向信號的互換技術包括ATLAS語言規(guī)范、IVI-MSS、IVI-Signal互換等,其基本思想是按照儀器支持的信號功能對測試資源進行分類,相同的信號具有相同的函數接口。雖然測試程序可以面向信號方式實現,但是對各種物理儀器的操作仍然需要調用各種驅動程序來實現。
在專用測試設備開發(fā)中,需要使用大量的PCI、CPCI嵌入式板卡和其他一些非標準儀器。這些儀器的驅動程序由不同廠商、在不同的時間開發(fā),并沒有遵守統(tǒng)一的標準或規(guī)范。有些測試儀器、板卡是針對特定需求而定制開發(fā)的,本身就沒有可供參考的標準。
以導航計算機測試設備為例,這是一個由多種測試設備組成的系列化產品,用于各型導航計算機的測試,在產品研試、小批量試制和生產交付階段中廣泛應用。該類測試設備受功能需求、時間、成本、通用化、系列化等因素的影響,使用了很多的非標儀器和板卡。表1羅列了典型測試設備中幾種常用儀器的選型情況。
表1 幾種典型導航計算機測試設備的硬件構成
從表1的情況可知,除少數儀器(以斜體標識)外,大多數儀器、板卡的驅動程序都不是按照現有標準開發(fā)的。此外,有些專門定制的板卡,其類別已經很難劃分,也無法采用面向信號方式描述。這種情況在專用測試設備中很常見,給互換性開發(fā)帶來了很大的困難。
針對這種情況,參考已有的研究成果[6-8],結合實際工程實踐,建立了如圖1所示的專用測試設備的互換性模型。
圖1使用統(tǒng)一建模語言(unified modeling language,UML),以組件圖的形式,描述了互換性模型內部各種接口、組件的拓撲結構。位于最頂層的是測試業(yè)務邏輯接口。位于模型底層的是各種測試儀器、板卡的驅動程序,包括儀器廠商提供的標準驅動程序、非標準驅動的API函數及其封裝組件等。
該模型的核心是在業(yè)務邏輯和具體儀器驅動程序之間增加了一個獨立的測試設備驅動器,并通過后者隔離了上下層的直接聯系,封裝了所有關于硬件的操作。測試業(yè)務邏輯程序只針對測試設備驅動接口進行開發(fā),使其具備良好的可移植性;當測試設備升級或儀器替換時,只需重構測試設備驅動組件,不必修改已有的軟件程序。測試設備驅動器包含了5個獨立的功能單元。
圖1 專用測試設備的互換性模型(組件圖)
1)測試需求接口集合:
通過對測試設備硬件需求的分類,針對各項測試需求,建立規(guī)范的需求接口,并將其匯總在一起,形成面向該類設備的、標準化的需求接口集合。例如,對于慣導、慣測等類型的被測產品,由于其數字化程度很高,因而在測試設備的硬件需求中,以各種類型的數字通訊需求為主;對于導航計算機類的被測產品,測試設備的硬件需求較為復雜,包括了數字通訊、模擬量、數字量、脈沖信號以及其它的特殊接口等。
這些接口本質上是對該類測試設備所實現的測試需求的抽象,反應的是該類設備硬件需要實現的系統(tǒng)級功能,與非標準儀器、嵌入式板卡的驅動接口相比,具有更好的普適性和穩(wěn)定性。
2)測試設備驅動接口:
測試需求接口集合描述了某類設備的全部需求,但實際上,每種測試設備并不需要實現全部功能。為此,建立獨立的測試設備驅動接口,通過對若干種需求接口的組合,描述了某個測試設備需要實現的各項功能,其目標是將軟件需求層面的測試要求,映射為軟件設計層面的驅動接口定義。在測試設備驅動器中,采用外觀(Facade)模式[9],將驅動接口作為對外的唯一端口,提供了標準接口規(guī)范、交互機制,屏蔽驅動器內部的具體實現。
3)測試設備驅動組件:
測試設備驅動組件是驅動接口的具體實現,描述了某個實際測試設備是如何實現驅動接口中定義的各項需求。測試設備功能的實現依賴于集成的測試儀器、板卡以及電氣連接拓撲關系。該模型中,前者對應的是測試設備驅動組件,后者保存在配置文件中。
4)測試設備配置文件:
配置文件采用XML文件形式,描述了測試設備的資源配置信息,包括各種儀器、板卡的資源描述、儀器的信號端口定義、內部的電氣連接關系、設備的對外功能端口等。通過這些文件,將測試設備對外提供的各個功能項目映射到內部儀器、板卡的端口和引腳上,從而將硬件資源配置信息與業(yè)務邏輯程序分離,提高了測試軟件開發(fā)的靈活性和移植性。
5)設備驅動創(chuàng)建組件:
該組件根據設備的資源配置信息,完成測試設備驅動組件的實例化操作,從而在測試業(yè)務邏輯與測試設備硬件建立關聯。
該組件使用了簡單類廠模式,根據測試設備的邏輯名稱,通過反射機制,動態(tài)創(chuàng)建驅動組件對象。利用運行時動態(tài)創(chuàng)建方式,可以將設備驅動組件的實例化操作延遲到軟件運行后進行,使測試軟件具有良好的擴展性,當硬件儀器升級或替換時,只需在配置文件中修改驅動組件的信息,無需修改原有的測試程序。
該方法中,測試需求接口集合、測試設備驅動接口的設計、驅動組件開發(fā)是主要工作內容。
在實際的工程應用中,每種測試設備都是針對某個特定需求而開發(fā)的,這些需求在項目任務書、技術要求等文件中有明確的規(guī)定。可以通過對這些需求的匯總和分析,獲得該類設備的總體需求情況,進而抽象出對應的需求接口。
以導航計算機測試設備的需求情況為例,雖然每種測試設備的硬件構成都有差別,但仍然可以從更高層面上,總結出該類設備所具有的總體需求情況。這些硬件需求可以分為12類,其中,電源控制、串口通訊、模擬量控制和數字量控制是必選項;其他項目,如脈沖信號輸出、光纖陀螺集成測試、PWM信號采集、VF恒流源輸出、計數器信號控制、網絡通訊、CAN通訊、1553B總線通訊等為可選項,可根據實際的測試要求,靈活選擇。例如,在光纖陀螺測試中,必須提供光纖陀螺集成測試選項;在振梁加表測試中,需要不可逆計數器脈沖輸出控制;在含VF電路的產品測試時,需提供外部的恒流源控制功能等。
1)測試需求接口集合的設計:
針對需求分解中獲得的每項測試需求,建立獨立的需求接口,并提供規(guī)范的接口定義,代表了設備需要實現的一項獨立需求。在進行測試需求接口集合的設計時,主要關注以下兩點:
每個接口代表一個獨立的職責,避免重復定義和功能混淆。例如,不可逆脈沖信號和頻標信號在性質上基本相同,多數測試設備也都是采用相同的程控儀器或嵌入式板卡實現,但從需求角度分析,兩者職責完全不同,需要單獨定義。
接口定義中禁止出現硬件信息的內容。例如,測試板卡的板卡號、端口號、通道號等內容應避免出現在接口函數中。應從需求角度出發(fā),以被測產品編號、端口號等代替,并在配置文件中建立與具體硬件資源的映射信息。
2)測試設備驅動接口的設計:
測試設備的驅動接口定義了某個實際測試設備應實現的硬件功能。從前面的分析可知,每種測試設備的實現功能是有限的,都是若干需求項的組合,因而測試設備的驅動接口可以看作是多個需求接口的集成。
在圖2中,使用UML組件圖的形式,描述了某種專用測試設備的驅動接口(忽略了必選的需求項)。該驅動接口包含了串口通訊、光纖陀螺集成測試、脈沖輸出測試和計數器信號控制等四個獨立的需求項,可以實現一些功能上相對簡單的導航計算機產品的測試。
圖2 測試設備驅動接口的設計(組件圖)
在圖2中,還提供了一個測試功能基礎接口,定義了最基本的操作內容,如初始化、關閉、復位、運行狀態(tài)、事件的接收和發(fā)送等。所有特定項目的需求接口必須繼承該基礎接口,并通過后者,組合到測試設備驅動接口中,形成更復雜的、完整的測試設備驅動接口,同時,便于后者的功能擴展。
測試設備驅動組件是對測試設備驅動接口的實現,描述了測試設備的具體實現方式。測試設備驅動組件通過調用對應測試儀器、板卡的驅動程序,結合電氣關系配置文件,實現了測試設備驅動接口中定義的全部功能需求。
在工程項目中,一般將驅動組件的軟件開發(fā)和測試設備的硬件開發(fā)結合在一起,其過程如圖3所示。測試設備硬件設計是驅動接口設計的直接依據,明確該測試設備需要實現的功能要求。硬件選型工作直接決定了在驅動組件開發(fā)時需要使用的儀器驅動程序,電氣關系配置文件中的內容來源于硬件的電氣設計。最后,開發(fā)的設備驅動組件描述了測試設備是如何實現預定的功能,與設備的硬件開發(fā)相互匹配。
圖3 測試設備驅動組件的開發(fā)過程
導航計算機測試設備是一種典型的、用于電子產品測試的系列化專用設備。在該類測試軟件項目的開發(fā)中,通過測試設備驅動接口,為上層的業(yè)務邏輯程序提供了一個穩(wěn)定的開發(fā)基礎,例如,對于電源控制而言,測試程序只需針對電源控制功能接口進行開發(fā),不必了解該功能是如何實現的。
同時,將對各種測試儀器、板卡的控制功能封裝到具體的實現組件中。例如,對于前文表1中提到的三個測試設備,分別建立各自的測試設備驅動組件。雖然它們的對外接口完全一致,測試程序都可自由調用,但組件內部的具體實現卻完全不同。以“電源控制”功能為例:
1)設備1的電源控制:該設備的開發(fā)年代較早,使用了自研的電源輸出電路。在硬件上,通過數字IO板卡,控制繼電器的開閉,實現電源的通斷操作。在該設備驅動組件的內部,本質上是利用IO板卡的驅動函數,實現電源輸出的間接控制。
2)設備2的電源控制:硬件上使用了標準的程控電源,在驅動組件開發(fā)時,可直接使用規(guī)范的IviDCPwr類驅動,或使用廠商提供的IVI專用驅動程序,實現電源輸出控制功能。
3)設備3的電源控制:硬件上使用了外置的程控電源。在驅動組件開發(fā)時,使用RS232串口,發(fā)送廠商提供的SCPI控制指令,實現電源輸出控制功能。
從中可以看出,該方法將測試儀器、板卡驅動程序的差異性信息封閉在驅動組件的內部,并對外提供了統(tǒng)一的接口,當測試程序在不同測試設備上移植時,只需調用不同的驅動組件;當測試設備升級、改造后,只需調整驅動組件的內部實現,降低了對現有測試程序的影響。
在專用測試設備中,很多測試儀器、板卡的驅動程序不符合現有的標準和規(guī)范,為儀器互換和程序移植帶來了巨大的困難,為此,本文提出了一種針對專用測試設備的互換性實現方法。本方法將關注點放在了測試設備的系統(tǒng)需求上,屏蔽了不同的非標儀器驅動在具體細節(jié)上的差異,為測試軟件開發(fā)建立了更加宏觀和抽象的需求接口。測試軟件的業(yè)務邏輯針對該接口開發(fā),使得測試程序具有良好的移植性。此外,建立了特定的測試設備驅動組件,用于封裝各種非標準驅動程序,當硬件升級或改造時,其影響只限定在組件內部,便于儀器互換。
該方法已經在多個系列專用測試設備的軟件開發(fā)中得到了應用,有效隔離了測試軟件中業(yè)務邏輯部分和底層硬件部分,使兩者相互獨立,降低了軟硬件間的直接耦合性,有效提高了專用測試設備的儀器互換性。