论文部分内容阅读
摘要:英国Renishaw公司旗下的激光干涉仪自带的Laser10人机交互平台,没有提供开发的驱动程序,这使得数据的处理必须局限在Laser10上的功能。本文通过LabVIEW软件平台调用写入钩子函数的动态链接库将激光干涉仪测量的位移数据进行实时的显示和数据处理,从而极大地提高工作效率。
关键词:激光干涉仪;钩子函数;动态链接库
中图分类号:TP212 文献标识码:A 文章编号:1671-864X(2014)09-0117-02
前言
随着现代加工工艺的革新,人们对测量的精度有了更高的要求。为了更加精确的确定被测对象的量值,往往会选用精度高的测量基准。目前,在精密测量领域,精度比较高的位移传感器主要有光栅传感器和激光干涉仪,它们经常被当做测量基准去测量和标定被测对象。而这些精度较高的测量仪器制造方法和工序相当的严苛和复杂,需要整个制造链都在一个高标准、高品质的背景下去生产。目前,国内有制造也已有了迅猛的发展,其中的某些环节的工艺水平已经达到世界先进水平,但是整体还没均衡,因此,高精度测量仪器的国产化还不现实。在需要精密测量时,进口国外的测量仪器还是比较普遍的。
Renishaw公司是世界计量和光谱分析仪器领域的领导者,主要提供测量、运动控制、光谱仪和精密加工等核心技术,从制造领域提高效率和产品质量、极大提高研发能力,使用户能够实现按溯源标准进行几何尺寸的测量。而Renishaw公司旗下的激光干涉仪就是常被用到的精密测量仪器。激光干涉仪不仅提供了高品质的硬件设备同时还提供了较为直观的开发软件Laser10供用户使用。但是,Renishaw激光干涉仪的位移读数只能通过Laser10显示,并且Renishaw公司没有提供开发的驱动程序,这极大地限制了用户多元化的开发。
一、基于Visual C++的钩子函数
钩子(Hook)函数是WINDOWS操作系统非常重要的特性,正如它名字一样它就像一个的钩子,捕获那些我们感兴趣的WINDOWS消息并获得控制权,进行相应的处理,比如数据运算、数据传递、强制传递等。钩子函数即是一个消息处理机制的平台,程序员在相应的代码段加入子程序以便监控某个特定的WINDOWS窗口消息,一旦所监控的窗口消息被钩子函数所探测到就将其截获,以便行进相应的处理。充分利用钩子函数的特性,不仅可以探测到其他进程发生的事件还能够截获程序员感兴趣的特定进程,再通过“钩挂”的形式,发给WINDOWS一个处理或过滤事件的回调函数,当每次发生您感兴趣的事件时,WINDOWS都将调用该函数[1]。Laser10运行的平台是WINDOWS操作系统同样遵循该操作系统的运行法则。这使得我们自然的想到,用钩子函数去截获Renishaw激光干涉仪数据的传输,只要我们能够找到激光干涉仪在传输数据时的窗口消息。通过观察Laser10开发软件发现,每当激光干涉仪有新测量数据产生时,Laser10软件会对窗口进行刷新从而进行数据的跟新显示,而这个刷新窗口的WINDOWS窗口消息则正式我们所需要的。钩子函数对该消息进行监控,一旦刷新窗口消息触发了钩子函数,钩子函数则截获该消息并将激光干涉仪更新的数据提取保存起来,等待其他的程序调用。
二、基于钩子函数LabVIEW与Laser10间的通信
激光干涉仪的数据被钩子函数截获之后,需要有其他的软件操作平台对此进行处理。通常Visual C++开发的操作平台对钩子函数的整合更好,但是Visual C++开发的软件平台在后续的数据处理和代码编程的问题上并不是很理想,目前,更趋向于图像化的编程方式。LabVIEW和C语言以及BASIC语言一样属于通用的编程系统,有着庞大的数据库,包括CPIB、数据分析、数据储存、串口控制和数据采集等。LabVIEW与其他编程语言最大的区别在于图形化的编程方式,用图形替代文本、数据流替代顺序执行,从而充分的发挥计算机的能力,创造出功能更加出色的仪器。
Laser10相对于我们自己开发的LabVIEW软件平台应归为他方进程,双方之间的通信就应为进程间的通信。进程间如若要进行数据的交换必须要有即成的服务器端和通信协议,只有这样,服务器才能够响应哪些和自己达成通信协议的客户端,否则就称为“无意识”型通信 [25]。
而上一节所讲述的钩子函数则是双方建立通信的桥梁。钩子函数不能直接被LabVIEW所使用,因为进程之间的通信需将钩子函数放到动态链接库中去并作为远程钩子来进行调用。动态链接库作为一个独立的文件它不能被直接的运行更不能接受消息,只有在其他模块调用动态链接库的函数时,它才能发挥相应的作用[2]。从图1可以知道,Laser10作为激光干涉仪的人机交互平台,实时的显示激光干涉仪的测量数据信息。每当有数据更新时伴随一个“窗口刷新”消息进入队列等待处理,而早已在动态链接库中的钩子函数正是监控该“窗口刷新”消息,一旦激活则将里面的数据全部提取并保存,最后等待LabVIEW软件平台进行调取使用。这样,激光干涉仪的位移测量数据被传输到的LabVIEW软件平台进行更全面的诊断和处理。通过LabVIEW强大的数据处理模块,可以对激光干涉仪测量的位移数据进行误差分析、曲线拟合等操作,使原本单一的数据监控方式变得更加开放、多元以及智能。
图1 激光干涉仪数据融合原理图
三、LabVIEW调用动态链接库
动态链接库的存在使程序外部访问代码成为的了现实,LabVIEW要成功的调用动态链接库还必须要满足一些要求,即是要知道被调用函数代码所在的库文件以及在库文件中使用的函数名称、调用的规则以及函数参数的数量和类型包括返回类型[3]。当这些信息都具备后,就可以通过LabVIEW进行调用。然而,在编写调用程序的时候,往往会遇到复杂的指针、多位数组结构,要想确定它们对于调用函数节点的配置是比较麻烦的,而LabVIEW中的调用库函数节点则可以很好的处理这些问题。
在编写调用代码的过程中最为重要的一个环节就是对调用库函数节点进行初始化,这是进程间进行通信的握手协议。图2为调用库函数节点初始化的界面,不难发现,初始化信息主要分为四个部分:函数、参数、回调和错误检查。
图2 调用库函数节点配置窗口图
函数部分需要知道被调用动态链接库的的库名以及它所在的路径,函数名则要填写被调用钩子函数的函数名称。而线程在默认的情况下,初始化为“在UI线程中运行”,此时调用的函数值将直接在用户线程中运行。如果,多个线程同时调用动态链接库中的函数时则要选择以递归方式调用的“在任意线程中运行”。调用规范默认情况下就选择“C”规范。参数部分是初始化调用函数的返回类型,返回类型可以是是 Void,Numeric 或String。通过回调选项卡可预先设置函数调用的次数。该函数允许用户根据配置的调用库函数节点的实例,初始化、更新或清除用于DLL或共享库的数据。通过为函数配置的“调用库函数节点”的实例数据指针传递调用。通过错误检查页可指定“调用库函数节点”的错误检查级别。
四、结束语
通过LabVIEW开发软件调用含有钩子函数的动态链接库,可以获取激光干涉仪的位移测量数据,这使得数据处理环节变得更加的开放和多元,为下游市场的开发和操作提供了更多的可能性。但是进程间的通信在方便同步的同时消耗了CPU额外的时间,在面对大量信息实时操作时还是显得有些不足并需要完善。
参考文献:
[1]徐志凯.热动类基本数据库与函数库的研究与开发.东南大学.2004。
[2]梁庚等.Windows下进程间通信方式探讨.微型电脑应用. 2006(12)。
[3]李涛.图形用户界面GUI的自动测试工具的研究.四川大学.2005。
关键词:激光干涉仪;钩子函数;动态链接库
中图分类号:TP212 文献标识码:A 文章编号:1671-864X(2014)09-0117-02
前言
随着现代加工工艺的革新,人们对测量的精度有了更高的要求。为了更加精确的确定被测对象的量值,往往会选用精度高的测量基准。目前,在精密测量领域,精度比较高的位移传感器主要有光栅传感器和激光干涉仪,它们经常被当做测量基准去测量和标定被测对象。而这些精度较高的测量仪器制造方法和工序相当的严苛和复杂,需要整个制造链都在一个高标准、高品质的背景下去生产。目前,国内有制造也已有了迅猛的发展,其中的某些环节的工艺水平已经达到世界先进水平,但是整体还没均衡,因此,高精度测量仪器的国产化还不现实。在需要精密测量时,进口国外的测量仪器还是比较普遍的。
Renishaw公司是世界计量和光谱分析仪器领域的领导者,主要提供测量、运动控制、光谱仪和精密加工等核心技术,从制造领域提高效率和产品质量、极大提高研发能力,使用户能够实现按溯源标准进行几何尺寸的测量。而Renishaw公司旗下的激光干涉仪就是常被用到的精密测量仪器。激光干涉仪不仅提供了高品质的硬件设备同时还提供了较为直观的开发软件Laser10供用户使用。但是,Renishaw激光干涉仪的位移读数只能通过Laser10显示,并且Renishaw公司没有提供开发的驱动程序,这极大地限制了用户多元化的开发。
一、基于Visual C++的钩子函数
钩子(Hook)函数是WINDOWS操作系统非常重要的特性,正如它名字一样它就像一个的钩子,捕获那些我们感兴趣的WINDOWS消息并获得控制权,进行相应的处理,比如数据运算、数据传递、强制传递等。钩子函数即是一个消息处理机制的平台,程序员在相应的代码段加入子程序以便监控某个特定的WINDOWS窗口消息,一旦所监控的窗口消息被钩子函数所探测到就将其截获,以便行进相应的处理。充分利用钩子函数的特性,不仅可以探测到其他进程发生的事件还能够截获程序员感兴趣的特定进程,再通过“钩挂”的形式,发给WINDOWS一个处理或过滤事件的回调函数,当每次发生您感兴趣的事件时,WINDOWS都将调用该函数[1]。Laser10运行的平台是WINDOWS操作系统同样遵循该操作系统的运行法则。这使得我们自然的想到,用钩子函数去截获Renishaw激光干涉仪数据的传输,只要我们能够找到激光干涉仪在传输数据时的窗口消息。通过观察Laser10开发软件发现,每当激光干涉仪有新测量数据产生时,Laser10软件会对窗口进行刷新从而进行数据的跟新显示,而这个刷新窗口的WINDOWS窗口消息则正式我们所需要的。钩子函数对该消息进行监控,一旦刷新窗口消息触发了钩子函数,钩子函数则截获该消息并将激光干涉仪更新的数据提取保存起来,等待其他的程序调用。
二、基于钩子函数LabVIEW与Laser10间的通信
激光干涉仪的数据被钩子函数截获之后,需要有其他的软件操作平台对此进行处理。通常Visual C++开发的操作平台对钩子函数的整合更好,但是Visual C++开发的软件平台在后续的数据处理和代码编程的问题上并不是很理想,目前,更趋向于图像化的编程方式。LabVIEW和C语言以及BASIC语言一样属于通用的编程系统,有着庞大的数据库,包括CPIB、数据分析、数据储存、串口控制和数据采集等。LabVIEW与其他编程语言最大的区别在于图形化的编程方式,用图形替代文本、数据流替代顺序执行,从而充分的发挥计算机的能力,创造出功能更加出色的仪器。
Laser10相对于我们自己开发的LabVIEW软件平台应归为他方进程,双方之间的通信就应为进程间的通信。进程间如若要进行数据的交换必须要有即成的服务器端和通信协议,只有这样,服务器才能够响应哪些和自己达成通信协议的客户端,否则就称为“无意识”型通信 [25]。
而上一节所讲述的钩子函数则是双方建立通信的桥梁。钩子函数不能直接被LabVIEW所使用,因为进程之间的通信需将钩子函数放到动态链接库中去并作为远程钩子来进行调用。动态链接库作为一个独立的文件它不能被直接的运行更不能接受消息,只有在其他模块调用动态链接库的函数时,它才能发挥相应的作用[2]。从图1可以知道,Laser10作为激光干涉仪的人机交互平台,实时的显示激光干涉仪的测量数据信息。每当有数据更新时伴随一个“窗口刷新”消息进入队列等待处理,而早已在动态链接库中的钩子函数正是监控该“窗口刷新”消息,一旦激活则将里面的数据全部提取并保存,最后等待LabVIEW软件平台进行调取使用。这样,激光干涉仪的位移测量数据被传输到的LabVIEW软件平台进行更全面的诊断和处理。通过LabVIEW强大的数据处理模块,可以对激光干涉仪测量的位移数据进行误差分析、曲线拟合等操作,使原本单一的数据监控方式变得更加开放、多元以及智能。
图1 激光干涉仪数据融合原理图
三、LabVIEW调用动态链接库
动态链接库的存在使程序外部访问代码成为的了现实,LabVIEW要成功的调用动态链接库还必须要满足一些要求,即是要知道被调用函数代码所在的库文件以及在库文件中使用的函数名称、调用的规则以及函数参数的数量和类型包括返回类型[3]。当这些信息都具备后,就可以通过LabVIEW进行调用。然而,在编写调用程序的时候,往往会遇到复杂的指针、多位数组结构,要想确定它们对于调用函数节点的配置是比较麻烦的,而LabVIEW中的调用库函数节点则可以很好的处理这些问题。
在编写调用代码的过程中最为重要的一个环节就是对调用库函数节点进行初始化,这是进程间进行通信的握手协议。图2为调用库函数节点初始化的界面,不难发现,初始化信息主要分为四个部分:函数、参数、回调和错误检查。
图2 调用库函数节点配置窗口图
函数部分需要知道被调用动态链接库的的库名以及它所在的路径,函数名则要填写被调用钩子函数的函数名称。而线程在默认的情况下,初始化为“在UI线程中运行”,此时调用的函数值将直接在用户线程中运行。如果,多个线程同时调用动态链接库中的函数时则要选择以递归方式调用的“在任意线程中运行”。调用规范默认情况下就选择“C”规范。参数部分是初始化调用函数的返回类型,返回类型可以是是 Void,Numeric 或String。通过回调选项卡可预先设置函数调用的次数。该函数允许用户根据配置的调用库函数节点的实例,初始化、更新或清除用于DLL或共享库的数据。通过为函数配置的“调用库函数节点”的实例数据指针传递调用。通过错误检查页可指定“调用库函数节点”的错误检查级别。
四、结束语
通过LabVIEW开发软件调用含有钩子函数的动态链接库,可以获取激光干涉仪的位移测量数据,这使得数据处理环节变得更加的开放和多元,为下游市场的开发和操作提供了更多的可能性。但是进程间的通信在方便同步的同时消耗了CPU额外的时间,在面对大量信息实时操作时还是显得有些不足并需要完善。
参考文献:
[1]徐志凯.热动类基本数据库与函数库的研究与开发.东南大学.2004。
[2]梁庚等.Windows下进程间通信方式探讨.微型电脑应用. 2006(12)。
[3]李涛.图形用户界面GUI的自动测试工具的研究.四川大学.2005。