楊威,杜愛華,司毅,劉玉石
(1.中國船舶重工集團公司第七二三研究所,揚州 225001;2.中國船舶工業(yè)電工電子設(shè)備環(huán)境與可靠性試驗檢測中心,揚州 225001))
可靠性試驗是分析、驗證與評價產(chǎn)品可靠性的一種手段。通過可靠性試驗,并對試驗結(jié)果進行統(tǒng)計處理,可以獲得受試產(chǎn)品在各種環(huán)境條件下工作時真實的可靠性指標(biāo),如失效概率、可靠度、平均壽命等,為使用、生產(chǎn)、設(shè)計提供可靠性數(shù)據(jù)。同時,對試驗產(chǎn)品的失效分析,揭示產(chǎn)品的薄弱環(huán)節(jié)及其原因,制訂相應(yīng)的措施,達到提高產(chǎn)品可靠性的目的。
通常情況下,可靠性試驗剖面會設(shè)置典型環(huán)境條件下的測試點,隨著目前可靠性試驗時間的增加,性能測試愈發(fā)受到各方重視。測試時間長、測試手段單一都會影響可靠性試驗的進度與試驗質(zhì)量。某些測試環(huán)節(jié)需要打開試驗箱門,嚴(yán)重影響可靠性試驗的條件保證,因此電子設(shè)備可靠性試驗性能測試遠(yuǎn)程控制十分重要,即在不開箱門的狀態(tài)下,通過試驗箱出線口在箱外完成全部性能的測試工作。
Keysight U1816X是由兩個單刀六擲開關(guān)組成的開關(guān)矩陣。它能夠在不改變物理連接的情況下,在多路信號間進行切換[1]。這使用戶能夠使用相同的設(shè)置執(zhí)行多次測試,無需頻繁連接與斷開線纜,因此經(jīng)常使用在多通道測試系統(tǒng)中。U1816X能夠?qū)崿F(xiàn)整個測試流程的自動化,提高多路信號測試時的吞吐量,縮短多個相同模塊測試時,切換模塊所需時間。KeySight官方提供的Coaxial Switches Software可用于遠(yuǎn)程控制同軸開關(guān)切換通道,如圖1所示。但在其它測試系統(tǒng)中使用時需要頻繁調(diào)用該軟件,操作過程復(fù)雜且部分語言或開發(fā)環(huán)境下調(diào)用存在一定困難。針對以上問題,本文提出了在C++語言、C#語言及G語言(LabVIEW)下同軸開關(guān)的遠(yuǎn)程控制方法。
C++語言是C語言的改進與擴充,是一種面向?qū)ο蟮恼Z言。C++語言能夠適用于多種操作系統(tǒng)下軟件的開發(fā),開發(fā)工作重用性、繼承性高,結(jié)合MFC類庫與VS開發(fā)環(huán)境能夠有效實現(xiàn)遠(yuǎn)程控制、測試過程自動化等功能,搭建多種測試系統(tǒng)。
U1816X同軸開關(guān)通過后面板的USB B-4Pin型接口進行遠(yuǎn)程控制。C++語言在Windows系統(tǒng)下需要調(diào)用Windows API與同軸開關(guān)進行通信[2]。步驟如下:
①調(diào)用HidD_GetHidGuid函數(shù)獲取當(dāng)前所有可用設(shè)備的GUID,并保存至指向GUID類的指針中。這些設(shè)備的GUID中包含需要控制的U1816X同軸開關(guān)。
②獲取設(shè)備描述信息,調(diào)用SetupDiGet-ClassDevs函數(shù),對步驟①列舉出的所有GUID執(zhí)行。該函數(shù)的Flags參數(shù)應(yīng)設(shè)置為DIGCF_PRESENT|DIGCF_INTERFACEDEVICE, 函數(shù)的返回值即為設(shè)備描述信息。當(dāng)返回值為INVALID_HANDLE_VALUE時,獲取失敗,檢查U1816X連接是否正常。
③調(diào)用SetupDiEnumDeviceInterfaces函數(shù),枚舉出步驟②中設(shè)備信息集合包含的全部接口,并保存至指向DEVICE_INTERFACE_DATA的指針。
④獲取上一步中接口的詳細(xì)信息,調(diào)用SetupDiGetDeviceInterfaceDetail函數(shù)。第一次調(diào)用時返回值為錯誤值,調(diào)用GetLastError函數(shù)能夠看到錯誤代碼。這是正?,F(xiàn)象,但這次調(diào)用能夠獲取設(shè)備緩存大小,用于向設(shè)備的緩沖區(qū)發(fā)送控制命令。
⑤再次調(diào)用SetupDiGetDeviceInterfaceDetail函數(shù),獲取接口全部信息。獲取到的信息保存在函數(shù)調(diào)用時的第三個參數(shù)中。
⑥調(diào)用CreateFile函數(shù),用上一步獲取的接口信息中包含的設(shè)備路徑創(chuàng)建通信連接,并得到同軸開關(guān)對應(yīng)的控制句柄。
⑦調(diào)用WriteFile函數(shù)向同軸開關(guān)發(fā)送控制指令,控制U1816X切換通道。
⑧斷開同軸開關(guān)連接時調(diào)用CloseHandle函數(shù),將參數(shù)設(shè)置為同軸開關(guān)的控制句柄。調(diào)用后需要判斷返回值是否正常,確保同軸開關(guān)正常斷開連接。在步驟⑥中獲取到的設(shè)備控制句柄可以用同軸開關(guān)的VID和PID值判斷是否正確。調(diào)用HidD_GetAttributes函數(shù),將參數(shù)設(shè)置為同軸開關(guān)控制句柄,即可獲取同軸開關(guān)的 VID和PID值。同軸開關(guān)的VID和PID正確值可以在設(shè)備管理器中查看。在設(shè)備管理器中找到同軸開關(guān),右鍵“屬性”,在“詳細(xì)信息”選項卡的“屬性”一欄中選中“硬件Id”即可查看同軸開關(guān)的VID與PID。獲取方法如圖2所示。
C#語言是由C語言和C++語言衍生出的面向?qū)ο蟮木幊陶Z言,它在C和C++原有功能的基礎(chǔ)上進一步擴展,并去除了部分復(fù)雜的處理過程,使編程效率進一步提高。C#語言結(jié)合.Net Framework運行庫能夠以簡單的代碼實現(xiàn)復(fù)雜的過程,因此迅速普及,成為當(dāng)代主要編程語言之一。
圖1 U1816X官方控制軟件
C#在控制U1816X同軸開關(guān)時需要調(diào)用Windows API創(chuàng)建設(shè)備的控制句柄,但可以調(diào)用.Net的自帶函數(shù)獲取創(chuàng)建句柄需要的參數(shù)[3];獲取控制句柄后,向同軸開關(guān)發(fā)送控制命令的方法也和C++不同。步驟如下:
①創(chuàng)建ManagementObjectCollection類的對象并調(diào)用構(gòu)造函數(shù)獲取即插即用設(shè)備集合,同軸開關(guān)使用USB控制,屬于即插即用設(shè)備,因此集合的元素中包含同軸開關(guān)。
②在集合中遍歷每個元素,通過元素的“Dependent”屬性查詢VID與PID值,與同軸開關(guān)的VID、PID比較,找到同軸開關(guān)對應(yīng)元素后,記錄下元素在集合中的位置。
③創(chuàng)建PnpEntityInfo類的對象,將④中查找到的元素屬性值賦予該對象。該對象記錄設(shè)備的Name、GUID、VID、PID等屬性。
④查詢PnpEntityInfo對象的Name屬性,獲取同軸開關(guān)的設(shè)備路徑與GUID,并將VID、PID值插入,生成DeviceName。需要注意的是,DeviceName中的VID等屬性需要按照順序排列,否則DeviceName無效。
⑤調(diào)用Windows API的CreateFile函數(shù),通過上一步生成的DeviceName創(chuàng)建同軸開關(guān)的通信連接,并得到對應(yīng)的控制句柄。
⑥將同軸開關(guān)的控制句柄作為參數(shù)創(chuàng)建文件流,調(diào)用文件流的WriteFile函數(shù)即可向同軸開關(guān)發(fā)送控制指令,發(fā)送指令時需要采用中斷方式。
圖2 獲取U1816X的VID、PID
⑦斷開同軸開關(guān)連接時調(diào)用Windows API的CloseHandle函數(shù),將參數(shù)設(shè)置為同軸開關(guān)的控制句柄,并判斷返回值確保同軸開關(guān)正確斷開連接。因為C#的代碼大部分屬于托管代碼,而Windows API的函數(shù)為非托管代碼,因此函數(shù)調(diào)用前需要預(yù)先聲明。聲明Windows API函數(shù)方法如圖3所示。
LabVIEW是由美國國家儀器公司開發(fā)的編程軟件,采用圖形化的編程方式,使開發(fā)過程更加直觀、簡單。LabVIEW自帶多種標(biāo)準(zhǔn)庫函數(shù),如TCP/IP、ActiveX等,并支持GPIB、VXI、RS232等多種通信協(xié)議,可以方便地創(chuàng)建虛擬儀器,大大提高算法實現(xiàn)、儀器系統(tǒng)設(shè)計的效率。
圖3 C#調(diào)用Windows API函數(shù)
LabVIEW不能直接控制U1816X同軸開關(guān),需要先用NI-VISA創(chuàng)建同軸開關(guān)的驅(qū)動[4]。在驅(qū)動向?qū)У挠布偩€類型中選擇“USB”后點擊“Next”;在USB設(shè)備選擇的“Device Id”中選擇與同軸開關(guān)VID、PID對應(yīng)的項,在其它顯示區(qū)中確認(rèn)同軸開關(guān)設(shè)備信息是否正確。確認(rèn)無誤后點擊“下一步”;在“創(chuàng)建驅(qū)動文件”中輸入驅(qū)動名和驅(qū)動文件保存路徑,點擊“下一步”后進入“安裝選項設(shè)置”,選擇第一項后點擊Finish即可創(chuàng)建驅(qū)動文件,驅(qū)動向?qū)Ⅱ?qū)動自動安裝到系統(tǒng)中。同軸開關(guān)驅(qū)動安裝后如圖4所示。
LabVIEW需要調(diào)用VISA與同軸開關(guān)建立通信連接。VISA輸入控件類型應(yīng)設(shè)置為USB Raw,VISA輸入控件會自動查找電腦中已安裝的設(shè)備,并形成列表,在前面板中根據(jù)同軸開關(guān)的VID和PID選擇對應(yīng)項即可;向同軸開關(guān)寫入控制命令可通過調(diào)用“VISA寫入”實現(xiàn)。需要選擇中斷方式控制同軸開關(guān)[5];程序框圖如圖5所示。
本文提出了性能測試遠(yuǎn)程控制的方法。通過在C++、C#及LabVIEW下不同控制方法的實現(xiàn),解決了同軸開關(guān)在多開發(fā)環(huán)境下的使用與集成問題,為實現(xiàn)電子設(shè)備可靠性試驗性能測試遠(yuǎn)程控制提供參考。
圖4 通過NI-VISA安裝的U1816X驅(qū)動
圖5 U1816X通信程序框圖