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