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