- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
用DLL实现自动测试存储数据的纠错处理
录入:edatop.com 点击:
光纤光栅传感器具有波长编码特性,不受光源功率波动和系统损耗的影响,因而在传感领域得到了广泛的应用[1,2]。多波长计是一种能对光纤光栅反射波长进行测试的仪器,可以实现对光栅传感阵列的一次性测量,但其测量数据靠人工读取,不便于实际应用。采用LabVIEW仪器控制技术对多波长计串口进行了开发,通过在软件中执行远程命令控制仪器进行测量,并将测量结果自动存入指定的EXCEL文件中。
在进行文件存储的过程中,因为某些因素可能会导致个别传感器没有返回信号,此时直接存储必然会导致测量结果文件的数据混乱。为解决此问题,本文提出通过调用DLL对测量结果的合理性进行检验和处理。该研究可以有效避免发生大数据量下测量结果文件中的数据错位现象,使得测试系统在获得传感信号同时,还具有识别错误信号并进行自动处理的功能,提高了系统的可靠性。
2 LabVIEW与DLL接口技术
美国NI公司开发的LabVIEW是一种功能强大的图形化编程语言[3,4],用之来实现计算机对可编程仪器的控制[5],可以很大程度地提高编程效率。此外,由于LabVIEW所提供的图标功能是有限的,实际系统中仍然有某些功能是无法或难以实现的。针对此问题,LabVIEW提供了调用Windows动态链接库(DLL)函数的功能。从而可以弥补其自身的不足,实现更多、更强大的功能。
动态链接库(Dynamic Link Library, DLL)是基于Windows程序设计的一个非常重要的组成部分。当应用程序被装入内存并开始运行时,在Windows的管理下,在应用程序与相应的DLL之间建立链接关系。当要执行DLL中的函数时,根据链接产生重定位信息,Windows转去执行DLL中相应的函数代码。因而,DLL是一个位于应用程序外部的过程库,它可以从应用程序中调用,在运行时被动态链接,。DLL的编制与具体的编程语言及编译器无关,只要遵守DLL的开发规范和编程策略,并安排正确的调用接口,不管用何种编程语言编制的DLL都具有调用性。
3 测量返回结果的存储和错位问题
通过在LabVIEW中开发测试控制软件,可以控制光纤光栅测量仪器按预定程序自动执行测量工作。在计算机控制软件中发出远程测量命令“:MEAS:ARR:POW:WAV ”[6]后,仪器返回的结果如图1所示,其中的第一个值为返回波长的个数,后面为相应的光纤光栅反射波长值。在所有光栅传感器都完好且能返回传感数据的情况下,可以直接将测量结果保存分析。测量结果文件如图2所示,每行测量结果包括进行测量的日期、时间,峰值波长个数及各个返回峰值波长值。
在保存的EXCEL文件中,每次测量结果存为一行,执行一次测量,存入一行数据,每列数据对应一个光栅传感器。但在实际工程应用中,由于某些因素可能使得其中某个光栅传感器没有返回传感信号,此时若将测量返回结果直接写入EXCEL文件的一行中,就会使该光栅之后的数据错位,不能对应其应该所处的列,尤其在数据量众多的情况下,更会造成测量结果的混乱,如图3所示。为解决此问题,需对每次返回的测量结果进行分析,若出现上述情况,则在无信号光栅位置数据补零。
4 利用DLL实现对返回数据的合理性检验和自动处理
为实现对测量数据的检验和处理,在VC++6.0编程环境下开发Win32 DLL。一个完整的DLL项目需要模块定义文件,用户程序头文件和C++源程序文件。模板定义文件名后缀为def,是由一个或多个用于描述DLL属性的语句组成的文本文件。在模板定义文件中,LIBRARY声明库文件名check;EXPORTS声明中列出了DLL中输出函数的名称modifyResult,如下所示:
头文件中包含用户所要输出的所有函数,每个输出函数前都要有关键字_declspec (dllexport)。头文件是可选的,若用户把其内容放在源程序文件中,作为源程序的一部分,则可省去头文件。
源程序文件对modifyResult函数进行实现。该函数的三个参数的含义分别是:previousData数组存放每个光纤光栅传感器的上次测量结果;maxDifference数组存放每个传感器本次测量结果与其上次测量结果允许的最大差值;currentData存放本次测量结果。对于第i个数据,如果|currentData-previousData|>maxDifference,则认为其是第i+1个传感器返回的数据,第i个传感器没有返回数据,应该在该位置补0,主要算法如下:
在LabVIEW中,用户对DLL的调用,可通过LabVIEW提供的调用库函数[7](Call Library Function)来实现。对CLF节点的配置情况如图4所示,在所显示的对话框中输入库文件名、所调用函数名、调用规程以及函数的返回类型、所有输入参数及其数据类型。
在配置好CLF节点后,即可在LabVIEW程序中进行直接应用。图5所示为由测试仪器串口通信→字符串转换→调用CLF节点处理数据→文件存储的测量结果的完整处理过程。在所有光纤光栅传感器都完好的情况下,由串口通信模块读出的结果在转换为数值型数据后可以直接存储或显示。然而若返回波长数N小于初始个数N0,则说明有传感器无返回数据,此时可以通过调用库函数CLF节点调用包含有处理函数的DLL,对返回数据进行检验处理,在无返回信号光栅相应位置补零,从而保证后续数据与其正确位置的对应,然后再进入文件存储或显示模块。
5结论
本文的创新点在于通过CLF节点调用DLL,对通过LabVIEW获取的多波长计测量结果进行分析处理,避免发生大数据量下测量结果文件中的数据错位现象。由于DLL只有在程序执行时才将代码载入内存,并且多个程序使用相同的DLL时,内存中只装载一次,所以在LabVIEW开发中使用DLL,可以使代码更简洁,内存资源的使用更经济。用户只要编写一次DLL,就可以多次调用。实验证明:这种方法简单、方便、可满足测试要求。
在进行文件存储的过程中,因为某些因素可能会导致个别传感器没有返回信号,此时直接存储必然会导致测量结果文件的数据混乱。为解决此问题,本文提出通过调用DLL对测量结果的合理性进行检验和处理。该研究可以有效避免发生大数据量下测量结果文件中的数据错位现象,使得测试系统在获得传感信号同时,还具有识别错误信号并进行自动处理的功能,提高了系统的可靠性。
2 LabVIEW与DLL接口技术
美国NI公司开发的LabVIEW是一种功能强大的图形化编程语言[3,4],用之来实现计算机对可编程仪器的控制[5],可以很大程度地提高编程效率。此外,由于LabVIEW所提供的图标功能是有限的,实际系统中仍然有某些功能是无法或难以实现的。针对此问题,LabVIEW提供了调用Windows动态链接库(DLL)函数的功能。从而可以弥补其自身的不足,实现更多、更强大的功能。
动态链接库(Dynamic Link Library, DLL)是基于Windows程序设计的一个非常重要的组成部分。当应用程序被装入内存并开始运行时,在Windows的管理下,在应用程序与相应的DLL之间建立链接关系。当要执行DLL中的函数时,根据链接产生重定位信息,Windows转去执行DLL中相应的函数代码。因而,DLL是一个位于应用程序外部的过程库,它可以从应用程序中调用,在运行时被动态链接,。DLL的编制与具体的编程语言及编译器无关,只要遵守DLL的开发规范和编程策略,并安排正确的调用接口,不管用何种编程语言编制的DLL都具有调用性。
3 测量返回结果的存储和错位问题
通过在LabVIEW中开发测试控制软件,可以控制光纤光栅测量仪器按预定程序自动执行测量工作。在计算机控制软件中发出远程测量命令“:MEAS:ARR:POW:WAV ”[6]后,仪器返回的结果如图1所示,其中的第一个值为返回波长的个数,后面为相应的光纤光栅反射波长值。在所有光栅传感器都完好且能返回传感数据的情况下,可以直接将测量结果保存分析。测量结果文件如图2所示,每行测量结果包括进行测量的日期、时间,峰值波长个数及各个返回峰值波长值。
在保存的EXCEL文件中,每次测量结果存为一行,执行一次测量,存入一行数据,每列数据对应一个光栅传感器。但在实际工程应用中,由于某些因素可能使得其中某个光栅传感器没有返回传感信号,此时若将测量返回结果直接写入EXCEL文件的一行中,就会使该光栅之后的数据错位,不能对应其应该所处的列,尤其在数据量众多的情况下,更会造成测量结果的混乱,如图3所示。为解决此问题,需对每次返回的测量结果进行分析,若出现上述情况,则在无信号光栅位置数据补零。
4 利用DLL实现对返回数据的合理性检验和自动处理
为实现对测量数据的检验和处理,在VC++6.0编程环境下开发Win32 DLL。一个完整的DLL项目需要模块定义文件,用户程序头文件和C++源程序文件。模板定义文件名后缀为def,是由一个或多个用于描述DLL属性的语句组成的文本文件。在模板定义文件中,LIBRARY声明库文件名check;EXPORTS声明中列出了DLL中输出函数的名称modifyResult,如下所示:
头文件中包含用户所要输出的所有函数,每个输出函数前都要有关键字_declspec (dllexport)。头文件是可选的,若用户把其内容放在源程序文件中,作为源程序的一部分,则可省去头文件。
源程序文件对modifyResult函数进行实现。该函数的三个参数的含义分别是:previousData数组存放每个光纤光栅传感器的上次测量结果;maxDifference数组存放每个传感器本次测量结果与其上次测量结果允许的最大差值;currentData存放本次测量结果。对于第i个数据,如果|currentData-previousData|>maxDifference,则认为其是第i+1个传感器返回的数据,第i个传感器没有返回数据,应该在该位置补0,主要算法如下:
在LabVIEW中,用户对DLL的调用,可通过LabVIEW提供的调用库函数[7](Call Library Function)来实现。对CLF节点的配置情况如图4所示,在所显示的对话框中输入库文件名、所调用函数名、调用规程以及函数的返回类型、所有输入参数及其数据类型。
在配置好CLF节点后,即可在LabVIEW程序中进行直接应用。图5所示为由测试仪器串口通信→字符串转换→调用CLF节点处理数据→文件存储的测量结果的完整处理过程。在所有光纤光栅传感器都完好的情况下,由串口通信模块读出的结果在转换为数值型数据后可以直接存储或显示。然而若返回波长数N小于初始个数N0,则说明有传感器无返回数据,此时可以通过调用库函数CLF节点调用包含有处理函数的DLL,对返回数据进行检验处理,在无返回信号光栅相应位置补零,从而保证后续数据与其正确位置的对应,然后再进入文件存储或显示模块。
5结论
本文的创新点在于通过CLF节点调用DLL,对通过LabVIEW获取的多波长计测量结果进行分析处理,避免发生大数据量下测量结果文件中的数据错位现象。由于DLL只有在程序执行时才将代码载入内存,并且多个程序使用相同的DLL时,内存中只装载一次,所以在LabVIEW开发中使用DLL,可以使代码更简洁,内存资源的使用更经济。用户只要编写一次DLL,就可以多次调用。实验证明:这种方法简单、方便、可满足测试要求。
上一篇:补偿及测量高功率
LED驱动器的控制回路
下一篇:无线网络
WiMax射频测试应用