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