羅猛,詹惠琴,古軍
(電子科技大學(xué)自動化工程學(xué)院,四川成都 611731)
在早期的測試系統(tǒng)中,軟件平臺一般只提供文本編程方式給用戶使用,其測試程序是以測試流程為依據(jù)從上至下一步一步排下來的,所有與測試相關(guān)的參數(shù)、程控指令、測試結(jié)果等都內(nèi)置于一個文本測試軟件中, 這種編程具有面向過程的編程規(guī)范,包含特定的語法規(guī)則,靈活性很強(qiáng)[1]。但是這種方式有其不足的一面,其一是一般測試程序編程過程較為復(fù)雜,這就要求測試人員必須具有較深的編程功底;其二是這種方式可維護(hù)性差,不適于進(jìn)行快速高效的現(xiàn)代自動化測試。而本文提出的基于圖形化編程語言的軟件平臺為測試工程師提供一個靈活簡便的可編程環(huán)境。實現(xiàn)了測試參數(shù)和測試程序的分離,開發(fā)人員更加專注于測試方法本身,而不用花太多時間在構(gòu)建測試系統(tǒng)所需的測試流程和控制策略上[2]。
ATS是整個測試系統(tǒng)的核心和關(guān)鍵,它是聯(lián)系測試資源和被測對象的軟橋梁,其體系結(jié)構(gòu)的好壞直接關(guān)系到整個自動測試系統(tǒng)的性能[3]。硬件資源自檢與校準(zhǔn)、軟件賬號管理、流程圖測試程序自動轉(zhuǎn)換、測試指標(biāo)報表生成及打印等功能都與軟件系統(tǒng)的設(shè)計息息相關(guān)。本著層次化,組件化,標(biāo)準(zhǔn)化的要求,同時為了滿足測試程序的可移植性及儀器的互換性以及測試系統(tǒng)軟件結(jié)構(gòu)的開放性、可擴(kuò)充與裁減性等要求[4],我們將分立器件測試系統(tǒng)軟件總共分為3個層次,包括ARM程序?qū)?,USB驅(qū)動層和上位機(jī)軟件層,圖1所示為系統(tǒng)軟件平臺總體架構(gòu)框圖。每個層的具體功能如下:
ARM程序?qū)樱褐饕ǜ鱾€功能板和測試板的驅(qū)動程序,以及實現(xiàn)ARM內(nèi)核對各個功能板進(jìn)行控制的執(zhí)行程序。
USB驅(qū)動層:主要是USB的接口驅(qū)動函數(shù),完成下層ARM與上位機(jī)軟件層的通信,進(jìn)行數(shù)據(jù)的編排和解析,是整個測試系統(tǒng)軟件的紐帶。
上位機(jī)軟件層:是整個軟件系統(tǒng)的最上層,也是最直接與用戶接觸的層次。用戶需要設(shè)置和保存的所有個人信息、群組信息、測試工程及測試項目信息都要通過該層來完成,同時在硬件通信良好的情況下接收并在顯示屏上顯示測試儀的測試結(jié)果數(shù)據(jù)供用戶查看分析。
圖1 系統(tǒng)軟件平臺總體架構(gòu)框圖
C#是由Microsoft為.NET Framework量身訂做的程序設(shè)計語言。C#語言是由C/C++演變而來的,除了擁有C/C++的強(qiáng)大功能外,還具有Visual Basic簡易使用的特性,也是一種面向?qū)ο笤O(shè)計語言。它繼承了C++中類得繼承、封裝、多態(tài)、重載等特性,另外它現(xiàn)代、簡單、完全面向?qū)ο蠛皖愋桶踩刃绿匦?,從而使我們開發(fā)出來的測試系統(tǒng)軟件具有良好的用戶體驗,優(yōu)良的兼容性,較高的靈活性和可擴(kuò)展性?;谙到y(tǒng)開發(fā)的要求和C#語言的特點,我們最終選擇了Visual Studio 2008作為上位機(jī)軟件的開發(fā)工具。
上位機(jī)軟件層次結(jié)構(gòu)如圖2所示。其中驅(qū)動層包括USB驅(qū)動以及hp萬用表驅(qū)動,其中USB通信API和hp萬用表通信API是通過動態(tài)鏈接庫(dll)形式封裝,向中間層提供通信接口。中間層包括.net平臺、微軟控件以及第三方控件,這一層起到承上啟下的作用。應(yīng)用層即儀器界面,是整個程序框架的頂層。
圖2 上位機(jī)軟件層次結(jié)構(gòu)圖
本測試系統(tǒng)中USB中間層主要負(fù)責(zé)上位機(jī)與下層ARM的數(shù)據(jù)信息交換,是上位計算機(jī)與分立器件測試系統(tǒng)連接的紐帶。USB驅(qū)動程序主要完成兩個方面的工作:一是通過USB驅(qū)動向下層ARM發(fā)送上位機(jī)的設(shè)置數(shù)據(jù)和控制信息;二是接收下層ARM發(fā)回的測試結(jié)果數(shù)據(jù)。驅(qū)動程序采用VC++6.0進(jìn)行開發(fā),以動態(tài)鏈接庫的形式進(jìn)行調(diào)用。
當(dāng)在界面上點擊“下載”按鈕后,上位機(jī)程序會將包含有數(shù)據(jù)類型、數(shù)據(jù)字節(jié)長度和數(shù)據(jù)信息或者控制命令信息的字符串按照規(guī)定的數(shù)據(jù)格式通過USB處理向下發(fā)送。圖3所示為USB數(shù)據(jù)的下載流程。
圖3 USB數(shù)據(jù)下載流程圖
當(dāng)下位機(jī)完成一個器件的完整測試后會及時將測試結(jié)果數(shù)據(jù)通過USB中間層傳輸?shù)缴衔粰C(jī)軟件中,但是上位機(jī)軟件并不能直接接收下位機(jī)送回的測試結(jié)果數(shù)據(jù),而需要經(jīng)過USB中間層的處理。所以當(dāng)USB接收到下層ARM發(fā)回的測試結(jié)果數(shù)據(jù)后,USB驅(qū)動層要對測試的結(jié)果數(shù)據(jù)進(jìn)行處理,調(diào)整結(jié)果數(shù)據(jù)的格式,并將包含有數(shù)據(jù)類型信息和數(shù)據(jù)長度信息的測試結(jié)果數(shù)據(jù)以字符串的形式按照某一協(xié)議格式送回到上位機(jī)軟件中,供上位機(jī)軟件調(diào)用。圖4所示為USB數(shù)據(jù)上傳的流程。
圖4 USB上傳數(shù)據(jù)流程圖
在分立器件測試系統(tǒng)中需要用到的USB動態(tài)鏈接庫函數(shù)的調(diào)用方法如下:
(a)[DllImport("2440usbDLL.dll", EntryPoint ="UsbTransmit", CallingConvention = CallingConvention.StdCall)]
public static extern void UsbTransmit(IntPtr hwnd); 該函數(shù)調(diào)用主要實現(xiàn)的功能是下載
ARM程序編譯生成的BIN文件。BIN文件是將系統(tǒng)的ARM程序編譯生成的二進(jìn)制文件,只有將BIN首先下載到ARM中整個系統(tǒng)才能開始工作,否則后續(xù)其他一切工作都不能完成。
(b) [DllImport("2440usbDLL.dll", EntryPoint ="strpc2arm3", CharSet = CharSet.Ansi, CallingConvention=Callin gConvention.StdCall)]
public static extern int strpc2arm3(string dataString);
該函數(shù)主要實現(xiàn)的功能是上位機(jī)工程設(shè)置參數(shù)的下載。參數(shù)dataString表示要下載的工程設(shè)置參數(shù)。
(c)[DllImport("2440usbDLL.dll", EntryPoint = "arm2pc_Data", CharSet = CharSet.Ansi, CallingConvention=CallingConve ntion.StdCall)]
public static extern string arm2pc_Data();
該函數(shù)主要實現(xiàn)的功能是接收由ARM傳回的測試結(jié)果數(shù)據(jù)。
另外,本系統(tǒng)中USB動態(tài)鏈接庫的編寫借助了部分MFC類庫中的函數(shù),所以在應(yīng)用本動態(tài)庫時,需要同時添加四個MFC的動態(tài)庫文件:MFCD42D.DLL、MFC42D.DLL、MFCO42D.DLL和MSVCRTD.DLL。
基于GCC的諸多優(yōu)點在設(shè)計初期,我們曾經(jīng)考慮過使用GCC來編譯下位機(jī)arm程序,但使用GCC需要編寫makefile文件搭建編譯平臺,這不是一件容易的事情。但后來發(fā)現(xiàn)ADS1.2 IDE提供了此問題的解決方案,ADS1.2 IDE提供了一個菜單項可以把ADS1.2工程轉(zhuǎn)化為一個和工程對等的.xml文件,然后調(diào)用ADS1.2提供的mcp2make工具將.xml文件轉(zhuǎn)化為makefile文件。這使得設(shè)計下位機(jī)軟件時可以用IDE界面搭建編譯環(huán)境,設(shè)置編譯信息,規(guī)避了編寫makefile文件的諸多細(xì)節(jié)問題。得到了makefile文件后,我們就可以使用VC++6.0提供的nmake工具調(diào)用makefile文件編譯整
個下位機(jī)工程。在makefile文件里分別調(diào)用ADS1.2提供armcc編譯器以及armlink連接器最終把整個下位機(jī)工程編譯成一個.axf文件;最后使用“fromelf -bin –output xxx.bin xxx.axf”命令將.axf文件轉(zhuǎn)化為.bin文件下載到下位機(jī),圖5為測試程序自動轉(zhuǎn)換及編譯流程圖。
圖5 測試程序轉(zhuǎn)換及編譯流程圖
4.2.1 下位機(jī)軟件體系結(jié)構(gòu)
下位機(jī)軟件系統(tǒng)是運(yùn)行在ARM處理器上的,直接與測試系統(tǒng)硬件進(jìn)行接觸,控制各個功能板和測試板當(dāng)前所要進(jìn)行的工作,是測試系統(tǒng)硬件的靈魂。下位機(jī)軟件結(jié)構(gòu)體系如圖6所示。
圖6 下位機(jī)軟件體系結(jié)構(gòu)圖
4.2.2 下位機(jī)軟件的功能結(jié)構(gòu)
下位機(jī)功能結(jié)構(gòu)如圖7所示,分為工程師模式、單板模式、生產(chǎn)者模式。這3個模式用來配合上位機(jī)軟件的工程師模式和生產(chǎn)者模式。
圖7 下位機(jī)軟件功能結(jié)構(gòu)
本文介紹的分立器件測試系統(tǒng)已經(jīng)投入使用。并針對晶體管、二極管等器件進(jìn)行了大量的測試。圖8所示為在軟件平臺下,針對NPN型三極管8050進(jìn)行的幾項指標(biāo)測試返回的測試結(jié)果截圖??匆钥闯鰷y試結(jié)果符合NPN型三極管的特性參數(shù)。驗證了分立器件測試系統(tǒng)軟件平臺的功能。
[1]戴春翟,李曉靜,張侃諭.分立器件測試系統(tǒng)通用測試軟件的研究與設(shè)計[J].電子測量技術(shù),2010,33(1):133-135.
[2]王勇.雷達(dá)通用測試軟件結(jié)構(gòu)設(shè)計與實現(xiàn)[J].科技信息,2007(18):1-2.
[3]李寶安,李行善.自動測試系統(tǒng)(ATS)軟件的發(fā)展及關(guān)鍵技術(shù)[J ].測控技術(shù),2003,22(1) :124.
[4]沈震.通用ATE軟件平臺的研究與實現(xiàn)[D].合肥:中國科學(xué)技術(shù)大學(xué),2005 :10-11.
[5]張在得,曹乃森,蔣曉松.ATE通用性設(shè)計與實現(xiàn)[J].計算機(jī)測量與控制,2003,11(11):830-832.
[6]GEORGE SHEPHERD.Visual C++.net 技術(shù)內(nèi)幕[M].6版.北京:清華大學(xué)出版社,2004.
[7]劉銳寧,梁水,宋坤.Visual C++開發(fā)技術(shù)大全[M].2版.北京:人民郵電出版社,2009:651-656.
[8]孫鑫,余安萍.VC++深入詳解[M].北京:電子工業(yè)出版社,2009.