◆王春艷
基于API函數和VB.NET的自動數據采集系統
◆王春艷
(東莞搜路研電子有限公司天津分公司天津300450)
在生產試驗中,一些測試設備配備的通用測試程序有時并不能滿足對某些特定測試數據按照特定格式進行自動存儲的要求,為了解決此問題,在VB.NET的環境下利用API函數開發了本套數據自動采集系統,實現了對現有測試程序界面數據的自動采集、存儲、打印等功能,在實際應用中體現了數據自動采集的高效性和準確性,且為后期的數據追溯提供了方便。
API函數;VB.NET;數據自動采集系統
隨著電子及計算機技術的飛速發展,對測試自動化的要求也越來越高。如何在現有儀器設備及測試程序的基礎上,實現對測試數據的高效率精確采集和處理是我們面臨的難題。因此,根據實際需要,我們在vb.net環境下,利用API函數開發了“數據自動采集系統”,實現了對測試數據的自動讀取,處理,保存和打印等功能,明顯提高了工作效率,減輕了測試人員的工作量。
在本系統中,現有硬件和測試程序為我們提供了測試數據,而數據自動采集軟件作為系統的主要部分實現了數據自動采集、處理及打印等一系列功能。
其中,現有設備包括PC機,信號源,頻譜儀。PC機通過GPIB接口卡、GPIB電纜與信號發生器,頻譜儀的GPIB接口相連,其中,PC機為主控機,信號發生器用來給測試樣品提供特定的信號,頻譜儀用來測試樣品的性能。
現有程序為供應商提供的通用測試程序,為我們顯示測試數據。
數據自動采集軟件是本系統中的重要部分,它對整個系統的性能起著決定性作用。本軟件是在VB.Net環境下開發的,通過API函數來實現對現有測試軟件的監控,測試數據的讀取和處理等功能,并將數據按照特定格式自動保存在Excel中,以方便數據的后續管理和追蹤。
1.2.1 VB.NET
VB.NET 是微軟公司推出的開發平臺。對于軟件開發人員來講,.NET 的技術相對簡單,入門較快。由于其具有易學易用、開發迅速的特性,已受到越來越多企業的青睞[1]。雖然微軟不提倡在.Net平臺調用Windows API 函數,但是在開發語言使用自帶函數或類庫不能解決問題時,調用Windows API函數往往是一種非常直接有效的解決方法。
1.2.2 Windows API函數
Windows API 函數是操作系統為程序開發人員提供的一組函數庫,通常包含在名為.DLL (Dynamic Link Library)的動態連接庫文件中[2]。
1.2.3 數據自動采集的實現
數據自動采集軟件主要包括三個部分:數據采集部分,數據處理與存儲部分,數據打印部分。其中最關鍵的為數據采集部分。
( 1 ) 數據采集部分
數據采集部分包括獲取現有測試程序界面控件句柄,讀取特定測試數據和向測試程序發送控制命令三部分。PC機實現測試數據采集的具體步驟是:
1)獲取測試程序主窗口句柄,判斷測試程序是否打開;
2)獲取要讀取數據所在控件句柄;
3)判斷測試狀態;
4)讀取數據并保存。
要獲取控件的句柄讀取需要的數據,就要用到如下的API函數:
Hwnd=FindWindow(lpClassName,lpWindowName)功能:獲得一個窗口的句柄;
返回值:若成功返回窗體句柄,若失敗返回Null。
其中lpClassName,lpWindowName的具體值可借助Spy++工具獲得。Spy++ (SPYXX.EXE) 是一個基于Win32 的實用工具,通過它可以搜索指定的窗口、線程、進程或消息,還可以查看選定的窗口、線程、進程或消息的屬性信息。
Hwnd=FindWindowEx(hwndParent,hwndChildAfter,lpszClass,lpszWindow)
功能:查找子窗口,從排在給定的子窗口后面的下一個窗口開始。
參數說明:hwndParent:要查找控件所在的主窗體句柄,為NULL時,則函數以桌面窗口為主窗體,查找桌面窗口的所有子窗口。
hwndChildAfter:主窗體上控件的句柄。如果hwndParent和hwndChildAfter同時為NULL,則函數查找所有的頂層窗口及消息窗口。
lpszClass:指向一個指定了類名的空結束字符串,或一個標識類名字符串的成員的指針。
lpszWindow:指向一個指定了窗口名(窗口標題)的空結束字符串,此處為現有測試程序窗體的標題。如果該參數為NULL,則為所有窗口全匹配。
返回值:如果函數成功,返回值為現有測試程序窗體上子控件的句柄。如果函數失敗,返回值為NULL。
GetClassName(hwnd,lpClassName,nMaxCount)功能:獲得指定窗口所屬的類的類名。
參數說明:Hwnd:窗口的句柄;
lpClassName:指向接收窗口類名字符串的緩沖區的指針;
nMaxCount:參數lpClassName指示的緩沖區的字節數。
返回值:若成功,返回值為接收到指定緩沖區的字符的個數;若失敗,返回0。
sendMessage(hwnd,wMsg,wParam,lParam) 功能:向對話框中的控件發送消息。
參數說明:
hwnd:接收消息的窗口句柄;
wMsg:指定被發送的消息;在此為”WM_GETTEXT”消息,它的作用是復制對應窗口的文本到緩沖區;
wParam:指定附加的消息特定信息;在此為設置獲取緩沖區文本長度;
lParam:指定附加的消息特定信息;在此為將緩沖區中特定長度的文本賦給此變量。
數據采集的整個流程見圖1。

圖1 數據采集流程圖
(2)數據處理與保存部分
數據處理與保存部分是本系統中必不可少的組成部分,用于處理從測試程序界面采集到的特定數據。在此采集系統中,我們用Excel來存儲數據并按照測試報告的要求格式設置excel的存儲樣式。
( 3 ) 數據打印部分
為了防止操作人員對測試數據進行誤操作,打印時并不直接對excel文件進行操作,而是利用VB.NET中的控件printDialog,PrintDocument,PrintPreviewDialog,在數據采集系統界面直接點擊打印按鈕,即可完成測試報告的打印,快速,準確,便捷。
用VB.NET語言結合API函數編寫的數據自動采集軟件彌補了通用測試程序無法對某些測試數據自動采集和保存的缺點,在現有設備和測試程序基礎上實現了數據自動采集,處理,存儲等功能,滿足了生產的要求,為日后產品的數據追蹤做了充分的準備。
[1]齊興斌,趙麗.VB與VB.NET編程的比較[J].電力學報,2009.10.
[2]陳蘇.VB中API函數應用剖析[J].科技信息,2008.5.