APP下载

C#与Matlab混合编程在EA211水泵壳体平行度检测中的应用

2014-07-05金洋洋李居峰

机械制造 2014年6期
关键词:壳体平行水泵

□ 金洋洋 □ 李居峰 □ 袁 丽

上海大学 机电工程与自动化学院 上海 200072

水泵是发动机冷却系统的重要部件,它的作用是泵送冷却液,使冷却液在发动机的冷却水道内快速流动,以带走工作时产生的热量,保持发动机正常的工作温度。汽车发动机使用的是离心式水泵,由壳体、叶轮、轴承、泵轴、水封以及传动带轮等组成。

水泵壳体由铸铁或铸铝制成。铸铁壳体壁厚且质量大,随着对发动机轻量化要求的提高,目前只在某些商用汽车的大型发动机上还在使用铸铁壳体的水泵。很多铸铁壳体上还带有部分水道和节温器安装室,这使壳体的质量进一步增加。大多数轿车水泵采用了铸铝壳体,而且尺寸越来越小,很多壳体已经不再具有水道的功能。本文所研究的大众汽车EA211发动机冷却系统的水泵壳体也是采用铸铝材料,在其生产过程中,水泵壳体上下面的平行度是一个重要指标,它直接影响到水泵整体的性能以及汽车的行车安全。水泵壳体上下面的平行度要求如图1所示。

1 Matlab和C#结合的思路

当下,Matlab已成为应用最广泛的科学工程计算软件,它广泛应用于自动控制、数学运算、信号分析、图象处理、财务分析等各领域。Matlab所使用的是一种脚本语言,是逐行解释执行的,程序中所有的变量都是通过mxArray来实现的,所以为了保证通用性,它的执行效率非常低,在开发一些复杂算法时会发现程序执行得特别慢,虽然MathWorks公司已竭力提高M脚本文件的运算速度,但到目前为止,效果仍然不能和同样功能的可执行程序相比。而且,M文件不能脱离Matlab的应用程序环境,这就大大制约了程序的可移植性和通用性,因此,Matlab不适合作为通用的编程平台,这给混合编程出了一个大难题。

C#是微软公司发布的一种面向对象的、运行于.NETFramework之上的高级程序设计语言。它是一种安全、稳定、简单、优雅的,由C和C++衍生出来的面向对象的编程语言。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。

如果利用C#与Matlab接口技术,一方面充分发挥Matlab的数值计算功能,并且可以不依赖它的软件运行,另一方面在C#里做出漂亮的界面,把复杂的数据处理交给Matlab去做,这样有助于发挥程序各自的优点,降低开发难度,缩短编程时间,提高执行效率。基于C#和Matlab结合优势的考虑,本文介绍一种C#与Matlab通过COM组件混合编程的技术,并且将这种技术成功地用于平行度在线自动检测项目。

2 Matlab和C#混合编程的实现过程

▲图1 EA211发动机水泵壳体的示意图

通过COM组件的形式进行混合编程,首先要考虑的问题是编好的程序到了工厂的电脑上能否正常运行。经过实际操作试验,发现只要拷贝一下Matlab的MCR(即 MatlabCompilerRuntime)安装文件,然后到所要运行的电脑上安装一下就可使用。如果电脑上安装了Matlab,则不需要再重新安装这个软件。另外,不同的Matlab版本提供的MCR可能会不同,如果在另一台电脑上自己编写的软件运行有问题,可能是编译器的版本不同引起的。

使用混合编程,首先把Matlab提供的MWARRAY类库MWARRAY.dll添加到C#程序中。它的作用是把C#中的数组转化为Matlab中的数组。同时需要在程序开始部分添加下面两句话:

using MathWorks.Matlab.NET.Arrays; using MathWorks.Matlab.NET.Utility;

接下来需对Matlab进行编译,然后生成.dll文件,和添加MWARRAY一样,添加到C#引用之中,并在程序开始处添加下面一句话:

usingmyFuti;(假设函数名为 myFuti)

这里有一点要注意,就是Matlab中M文件里编写的程序必须是函数格式,不然就生成不了所需要的.dll文件。如果不是函数格式,需将其转换成函数合适之后再进行转换。具体操作就是在程序的第一行添加:function[]=myFuti(即建立一个空函数),在程序的最后一行添加:end,这样就将其转成函数格式了。

最后通过C#编程调用Matlab进行计算,实现混合编程的任务。

3 Matlab和C#混合编程技术在平行度检测中的应用

掌握了混合编程的技术之后,笔者打算把它应用在近期所做的EA211水泵壳体平行度检测项目上。在计算平行度的算法选择中,决定使用当今最流行的最小二乘法进行曲面拟合,即根据空间所给的n个点坐标来拟合一个面,使各个点到这个拟合面之间的距离最小,那么这个平面就是所要求的面。从另一角度来看,就是求得一个平面方程 z=a(1)*x+a(2)*y+a(3),使各个点尽可能都是此方程的解。

现在就以具体数据为例,取空间8个点,各点的空间坐标 x、y、z 如下:

x=[2020.0520171616.0511.059.05];y=[1520231810583];

z=[4.04664.01034.05384.01804.0119

4.04394.03244.0360]

利用Matlab最小二乘算法编程如下:

A=[x′,y′,ones(size(x′))];

a=A/z′,其中a为拟合曲面的3个未知系数。

将 3 个系数分离下来为:a(1)=[1,0,0]a; a(2)=[0,1,0]a; a(3)=[0,0,1]a

最后可以得到:a(1)=0.0010, a(2)=-0.0006,a(3)=4.0233

与传统的三坐标测量的结果对比发现,两者的误差非常小,说明使用该算法是切实可行的。这样就得到了拟合曲面的方程 z=a(1)x+a(2)y+a(3),为下一步计算平行度打下了基础。

在项目方案中,笔者打算通过 “基恩士”LK-G30系列激光位移传感器采点的方法来测EA211水泵壳体上下面的平行度。初步计划在上平面采7个点,在下平面采8个点,采完这些点之后计算平行度。先利用下面8个点拟合一个虚拟平面,然后再计算上面7个点分别到这个拟合面的距离,取这些距离中的最大值和最小值,两者相减即得到所求的平行度。图2和图3分别为水泵壳体上下面的采点情况示意图。

▲图2 上平面的采点情况

▲图3 下平面的采点情况

4 结论

本文主要介绍了基于Matlab与C#的混合编程技术,并通过EA211水泵壳体平行度检测的案例说明了这种方法的可行性与优越性。文中的程序结合了C#与Matlab各自的优势,不仅提高了工作效率,使程序员更容易开发出功能强大、界面友好的软件,同时也提高了系统的运行效率与精确性。这对于实现系统的无缝集成、有效缩短软件开发周期、优化系统性能是十分有意义的。

[1] 施杰,严慎.用最小条件法求解平面度误差[J].计量技术,1993(3):3-4.

[2] 张眆.平面度误差的最小二乘法分析[J].机械制造与研究,2002(3):17-19.

[3] 冯俊艳,冯其波,匡萃方.高精度激光三角位移传感器的技术现状[J].应用光学,2004,25(3).

[4] 张文选.曲臂两臂轴线平行度误差非接触检测技术研究[D].长春:长春理工大学,2002.

[5] 肖永韧,解习农,刘晓峰.VC与Matlab混合编程之dll实现方法[J].计算机工程与应用,2001(13):174-176.

猜你喜欢

壳体平行水泵
向量的平行与垂直
平行
减速顶壳体润滑装置的研制与构想
凝结水泵全系列优化改进
逃离平行世界
水泵节能改造在昆钢的应用实践
汽车变速箱壳体零件自动化生产线
油泵壳体的冲压工艺及模具设计
低压除氧水泵变频改造
再顶平行进口