基于API函数和VB.NET的自动数据采集系统
2019-06-05王春艳
◆王春艳
基于API函数和VB.NET的自动数据采集系统
◆王春艳
(东莞搜路研电子有限公司天津分公司天津300450)
在生产试验中,一些测试设备配备的通用测试程序有时并不能满足对某些特定测试数据按照特定格式进行自动存储的要求,为了解决此问题,在VB.NET的环境下利用API函数开发了本套数据自动采集系统,实现了对现有测试程序界面数据的自动采集、存储、打印等功能,在实际应用中体现了数据自动采集的高效性和准确性,且为后期的数据追溯提供了方便。
API函数;VB.NET;数据自动采集系统
0 引言
随着电子及计算机技术的飞速发展,对测试自动化的要求也越来越高。如何在现有仪器设备及测试程序的基础上,实现对测试数据的高效率精确采集和处理是我们面临的难题。因此,根据实际需要,我们在vb.net环境下,利用API函数开发了“数据自动采集系统”,实现了对测试数据的自动读取,处理,保存和打印等功能,明显提高了工作效率,减轻了测试人员的工作量。
1 系统组成和功能
在本系统中,现有硬件和测试程序为我们提供了测试数据,而数据自动采集软件作为系统的主要部分实现了数据自动采集、处理及打印等一系列功能。
1.1 现有设备和测试程序
其中,现有设备包括PC机,信号源,频谱仪。PC机通过GPIB接口卡、GPIB电缆与信号发生器,频谱仪的GPIB接口相连,其中,PC机为主控机,信号发生器用来给测试样品提供特定的信号,频谱仪用来测试样品的性能。
现有程序为供应商提供的通用测试程序,为我们显示测试数据。
1.2 数据自动采集软件
数据自动采集软件是本系统中的重要部分,它对整个系统的性能起着决定性作用。本软件是在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,在数据采集系统界面直接点击打印按钮,即可完成测试报告的打印,快速,准确,便捷。
2 结束语
用VB.NET语言结合API函数编写的数据自动采集软件弥补了通用测试程序无法对某些测试数据自动采集和保存的缺点,在现有设备和测试程序基础上实现了数据自动采集,处理,存储等功能,满足了生产的要求,为日后产品的数据追踪做了充分的准备。
[1]齐兴斌,赵丽.VB与VB.NET编程的比较[J].电力学报,2009.10.
[2]陈苏.VB中API函数应用剖析[J].科技信息,2008.5.