羅猛,詹惠琴,古軍
(電子科技大學自動化工程學院,四川成都 611731)
在早期的測試系統中,軟件平臺一般只提供文本編程方式給用戶使用,其測試程序是以測試流程為依據從上至下一步一步排下來的,所有與測試相關的參數、程控指令、測試結果等都內置于一個文本測試軟件中, 這種編程具有面向過程的編程規范,包含特定的語法規則,靈活性很強[1]。但是這種方式有其不足的一面,其一是一般測試程序編程過程較為復雜,這就要求測試人員必須具有較深的編程功底;其二是這種方式可維護性差,不適于進行快速高效的現代自動化測試。而本文提出的基于圖形化編程語言的軟件平臺為測試工程師提供一個靈活簡便的可編程環境。實現了測試參數和測試程序的分離,開發人員更加專注于測試方法本身,而不用花太多時間在構建測試系統所需的測試流程和控制策略上[2]。
ATS是整個測試系統的核心和關鍵,它是聯系測試資源和被測對象的軟橋梁,其體系結構的好壞直接關系到整個自動測試系統的性能[3]。硬件資源自檢與校準、軟件賬號管理、流程圖測試程序自動轉換、測試指標報表生成及打印等功能都與軟件系統的設計息息相關。本著層次化,組件化,標準化的要求,同時為了滿足測試程序的可移植性及儀器的互換性以及測試系統軟件結構的開放性、可擴充與裁減性等要求[4],我們將分立器件測試系統軟件總共分為3個層次,包括ARM程序層,USB驅動層和上位機軟件層,圖1所示為系統軟件平臺總體架構框圖。每個層的具體功能如下:
ARM程序層:主要包括各個功能板和測試板的驅動程序,以及實現ARM內核對各個功能板進行控制的執行程序。
USB驅動層:主要是USB的接口驅動函數,完成下層ARM與上位機軟件層的通信,進行數據的編排和解析,是整個測試系統軟件的紐帶。
上位機軟件層:是整個軟件系統的最上層,也是最直接與用戶接觸的層次。用戶需要設置和保存的所有個人信息、群組信息、測試工程及測試項目信息都要通過該層來完成,同時在硬件通信良好的情況下接收并在顯示屏上顯示測試儀的測試結果數據供用戶查看分析。

圖1 系統軟件平臺總體架構框圖
C#是由Microsoft為.NET Framework量身訂做的程序設計語言。C#語言是由C/C++演變而來的,除了擁有C/C++的強大功能外,還具有Visual Basic簡易使用的特性,也是一種面向對象設計語言。它繼承了C++中類得繼承、封裝、多態、重載等特性,另外它現代、簡單、完全面向對象和類型安全等新特性,從而使我們開發出來的測試系統軟件具有良好的用戶體驗,優良的兼容性,較高的靈活性和可擴展性。基于系統開發的要求和C#語言的特點,我們最終選擇了Visual Studio 2008作為上位機軟件的開發工具。
上位機軟件層次結構如圖2所示。其中驅動層包括USB驅動以及hp萬用表驅動,其中USB通信API和hp萬用表通信API是通過動態鏈接庫(dll)形式封裝,向中間層提供通信接口。中間層包括.net平臺、微軟控件以及第三方控件,這一層起到承上啟下的作用。應用層即儀器界面,是整個程序框架的頂層。

圖2 上位機軟件層次結構圖
本測試系統中USB中間層主要負責上位機與下層ARM的數據信息交換,是上位計算機與分立器件測試系統連接的紐帶。USB驅動程序主要完成兩個方面的工作:一是通過USB驅動向下層ARM發送上位機的設置數據和控制信息;二是接收下層ARM發回的測試結果數據。驅動程序采用VC++6.0進行開發,以動態鏈接庫的形式進行調用。
當在界面上點擊“下載”按鈕后,上位機程序會將包含有數據類型、數據字節長度和數據信息或者控制命令信息的字符串按照規定的數據格式通過USB處理向下發送。圖3所示為USB數據的下載流程。

圖3 USB數據下載流程圖
當下位機完成一個器件的完整測試后會及時將測試結果數據通過USB中間層傳輸到上位機軟件中,但是上位機軟件并不能直接接收下位機送回的測試結果數據,而需要經過USB中間層的處理。所以當USB接收到下層ARM發回的測試結果數據后,USB驅動層要對測試的結果數據進行處理,調整結果數據的格式,并將包含有數據類型信息和數據長度信息的測試結果數據以字符串的形式按照某一協議格式送回到上位機軟件中,供上位機軟件調用。圖4所示為USB數據上傳的流程。

圖4 USB上傳數據流程圖
在分立器件測試系統中需要用到的USB動態鏈接庫函數的調用方法如下:
(a)[DllImport("2440usbDLL.dll", EntryPoint ="UsbTransmit", CallingConvention = CallingConvention.StdCall)]
public static extern void UsbTransmit(IntPtr hwnd); 該函數調用主要實現的功能是下載
ARM程序編譯生成的BIN文件。BIN文件是將系統的ARM程序編譯生成的二進制文件,只有將BIN首先下載到ARM中整個系統才能開始工作,否則后續其他一切工作都不能完成。
(b) [DllImport("2440usbDLL.dll", EntryPoint ="strpc2arm3", CharSet = CharSet.Ansi, CallingConvention=Callin gConvention.StdCall)]
public static extern int strpc2arm3(string dataString);
該函數主要實現的功能是上位機工程設置參數的下載。參數dataString表示要下載的工程設置參數。
(c)[DllImport("2440usbDLL.dll", EntryPoint = "arm2pc_Data", CharSet = CharSet.Ansi, CallingConvention=CallingConve ntion.StdCall)]
public static extern string arm2pc_Data();
該函數主要實現的功能是接收由ARM傳回的測試結果數據。
另外,本系統中USB動態鏈接庫的編寫借助了部分MFC類庫中的函數,所以在應用本動態庫時,需要同時添加四個MFC的動態庫文件:MFCD42D.DLL、MFC42D.DLL、MFCO42D.DLL和MSVCRTD.DLL。
基于GCC的諸多優點在設計初期,我們曾經考慮過使用GCC來編譯下位機arm程序,但使用GCC需要編寫makefile文件搭建編譯平臺,這不是一件容易的事情。但后來發現ADS1.2 IDE提供了此問題的解決方案,ADS1.2 IDE提供了一個菜單項可以把ADS1.2工程轉化為一個和工程對等的.xml文件,然后調用ADS1.2提供的mcp2make工具將.xml文件轉化為makefile文件。這使得設計下位機軟件時可以用IDE界面搭建編譯環境,設置編譯信息,規避了編寫makefile文件的諸多細節問題。得到了makefile文件后,我們就可以使用VC++6.0提供的nmake工具調用makefile文件編譯整
個下位機工程。在makefile文件里分別調用ADS1.2提供armcc編譯器以及armlink連接器最終把整個下位機工程編譯成一個.axf文件;最后使用“fromelf -bin –output xxx.bin xxx.axf”命令將.axf文件轉化為.bin文件下載到下位機,圖5為測試程序自動轉換及編譯流程圖。

圖5 測試程序轉換及編譯流程圖
4.2.1 下位機軟件體系結構
下位機軟件系統是運行在ARM處理器上的,直接與測試系統硬件進行接觸,控制各個功能板和測試板當前所要進行的工作,是測試系統硬件的靈魂。下位機軟件結構體系如圖6所示。

圖6 下位機軟件體系結構圖
4.2.2 下位機軟件的功能結構
下位機功能結構如圖7所示,分為工程師模式、單板模式、生產者模式。這3個模式用來配合上位機軟件的工程師模式和生產者模式。

圖7 下位機軟件功能結構
本文介紹的分立器件測試系統已經投入使用。并針對晶體管、二極管等器件進行了大量的測試。圖8所示為在軟件平臺下,針對NPN型三極管8050進行的幾項指標測試返回的測試結果截圖。看以看出測試結果符合NPN型三極管的特性參數。驗證了分立器件測試系統軟件平臺的功能。
[1]戴春翟,李曉靜,張侃諭.分立器件測試系統通用測試軟件的研究與設計[J].電子測量技術,2010,33(1):133-135.
[2]王勇.雷達通用測試軟件結構設計與實現[J].科技信息,2007(18):1-2.
[3]李寶安,李行善.自動測試系統(ATS)軟件的發展及關鍵技術[J ].測控技術,2003,22(1) :124.
[4]沈震.通用ATE軟件平臺的研究與實現[D].合肥:中國科學技術大學,2005 :10-11.
[5]張在得,曹乃森,蔣曉松.ATE通用性設計與實現[J].計算機測量與控制,2003,11(11):830-832.
[6]GEORGE SHEPHERD.Visual C++.net 技術內幕[M].6版.北京:清華大學出版社,2004.
[7]劉銳寧,梁水,宋坤.Visual C++開發技術大全[M].2版.北京:人民郵電出版社,2009:651-656.
[8]孫鑫,余安萍.VC++深入詳解[M].北京:電子工業出版社,2009.