楊為祿,樓紅英
(1.南京國睿安泰信科技股份有限公司,南京 210013;2.南京電子技術研究所,南京 210039)
T/R組件自動測試系統(tǒng)的測試軟件是整個系統(tǒng)控制的靈魂[1],良好的軟件架構既能減少開發(fā)人員的工作量,使軟件做到高內聚、低耦合,又能夠在后期維護中取得優(yōu)勢。T/R組件自動測試系統(tǒng)軟件架構需求主要體現(xiàn)在以下三個方面:
1)架構的通用、可擴展、可維護
T/R組件自動測試系統(tǒng)軟件的通用是指軟件在硬件條件滿足的情況下,無需修改或經(jīng)過較少的修改就能夠用于多個型號、多種產品的T/R組件測試??蓴U展性是指軟件在現(xiàn)有功能的基礎上能夠進行功能的擴展,以適應需求的變化。可維護是指軟件易于維護,功能模塊必須做到高內聚、低耦合,也就是說軟件中某個功能模塊的損壞或更改不應影響其他功能模塊的運行,整個軟件還能正常工作。
2)測試儀器設備驅動程序的可互換
儀器設備中的驅動程序是測試系統(tǒng)中最重要的組成部分之一,用來實現(xiàn)儀器硬件的通信和控制功能[2],為降低開發(fā)成本,縮短開發(fā)周期,要求測試系統(tǒng)中的儀器硬件設備能夠不受生產廠家、型號的限制,通過系統(tǒng)軟件對配置的設備驅動程序自適應、自匹配實現(xiàn)硬件的無縫替換與升級。
3)測試程序的可移植性、可復用
已編制的測試程序能夠移植應用到其他測試平臺中進行T/R組件的測試,實現(xiàn)測試程序的重復利用。
傳統(tǒng)的系統(tǒng),在編譯發(fā)布完成之后,系統(tǒng)就不允許或者很難進行更改擴充,如果要進行某個功能的擴充,則必須要修改代碼重新編譯發(fā)布。這種傳統(tǒng)的軟件設計架構給軟件的開發(fā)、測試、維護等帶來極大困難,往往軟件設計階段的耦合性控制不好就會在設計期和維護期遇到巨大的麻煩。通過引入插件技術能很好地解決該問題。
所謂的插件就是系統(tǒng)的擴展功能模塊,這個模塊是以一個獨立文件的形式出現(xiàn)的,與系統(tǒng)是相對獨立的。在系統(tǒng)設計期間并不知道插件的具體功能,僅僅是在系統(tǒng)中為插件留下預定的接口,系統(tǒng)啟動的時候根據(jù)插件的配置尋找插件,根據(jù)預定的接口把插件掛接到系統(tǒng)中,基于插件系統(tǒng)構建軟件框架,具有以下優(yōu)點:(1)實現(xiàn)真正意義上的軟件組件的“即插即用”;(2)在二進制級上集成軟件,減少大量的軟件重新編譯、發(fā)布麻煩與時間;(3)能夠很好地實現(xiàn)軟件模塊的分工開發(fā),能夠大量吸取他人的優(yōu)勢;(4)可較好地實現(xiàn)代碼隱藏,保護知識產權。
SharpDevelop是一個使用C#開發(fā)而成的,并為用于開發(fā)C#或者VB.NET項目軟件而設計的編輯器軟件,是完全開源的IDE開發(fā)工具。它基于插件技術來實現(xiàn)整個系統(tǒng),完全通過XML配置文件進行插接配置,是一個穩(wěn)定、可靠的插件系統(tǒng)。要基于SharpDevelop開發(fā)應用程序架構必須先清楚其基本組成及基本概念[3]:
1)插件(AddIn)
在SharpDevelop的概念中,插件是包含多個功能模塊的集合,而不是一個功能模塊。在文件的表現(xiàn)形式上,它是一個addin配置文件,在系統(tǒng)中對應AddIn類。
2)插件樹(AddInTree)
SharpDevelop中的插件被組織成樹狀結構,成為插件樹。樹的結構是通過擴展點(Extension)中定義的路徑(Path)來關聯(lián)的,類似一個文件系統(tǒng)的目錄結構。系統(tǒng)中的每一個插件都在配置文件中指定了 Extension,通過Extension中指定的 Path掛到這棵插件樹上。在系統(tǒng)中可以通過 AddTreeSingleton對象來訪問各個插件,以實現(xiàn)插件之間的互動。
3)擴展點(Extension)
SharpDevelop中的每一個插件都會被掛到AddIn-Tree中,而具體掛接到這個插件樹的哪個位置,則是由插件的Extension對象中的Path指定的。在addin配置文件中,對應于<Extension>。例如下面這個功能模塊的配置:
<Extension path = "/SharpDevelop/Workbench/Ambiences">
<Class id= ".NET"class= "ICSharpCode.Sharp-Develop.Services.NetAmbience"/>
</Extension>
指定了擴展點路徑為 /SharpDevelop/Workbench/Ambiences,也就是在插件樹中的位置。
4)Codon
Codon的功能是描述(包裝)一個功能模塊(一個功能模塊對應一個實現(xiàn)了具體功能的命令類)。為了方便訪問各個插件中的功能模塊,Codon給各種功能定義了基本的屬性,分別是功能模塊的標識(ID)、功能模塊的類型(Name)。這個Name是addin文件定義中Codon的XML結點的名稱,ID才是真正的名稱,其中,Name可能是類(Class)、菜單項(MenuItem)、面板(Pad)等等。還是以上述定義為例:
<Extension path = "/SharpDevelop/Workbench/Ambiences"><Class id= ".NET"class= "ICSharp-Code.SharpDevelop.Services.NetAmbience"/>
</Extension>
<Extension ...> 內部定義了一個 Codon,<Class...>表示該Codon是一個Class,接著定義了該Codon的 ID和具體實現(xiàn)該Codon的類名,在該示例中,類名為 ICSharpCode.SharpDevelop.Services.NetAmbience。運行期間將通過反射來找到對應的類并創(chuàng)建其運行對象。
5)命令(Command)
正如前文所述,Codon描述了一個功能模塊,而每個功能模塊都是一個 ICommand的實現(xiàn)。最基本的Command是AbstractCommand,根據(jù)Codon的不同對應了不同的 Command。例如 :MenuItemCodon對應MenuItemCommand等等。
6)服務(Service)
插件系統(tǒng)中,有一些功能是整個系統(tǒng)都要使用的,例如:文件訪問、資源、消息等等。這些功能都作為插件系統(tǒng)的一個基本功能為整個系統(tǒng)提供服務,我們稱其為“服務”。為了便于訪問,這些服務都統(tǒng)一通過ServiceManager來管理。
T/R組件是雷達的核心,各種參數(shù)的自動化測試至關重要[4],T/R組件自動測試系統(tǒng)軟件通過儀器接口總線發(fā)出各類儀器的操作命令,同時控制被測組件的狀態(tài)切換,并接收系統(tǒng)中所有儀器設備的測試數(shù)據(jù)信息,對其進行分析處理,從而完成T/R組件參數(shù)的測試過程以及后期的數(shù)據(jù)分析和計算。
從功能上對系統(tǒng)軟件進行劃分,主要包括:(1)系統(tǒng)管理,包括用戶管理、數(shù)據(jù)庫管理和日志管理等;(2)T/R組件測試管理,包括被測件管理、測試參數(shù)管理、測試程序管理、測試結果管理、儀器驅動管理以及校準參數(shù)管理。
經(jīng)過上述分析,利用SharpDevelop插件系統(tǒng)構建T/R組件自動測試系統(tǒng)軟件架構,其基本框圖見圖1。
圖1 T/R組件自動測試系統(tǒng)軟件架構框圖
框架主體包括以下三部分:
1)框架基礎模塊
(1)插件框架核心:該模塊作為整個框架的核心,后臺調度整個軟件在后臺運行,提供各種服務。
(2)儀器驅動接口模塊:該模塊抽象出系統(tǒng)中常用的儀器功能接口,作為后期二次開發(fā)或替換時的契約協(xié)議。T/R組件的自動測試常用設備包括:矢量網(wǎng)絡分析儀、脈沖發(fā)生器、脈沖調制器、測試夾具臺等[5];
(3)被測組件管理模塊功能接口;
(4)測試參數(shù)管理功能接口;
(5)測試程序接口:T/R組件的主要參數(shù)包括:接收增益和隔離度、接收輸入輸出駐波、接收幅相一致性、接收相位精度、接收衰減器精度、噪聲系數(shù)、發(fā)射輸出功率、發(fā)射駐波、發(fā)射移相器精度、發(fā)射波形參數(shù)、發(fā)射功率調節(jié)范圍、發(fā)射電流、相位噪聲、頻譜分析等[6],按測試參數(shù)進行抽象即可完成測試程序接口的定義。
(6)測試結果數(shù)據(jù)管理接口;
(7)校準管理接口:可以根據(jù)測試校準測試抽象出功率校準、S21校準、S12校準、S11校準、噪聲校準等。
基礎功能模塊主要用于定義管理功能接口,實際應用中可以根據(jù)需要擴展不同的基礎功能接口定義。
2)框架主模塊
(1)啟動軟件的框架:包括了軟件的圖片資源等;
(2)軟件的主窗體及相關應用服務;
3)插件模塊
插件模塊是對基礎模塊中所有已經(jīng)抽象定義的功能接口的具體實現(xiàn),其作為一個插件存在系統(tǒng)中,可以自由添加、替換,通過配置文件的配置管理,系統(tǒng)軟件在啟動時動態(tài)加載。在T/R組件自動測試系統(tǒng)中,其擴展性及通用性主要由插件模塊的不斷更新來體現(xiàn)。
例如:儀器驅動插件庫中,可以存放管理同為信號源的不同廠家、型號的驅動庫,以插件形式存在,在需要更換儀器時,只要在配置文件中配置所使用儀器對應的驅動即可,無需更改代碼和編譯程序,從而在框架的頂層設計時就保證了系統(tǒng)軟件的通用和可擴展。
基于SharpDevelop構建的T/R組件自動測試系統(tǒng)軟件采用了基于“接口—插件”系統(tǒng)的原理,其開發(fā)過程實質就是各個功能模塊插件的開發(fā),在該軟件架構基礎上開發(fā)T/R組件自動測試系統(tǒng)程序的流程如圖2、圖3所示。
T/R組件自動測試系統(tǒng)中常用的矢量網(wǎng)絡分析儀的驅動程序的開發(fā)過程如下:
在系統(tǒng)軟件的框架基礎模塊中已定義矢量網(wǎng)絡分析儀驅動接口InetWorkAnalysis,則新開發(fā)驅動的過程為:
1)以插件開發(fā)的方式,添加一個儀器驅動的類庫。如:
public class NetworkAnalyzerZNB8:DeviceDriver-Base.InetworkAnalyzerDriver,在此類庫中完成矢網(wǎng)驅動控制功能的實現(xiàn)后,將其編譯生成應用程序可調用的驅動文件,其格式為動態(tài)鏈接庫,將其命名為“NetworkAnalyzerZNB8.dll”。
2)添加或修改系統(tǒng)軟件中的儀器驅動描述配置文件,其示例代碼如下:
<Path name= "/Workspace/DeviceDriver/">
<DeviceDriver id= "NetworkAnalyzerZNB8"
label="RS ZNB8 DriverModule"version="1.0"type="10"description="create by gratten on 2014-04-27"
class= "NetworkAnalyzerZNB8.NetworkAnalyzerZNB8"/>
</Path>
在示例中,type表示的是儀器的ID號,分別代表不同類型的儀器,如電源“1”、信號源“2”、頻譜儀“3”等,以此類推。
3)系統(tǒng)軟件中調用矢量網(wǎng)絡分析儀的驅動
T/R組件自動測試系統(tǒng)軟件中驅動的調用代碼如下:
InetworkAnalyzerDriver_handlerNA;
_handlerNA=DeviceDriverSession.Instance().Get-DriverInstance(InsIDService.Ins_NetowrkAnalyzer_ID.ToString())as InetworkAnalyzerDirver;
if(_handlerNA!=null)
{
_handlerNA.Initialize();
}
else
{
MessageService.ShowError(NetworkAnalyzerDriver Initialize Faild);
return;
}
在調用過程中,對儀器驅動通過儀器ID主鍵來識別,這個ID主鍵來源于外配置文件。也就是說,軟件調用什么驅動完全取決于外部配置內容而不是內部代碼,這樣就很好地保證了儀器替換的有效實現(xiàn)。同理,T/R組件測試軟件的其他諸如參數(shù)測試、系統(tǒng)校準等功能模塊都可以通過同樣的機制實現(xiàn)。
基于SharpDevelop構建的T/R組件自動測試系統(tǒng)軟件在架構上保證了通用、可擴展、可維護,同時也提供了T/R組件自動測試系統(tǒng)中儀器設備替換、測試程序復用的實現(xiàn)機制。雷達T/R組件自動測試程序應用實例如圖4所示。
圖4 基于SharpDevelop開發(fā)的T/R組件自動測試系統(tǒng)軟件
本文參考開源IDE軟件SharpDevelop的原理及組成,介紹了如何以SharpDevelop軟件框架為基礎來構建軟件的架構,并以T/R組件自動測試系統(tǒng)程序開發(fā)流程為例,說明在此架構下構建的自動測試系統(tǒng)軟件程序具有更好的通用性及擴展性。
[1]蔣曉紅,李為玉,石 慧.T/R組件自動測試系統(tǒng)的研制[C]//2007航空試驗測試技術學術交流會.烏魯木齊:航空試驗測試技術學術交流會,2007:11-12.Jiang Xiaohong,Li Weiyu,Shi Hui.Development of T/R module automatic test system[C]//meet of 2007 Aviation test and testing technology academic exchange.Urumqi:Meet of Aviation Test and Testing Technology Academic Exchange,2007:11-12.
[2]方 鵬,趙秀才.自動測試系統(tǒng)中儀器可互換技術及其應用[J].儀器儀表學報,2007,28(4):70-73.Fang Peng,Zhao Xiucai.Instruments exchangeability technique and its application in ATS[J].Chinese Journal of Scientific Instrument,2007,28(4):70-73.
[3]張 軍,李志秀,王 銳,等.基于SharpDevelop插件架構的研究及應用[J].云南大學學報(自然科學報),2011.Zhang Jun,Li Zhixiu,Wang Rui,et al.SharpDevelop plug-in architecture based on the research and apply[J].Journal of Yunnan University(Natural Sciences Edition),2011.
[4]裴 英.雷達數(shù)字T/R組件自動測試系統(tǒng)設計[J].現(xiàn)代雷達,2013(6):73-76.Pei Ying.Design of a digital T/R module automatic measuring system[J].Modern Radar,2013(6):73-76.
[5]李為玉.TR組件S參數(shù)自動測試軟件的設計和應用[J].現(xiàn)代電子技術,2012,35(13):123-125.Li Weiyu.Design and application of automatic testing software for TR component S-parameter[J].Modern Electronics Technique,2012,35(13):123-125.
[6]盧 晨.T/R組件自動測試技術研究[J].電子工程師,2003,29(9):35-42.Lu Chen.Study of T/R module auto-testing technology[J].Electronic Engineer,2003,29(9):35-42.