MATLAB与VC混合编程技术在数控机床动态特性监测分析中的应用

2010-08-23 04:47吴传海胡友民
制造业自动化 2010年12期
关键词:调用引擎机床

吴传海,胡友民,金 超,吴 波

WU Chuan-hai, HU You-min, JIN Chao, WU Bo

(华中科技大学 数字制造装备与技术国家重点实验室,武汉 430074)

0 引言

随着现代生产的发展和科学技术的进步,设备的结构越来越复杂,功能越来越完善,自动化程度也越来越高。由于装备的故障而带来的负面影响越来越多,造成巨大的经济负担,影响企业的竞争力,设备状态监测和故障诊断技术已经受到世界各国技术人员的高度重视[1]。高速高精数控机床的特点是速度快、加速度大,而机床的力学特性(如结构、间隙、动静刚度、摩擦特性、振动等因素)是影响机床运行效率的瓶颈,机床长期运行之后,动态特性将发生退化,机床的稳定性及加工精度随之降低,为了确保机床的加工质量和效率[2],防止机床动态特性降低,需要对机床各项动态特性指标进行监测诊断。机械结构的复杂性决定了机床加工过程的复杂性,从而也导致了机床动态特性监测的复杂性。机床动态特性各部件的状态变化周期长,趋势不明显,比较方便使用研发的动态特性监测仪,对机床状态进行长期监测。故障的诊断与分析是机床动态性能监测分析系统的核心功能,这部分模块功能涉及到许多复杂算法的实用,而选择合适的程序开发方法,对算法功能的实现有着重要的意义。鉴于VC强大的界面设计功能,MATLAB优秀的数值分析与工程计算特性,所以选择使用VC与MATLAB混合编程开发故障诊断与分析模块。

1 数控机床动态特性监测分析系统介绍

图1为机床状态测试分析系统工作流程图,通过传感器获取运行设备的状态信息,对采集数据进行分析处理,识别出设备当前的状态,通过分析软件做出诊断决策,进而对机床进行技术调整,通过这一反馈过程[3],可以提高机床的特性,从而提高加工质量和生成效率。美国NI公司在这个技术领域处于世界领先水平,图2为NI PXI-9230实物图。

图1 机床状态分析测试系统流程

图2 NI PXI-9230

本课题中所开发的监测系统通过采集设备的振动信号,加速度信号,温度信号,对设备进行实时监测,并通过采集得到的数据对设备进行特性分析和诊断,根据数控机床动态特性监测分析系统的功能,选择合适的硬件,包括传感器,数据采集卡,上位机。最为核心的部分为数控机床动态特性监测分析系统软件的设计,按功能需要,该系统软件的总体结构如图3所示:

图3 软件的总体结构图

系统按工作过程划分为三个层次:

第1层次:数据采集与信号调理。传感器获取的信号较微弱,通过对电流或电压信号进行放大、滤波处理后,用采集设备将模拟信号转化为数字信号传输给计算机保存。

第2层次:实时监视与状态识别。对设备进行信号采集后,即获得了设备运行状态信息,通过便携式计算机实时显示监测过程中的振动波型、频谱分析图形、轴心轨迹等。在线信号分析过程主要包括常见的典型的时域、频域等分析内容。

第3层次:在线分析与智能诊断。根据获取的设备运行状态信息,如典型特征值提取,结合基于已有的故障诊断方法来评价设备当前的状态,如果可能存在故障,能反映出故障的相关信息。

其中第3层次功能模块的实现是本系统设计的重点也是难点,选择合适的程序开发手段是解决这个问题的关键,故障分析与智能诊断模块功能的核心算法可以选择使用MATLAB编程语言(M代码)开发,利用VC可以设计出人性化的界面,所以选择VC与MATLAB混合编程,下面将重点介绍混合编程技术的研究。

2 MATLAB 与C语言的接口技术研究

利用MATLAB接口可以在Visual C++中充分发挥MATLAB的数值计算功能,同时可以利用VC强大的界面开发功能,这样可以大大减少编码工作量[4]。

2.1 VC++与MATLAB混合编程的实现方法

MATLAB 与C语言的接口技术即MATLAB与VC混合编程技术, 它是通过应用程序接口(API)[5]实现的。一般而言,MATLAB与VC混合编程的实现方法有以下三种:

1)通过引擎(Engine)[6],采用客户机服务器的计算模式,通过Window的ActiveX通道和MATLAB进行连接。具体应用时,往往在VC中设计程序框架,以编译的程序作为前端客户机;通过调用MATLAB引擎在后台实现与服务器的连接,实现动态通信;

2)应用MATLAB数学函数库,MATLAB中包含了内容丰富的函数库,而且还提供了与VC的数学函数接口,用户可以方便的在VC的IDE(集成开发环境)中调用;

3)通过DLL[7]实现VC与MATLAB的混合编程。DLL是一个可执行的二进制文件。把很多通用的功能放在DLL中,可以供多个应用程序调用,这样可以很好的减少外部存储空间的占有量,并实现代码的共享。

2.2 VC++与MATLAB混合编程各方法的对比与选择

第一种方法对调用MATLAB的工具箱很实用,用这种方法进行编程开发,方便结合MATLAB命令窗口调试程序,能充分发挥MATLAB编程语言简洁容易掌握的优点,可以更好实现MATLAB工程计算优势,便于复杂的数学算法在工程实践中的应用。

第二种方法开发软件对程序员要求较高,要同时对两款软件都很熟悉,对于大型复杂算法来说,这种方法将使程序开发工作量过大。用户不能在基于MATLAB、C/C++数学函数库的应用程序中使用eval()和input(),不能调用MATLAB图形句柄系统的函数,不能调用MATLAB工具箱函数,MATLAB中的一些方法在C/C++中得不到支持,这种方法不能发挥MATLAB的巨大优势。

第三种方法实用于小型软件的开发,可以整体减少文件外部存储空间的占有量,但是对于大计算量的程序而言,这种方法开发的软件稳定性差。

介于数控机床动态特性监测分析系统的复杂性,特别是该系统中应用到了很多复杂的故障诊断算法,如粒子群优化算法[8],自适应共振理论的混合智能诊断算法[9]等等。但是这些繁杂的算法利用MATLAB实现起来比较方便,采用MATLAB引擎的方式实现混合编程,使程序开发工作量明显减少,便于软件维护,提高故障监测诊断分析的速度与精度。

3 VC++调用MATLAB引擎技术研究

所谓MATLAB引擎(engine),是指一组MATLAB提供的接口函数,支持C/C++、Fortran等语言,通过这些接口函数,用户可以在其他编程环境中实现对MATLAB的控制。可以实现的主要功能有:打开/关闭一个MATLAB对话;向MATLAB环境发送命令字符串;向MATLAB环境中写入数据;从MATLAB环境中读取数据。调用引擎之前需要配置编译器,要在VC中成功编译,必须包含引擎头文件engine.h,并引入MATLAB对应的库文件libmx.lib、libmat.lib、libeng.lib。

混合编程中的关键问题及解决方法

1)利用VC启动MATLAB引擎

先定义一个指针再利用相应的接口函数启动引擎。具体的实现代码如下:

2)建立对话框,利用V C控件实现对MATLAB计算程序中相应参数的输入

主要用到了ClassWizard定义相应的变量,再利用Format(),engEvalString()等接口函数使得VC窗口中输入的语句在后台MATLAB中被执行。

3)实现多维数组数据的读入

利用相应的API函数可以实现大型数组的读入,方法是:先VC中建立一个矩阵,再把VC环境下的多维数组数据写入该矩阵,最后利用接口函数engPutVariable()将矩阵写入MATLAB。相应代码如下:

4)后台MATLAB引擎计算结果的返回与显示

利用MATLAB引擎计算之后,需要将计算结果返回并显示到VC代码构建的窗口中,方法为:先建立一个矩阵用于存放MATLAB引擎的计算结果,再利用mxGetPr()函数读取引擎中的数据,最后利用接口函数mxGetPr将计算结果返回到VC窗口界面中。实现代码如下:

4 模块开发

4.1 丝杆驱动进给系统支撑点轴向刚度与阻尼测量模块的开发流程

丝杆驱动进给系统支撑点轴向刚度与阻尼测量模块是课题所研发的数控机床动态特性监测分析系统中的一个关键模块。该模块的核心算法是粒子群优化算法,算法程序采用MATLAB编程语言(M语言)编写,然后利用VC创建一个单文档应用程序,最后在软件的总体界面上添加一个菜单按扭,并建立相应的消息响应函数,实现直接调用已创建的单文档对话框,在该对话框的消息响应函数中加入相应的代码,实现VC调用MATLAB引擎运行相应的算法程序,结合测量数据,实现支撑点刚度与阻尼的识别。

开发以上模块就能够应用论文中所研究的VC调用MATLAB引擎的技术。该模块的开发流程如图4所示。

图4 模块开发流程

图5为所开发的数控机床动态特性分析仪的软件界面图,图6为丝杆驱动进给系统支撑点轴向刚度与阻尼测量模块的运行结果。

图5 分析仪软件界面图

图6 刚度与阻尼测量模块计算界面

实验过程中如果是第一次调用此程序,由于需要在计算机中启用MATLAB,所以需要几秒种的延迟。上图中计算结果相应窗口中所显示的数据即为丝杆驱动进给系统支撑点轴向刚度和阻尼。根据该数据,结合相应的指标,对机床的状态特性出做评估与分析,可以实现对支撑点状态特性的识别与预测。

5 结论

经过实验研究开发的成果,可心得出如下结论:

1)VC调用MATLAB引擎可以避免编写烦索的VC代码,缩短了开发时间,提高开发效率。

2)对于复杂算法,特别是涉及到大型数据计算时,文中所提的混合编程方法能更好的发挥MATLAB工程计算的优点,同时也增强了程序整体的稳定性。

综上所述,在涉及大型数据计算的软件开发项目中,文章所研究的方法可以提供相应的技术支持。

[1]吴旭东,夏志澜.状态监测数据管理与故障诊断专家系统研究[J].江苏船舶,19(3):10-12.

[2]张雪江,何永勇,等.旋转机械状态监测与故障诊断系统[J].计算机应用,25(6):49-51.

[3]杨晓强,张梅军,等.机械设备状态监测系统[J].振动、测试与诊断,19(3):183-186.

[4]刘维.精通MATLAB与C/C++混合程序设计[M].北京:北京航空航天大学出版社,2008:49-51.

[5]孙鑫,余安萍.VC++深入详解[M].北方电子工业出版社,2009:1-3.

[6]杜鸿飞.VC++与MATLAB混合编程之引擎操作详解[EB/OL].http://dev.yesky.com/300/2343300.shtml.

[7]张钦.基于动态链接库(DLL)的Visual C++混合编程[M].西安:西安交通大学出版社,2007:40-45.

[8]胡峰.数控机床进给系统动态特性辨析与分析方法研究[D].武汉:华中科技大学出版社,2009:41-55.

[9]徐增丙.基于自适应共振理论的混合智能诊断方法及其应用[D].武汉:华中科技大学出版社,2009:27-33.

猜你喜欢
调用引擎机床
机床展会
新海珠,新引擎,新活力!
核电项目物项调用管理的应用研究
系统虚拟化环境下客户机系统调用信息捕获与分析①
2019,中国机床变中求进
三生 三大引擎齐发力
基于通用机床的100%低地板有轨电车轮对旋修
机床挤刀装置的控制及应用
蓝谷: “涉蓝”新引擎
利用RFC技术实现SAP系统接口通信