基于混合编程的涂层体系三维点接触分析软件开发
2020-03-02王廷剑孙厚涛齐智慧张永钊王燕霜宣兆成
吴 跃,王廷剑,,3,孙厚涛,齐智慧,张永钊,王燕霜,宣兆成
(1.天津职业技术师范大学机械工程学院,天津 300222;2.哈尔滨工业大学机电工程学院,哈尔滨 150001;3.中国航发哈尔滨轴承有限公司,哈尔滨 150001)
随着材料技术和表面工程技术的发展,固体润滑涂层技术被广泛应用于齿轮和轴承等关键基础件的工作表面,以提高其减摩、耐磨、抗疲劳和抗胶合等综合摩擦学性能,特别是工作在高真空、强辐射和高低温交替的空间苛刻环境的摩擦部件[1-3]。除了涂层材料自身的机械力学性能及其与基体的界面结合强度之外,涂层在接触载荷作用下的力学行为也是决定涂层实际应用效果的核心因素,因此涂层体系的接触力学行为是涂层优化设计不可忽略的问题。
许多研究学者采用ANSYS、ABAQUAS 等商用有限元软件分析齿轮、轴承等接触界面的力学行为,解释试验结果,揭示涂层的失效机制[4-5]。应用有限元软件分析接触问题,其计算结果的精度和准确性依赖于模型网格单元划分质量以及接触刚度的设置等,这对于普通工程技术人员而言非常不便。积分变换法是弹性力学应力应变分析常用的方法,文献[6-9]应用积分变换的方法获得了单层及多层涂层体系半平面在表面线分布机械载荷作用下弹性场的频域解,建立了涂层体系的线接触模型;文献[10-14]应用积分变换的方法获得了单层和多层涂层体系半空间在表面机械载荷作用下弹性场的频域解,建立了涂层体系的三维点接触模型,并基于与快速傅里叶变换相关的多种算法开发了相应的求解分析程序,该程序具有计算速度快、计算精度高等优点,但其缺乏软件用户界面,以致接触参数输入和计算结果查看不方便。在工程领域,通过Vb、Fortran 和Matlab 等计算机语言或应用软件间的混合编程,为各种工程问题的专用计算分析程序开发软件界面,方便工程技术人员使用是一种发展趋势。刘鹏等[15]应用Vb 中的Shell 功能函数直接调用Fortran 外壳程序,开发了结构动力分析有限元计算程序系统。郭翔伟等[16]通过动态链接库.dll 文件实现Vb对Fortran 混合编程,开发了混凝土坝温度应力仿真分析软件。万庭辉等[17]利用ActiveX 技术实现Vb 与Matlab 的混合编程,开发了TOUGH+HYDRATE 数值模拟软件。马培勇等[18]利用COM 组件生成.dll 文件来实现Vb 对Matlab 混编,开发了圆柱形弹簧变形量的蒙特卡洛模拟分析软件。大量相关文献表明,Vb、Fortran 和Matlab 等计算机语言或应用软件间的混合编程可以综合利用Fortran 计算速度快、Vb 界面开发功能强大和Matlab 软件绘图功能强大的优势。
基于前期研究开发的单层涂层体系接触分析的Fortran 程序代码[13-14],本文通过Vb、Fortran 和Matlab的混合编程,开发了单层涂层体系三维点接触分析软件——CONTACT3D VERSION 1.0.exe,实现了接触参数输入界面化和接触分析结果界面可视化,并对软件进行演示与计算结果对比验证。
1 基于Vb 的软件界面设计
运行Vb 6.0 软件,创建一个新工程,将其窗口Form1的Caption 属性设置为CONTACT Version 1.0。然后在该窗口添加3 个Frame 控件,并将3 个Frame 控件的Caption 分别设置为数值计算、接触压力分布和冯米斯等效应力分布,Vb 开发的软件界面如图1 所示。
图1 Vb 开发的软件界面
在Caption 属性为数值计算的Frame 控件下部创建一列TextBox 文本框,作为单层涂层体系与弹性球体间三维点接触的接触载荷、球体与涂层体系弹性参数、涂层厚度、几何尺寸、摩擦系数及x、y、z 3 个方向划分单元个数等的输入,对应的在其左侧有一列Lable 控件,用于注释对应的文本框输入参数的物理量和单位等内容。在该Frame 控件上部添加一个Image 控件,并通过其Picture 属性添加单层涂层体系半空间与弹性球体之间的三维点接触示意图,使界面输入参数与其所代表的物理参量形成对照。在该Frame 控件最下方插入一个名称为Command1 的命令按钮,其Caption 属性为开始计算,点击该命令按钮,其后台程序将调用Fortran 编译的单层涂层体系三维点接触的Forlib.dll 动态数据库里的DRYCONTACT过程稿完成接触计算,并把接触压力和次表层冯米斯等效应力的计算结果传递给Vb 的矩阵变量,同时以.txt 文件对包括接触压力和次表层冯米斯等效应力在内的数据进行保存,计算结果数据.txt 文件存储如图2所示。图中outputpressure.txt 为接触压力数据保存文件,VM.txt 为次表层等效冯米斯等效应力的保存文件,其他.txt 文件为次表层接触应力6 个分量、两接触表面法向间距、接触表面法向变形以及输入的接触工况参数等数据的保存文件。
图2 计算结果数据.txt 文件存储
在Caption 属性分别为接触压力分布和冯米斯等效应力分布的Frame 控件内分别添加一个Image 控件,其Name 属性软件默认名为Image1 和Image2,并设置好其大小。在2 个Image 控件下分别添加命令按钮控件Command2 和Command3,命令按钮的Caption属性分别设置为接触压力和冯米斯等效应力,通过点击命令按钮,其后台程序将通过调用Matlab 的绘图函数绘制接触压力分布和次表层冯米斯等效应力梯度分布,实现计算结果的界面可视化。
2 Vb 和Fortran 的混合编程
2.1 动态链接库.dll文件的编译
Vb 与Fortran 的混合编程通常是通过Vb 调用Fortran 编译的可执行文件.exe 或者动态链接库.dll 文件这2 种形式来实现[19]。动态链接库文件是可供Vb、VC 等其他程序或者Fortran 自身调用的一些过程或函数组成的可执行命令模块,可以包含一个函数或者一个过程,也可以是同时包含多个函数或者多个过程,但其本身不能单独运行。本文采用Vb 程序调用Fortran 编译的动态链接库文件的方法来实现单层涂层三维点接触的分析计算,在前期研究开发的单层涂层体系接触分析的Fortran 程序代码[13-14]的基础上,经过简要的形式改编后编译成可供Vb 程序调用的动态链接库文件。在Microsoft Visual Studio 2010 开发环境下,编译动态链接库文件的基本步骤如下。
步骤1打开Visual Studio Studio 2010,点击菜单栏上的“文件”选项,选择“新建”,然后选择“项目”,弹出“新建项目”对话框,在对话框左侧的模板列表中点击Intel(R)VisualFortran 下的“Library”选项,然后在左侧的Fortran 程序类型选项栏中选择“Dynamic-link Library”,最后在下方输入项目名和保存路径,本文项目名为“Forlib”,完成后点击确定按钮。
步骤2在新出现的界面的右侧,选择sources files 选项,点击“添加”按钮,再点击“新建项”,弹出一个新界面,在该界面里选择“Fortran free-form file”选项,新建一个.f90 文件,本文将该Fortran 程序文件命名为“DRYCONTACT.f90”,然后点击添加按钮。
步骤3在开发环境窗口打开DRYCONTACT.f90文件,在这一步首先将涂层体系三维点接触分析Fortran 程序代码输入到该文件,然后根据编译.dll 动态数据库的编程规则改编成函数或过程的形式,在改编过程中还需特别注意Vb 调用Fortran 编译的.dll 文件的函数或过程的有关声明,包括函数、过程或者变量的命名声明、参数数据类型及参数传递方式等方面的约定。本文改编为过程的形式,改编完成后,在界面右侧的sources files 选项下添加DRYCONTACT.f90 文件调用的各个子过程的f90 文件,包括G_INITIAL.f90、NCS.f90、ICONVCIJ.f90 和STRESSSOLVER.f90等,然后在菜单栏中选择“生成”选项,选择“生成解决方案”,最后选择保存。
步骤4在该项目存储路径下的.debug 文件夹可以找到相应的动态链接库文件,本文动态链接库文件为Forlib.dll。
在步骤3 中,DRYCONTACT.f90 文件的部分程序代码见附录1。程序中“! MS$ATTRIBUTES”是Microsoft Visual Studio 2010 Fortran 的元命令,也可写为“! EDS$ATTRIBUTES”或“$ATTRIBUTES”,若写成“$ATTRIBUTES”,则在Fortran 程序代码中$必须位于首列。元命令主要用于声明微软扩展属性,DLLEXPORT、ALIAS 和REFERENCE 都是微软扩展属性,DLLEXPORT 用于声明过程或者函数可以被其他程序调用;ALIAS 用于为过程或者函数指定调用方的别名,在这由于调用方的过程名与Fortran 子过程的名字一致,因此也可以省略不写;REFRENCE 用于声明参数传递为按址(引用)传递,按址传递是Vb 与Fortran 混编默认的参数传递方式,通常也可以省略不写。另一种常用的参数传递方式为按值传递,用VALUE 来声明。按值传递是将参数值传给堆栈,实参的值不随形参的值的改变而改变;而按址传递是将地址传给堆栈,实参的值随形参的值的改变而改变,因此动态链接库文件的函数或者过程的输入参数通常按值传递,而输出参数通常按址传递,如果传递参数为数组,则其传递方式为按址传递。
2.2 Vb程序调用.dll文件
Vb 程序要调用动态连接库文件所含的函数或过程需先对其进行声明,通常在Vb 工程的模块添加声明程序代码来声明动态链接库文件。本文Vb 工程模块里对动态链接库文件Forlib.dll 文件的声明程序代码和对全局变量定义代码为
"动态链接库文件声明
声明程序代码中双引号内的文件路径为动态链接库Forlib.dll 的存储位置,该路径必须详细到根目录,否则程序会提示找不到该动态链接库文件;括号内为Vb 调用Forlib.dll 文件的DRYCONTACT 过程传递的参数,其中ByVal 表示参数的传递按值传递,不可省略;ByRef 表示按址传递,是默认的参数传递方式,可省略不写。Vb 声明动态链接文件时不仅各个参数的传递方式要与Fortran 源程序规定的传递方式一致,而且其数据类型也要一致,Vb 主要变量类型与Fortran变量的对应关系如表1 所示。
表1 Vb 与Fortran 主要变量类型的对应关系
此外,程序中各输入参数存储变量类型也要与动态链接库文件声明中的变量类型一致。
动态链接库文件声明之后,就可以通过窗口后台程序调用动态链接库文件所包含的过程或者函数。本文Vb 程序调用动态链接库文件的窗口后台程序如下
数组的传递方式为按址传递,在调用时要把对应数组的首个元素作为参数放在被调用函数或过程的对应位置,如PR(1,1)、VMR(1,1)。
3 Vb 和Matlab 的混合编程
Vb 和Matlab 的混合编程主要有ActiveX 技术、可执行文件技术、Matrix Vb 技术、动态数据交换(DDE)技术和COM 组件技术[20-21]。ActiveX 技术基于ActiveX 自动化协议,该协议允许某一个应用软件(控制端)通过ActiveX 自动化接口调用另一个应用软件(服务端)。而Vb 支持ActiveX 的控制端协议,Matlab 软件支持ActiveX 的服务端协议。本文使用ActiveX 技术实现Vb 程序调用Matlab 绘图函数进行涂层接触分析结果的图形化与可视化,其关键在于建立Vb 和Matlab 之间的ActiveX 自动化链接。Vb 和Matlab 之间的自动化链接通过在Vb 中创建Matlab 对象实现,具体方法如下
通过创建Vb 和Matlab 的自动化链接,Vb 程序就可以通过“Matlab.execute()”等命令调用Matlab 的相关函数与命令。本文Vb 程序调用Matlab 绘制接触压力分布和次表层接触应力分布的后台程序代码详见附录2。
4 软件运行演示验证
软件调试无误后,生成CONTACT3D VERSION1.0.exe 可执行文件。运行该执行文件弹出如图1 所示的软件界面,按表2 所示的接触参数和单元网格划分数目输入文本框。
表2 输入的接触参数和单元网格划分数目
点击开始计算按钮,当软件界面出现“计算完成”的提示框时,表明接触分析结算已近完成。分别点击接触压力和冯米斯应力2 个命令按钮,则软件界面上显示接触压力和冯米斯等效应力的分布图,软件运行演示如图3 所示。
图3 软件运行演示
为了进一步验证程序计算结果的准确性,针对表2所示的接触参数和单元网格划分数目,应用文献[13-14]的涂层接触分析Fortran 程序进行接触计算,Fortran程序计算分析结果如图4 所示,图中ρ 为接触压力;PH代表以基体为材料的弹性半空间与球体Hertz 点接触的最大Hertz 接触压力;aH代表以基体为材料的弹性半空间与球体Hertz 点接触的最大Hertz 接触半径。从图4 中可以看出,图3 软件界面上的结果与图4 所示结果一致。
图4 Fortran 程序计算分析结果
5 结语
本文基于Vb、Fortran 和Matlab 的混合编程,开发了单层涂层体系三维点接触分析软件,实现了接触体几何尺寸、材料特性以及接触载荷等接触参数输入界面化和接触压力与次表层冯米斯等效应力计算结果的界面可视化。研究表明,通过混合编程可以综合利用Vb、Fortran 和Matlab 3 个软件语言在界面开发、数值计算以及绘图方面的各自优势,实现参数输入界面化和计算结果查看界面可视化的功能,有效解决单一Fortran 代码程序参数输入和计算结果查看不便的问题。通过算例计算演示及与已发表论文的Fortran 程序计算结果的对比,验证了本文开发的软件具备预期功能,计算结果准确有效。本研究不仅为单层涂层体系接触问题提供了一款界面友好的专用分析软件,也为后续进一步开发多层涂层体系接触分析软件奠定了软件框架和技术基础。
附录1
编译dll 动态链接库文件的Fortran 主程序文件DRYCONTACT.f90 部分程序代码如下
附录2
Vb 程序调用Matlab 绘制接触压力分布和次表层接触应力分布的后台程序代码