关键字:数据采集;Labview;Matlab;图象处理
Abstract: The appearance of the point-like meter is snapped and analyzed by camera and Matlab image manipulation module. The point value is calculated and transferred in Labview software through dll technology. The program achieves the auto- surveillance function of the point-like meter and greatly increases the steadiness and robustness of the whole system
Key Words: Data Acquisition; Labview; Matlab; image manipulation
一、 引言
随着技术的提高,仪器越来越先进,一般的数据采集仪器或采集卡都自带了与电脑的接口,如网络分析仪和频谱仪等的GPIB接口,一般采集卡的RS232口,以及USB接口等等。但以前的一些比较旧的设备,特别是指针式仪表等等,没有接口,因而无法与电脑通讯,只能人为的读取表值,这严重的影响了整个系统的效率。
摄象头监控技术的应用十分广泛,也可以应用到实验监控系统中,得到图象处理方法也有很多,一般采用图象处理功能比较强大的Matlab软件,可以有效的去除干扰数据,然后对指针数据进行判断,得到当前指针的读数。而虚拟仪器的显示则采用Labview软件,采用与指针仪表相对应的表或显示仪器,显示出当前指针值。
二、 程序设计与流程
首先,利用摄象头自带驱动程序中的动态链接库文件,如AVICAP32.dll,加上WIN的API,或者正确安装了摄像头驱动后,在Labview中调用其控件,这样就可以正确的使用摄像头,如要存储图片可以先SendMessage发送命令给控件,再用Clipboard的getdata将图片读出。
其次,得到当前图象后,利用Matlab中图象处理函数对图象进行预处理,因为仪表结构或环境不同,所以处理的方法或函数的参数也不尽相同,一般是通过实验测试,得到误差较小的黑白图象。Matlab中常用的图象处理函数有imread,imwrite,im2bw,RGB2GRAY等,其中imread函数是将图象读入到一个三维数组中,前两个数据表示坐标,最后一组数据表示当前点的颜色,im2bw是将图象数据转换为黑白的,变成了二维数组,输入参数有Level,表示对图象的敏感度,当Level取不同值后得到不同的黑白图 。
数据的处理最关键的就是要判断指针的位置,下面函数就是寻找指针线,如果图片数据转换时少了数据点的,经过判断自动加上。
for m=1:FindLineNumber-1
Linesize=size(find(FindLine(m,:,1)>0));
if Linesize(2)>=Ly-j %前面已经没数据
tempi=FindLine(m,Ly-j,1);
tempj=FindLine(m,Ly-j,2);
if tempi>1 & tempi
if BW(tempi,j)==0%有数据
FindLine(m,Ly-j+1,1)=tempi;
FindLine(m,Ly-j+1,2)=j;
InLine=1;
end
%同理判断周围其他各点
if InLine==0 %说明没找到,看下一点
NextL=find(BW(tempi-2:tempi+2,j-1)==0);
if isempty(NextL)==0 %补上缺点
FindLine(m,Ly-j+1,1)=tempi-2+NextL(1);
FindLine(m,Ly-j+1,2)=j;
end
end
end
end
图一、原始图形与Level取0.71,0.72,0.73,0.74,0.75,0.76,0.77,
0.78,0.79转换后图形
对于每个指针仪表,如果刻度不均匀,或者获取图片有一定的角度,在处理数据前必须对数据进行标定,这样读取到的指针数据才能正确的换算成数值。
对仪表图象的处理一般分为三步,一为预处理,并将图象放入到图象数据数组中;二为标定刻度值,求解相似度来获得仪表数字刻度值,并与坐标点联系,存入标定数组中;三、分析获取指针位置,得到当前指针的坐标值。四、由指针坐标值与前面标定的刻度值得到当前测量值。其中可能由于灯光光线或其他原因,表的指针位置并没有在标定坐标范围内,此时需要将指针延长,得到与各个标定刻度的交点来判断测量值,或者将指针坐标点用多项式拟合,得到一个一元多次方程,最简单的情况就是直线方程,然后与每个刻度坐标区间的方程联合求解,当在刻度坐标范围内有交点时,说明测量值在此范围内,然后通过线性插值或多项式拟合得到仪表的测量值。
再次,得到测量值后,可以通过Labview面板中的虚拟仪器表头,将数据显示出来,保持与其他测量仪器的同步,并通过测量值判断整个系统的运行状态。
三、 系统测试与结果
实验仪表选用了真空装置中的气压表,因为在这些系统中,仪表占了很大的一部分,将摄象头夹在仪表旁边,通过USB口连到电脑上,进行采集图形,图二为实际仪表图形,利用Matlab生成的动态链接库文件进行图象处理,如图1所示。寻找当前指针位置,并由坐标判断出测量值,输入到Labview控制面板的虚拟仪表中,如图三所示。实际人为读取值为6.5,计算结果值为6.5429。
图二、原始仪表图形
图三、测量系统中虚拟仪器与计算值
最后,保存仪表或其他仪器的测量数据。在Labview中很方便的将数据存入文本文档或各个数据库中,还可以通过TCP等协议或DataSocket等控件将实验实时采集的数据发布到网站、服务器或客户端上。
四、结论
本文的创新点是,利用了廉价的摄象头及其驱动,通过Matlab进行图象处理,分析得到测量数据,并在虚拟仪器编程软件Labview中重新显示出来,最后可以通过Labview的Datasocket或TCP/IP协议将数据发布,或储存到数据库中。
采用了Labview和Matlab的混合编程技术,即能在Labview上实现与其他仪器的联合采集和控制,还利用Matlab强大的图象处理功能,保证了程序的有效性。
不仅实现了对旧式仪表仪器的监控,而且可以与其他仪器协同采集数据,自动记录测量过程中仪表数据值,并实时判断系统的状态,必要时发出警报,这样保证了整个测试系统的稳定性和可靠性。
参考文献
毕虎,律方成,李燕青,李和明.Labview中访问数据库的几种不同方法.微计算机信息,2006,1-1:131-134。
吴苗,许江宁,缪绣华,纪兵.基于Labview的设备驱动程序开发技术研究.微计算机信息,2006,2-1:153-155。
毛建东.基于Labview的单片机数据采集系统的设计.微计算机信息,2006,3-2:41-42。
周伟林,李清峰,杨华勇.基于Labview的AC1077数据采集卡的驱动.微计算机信息,2006,1-1:121-123。