盛庆轲 梁海琴
摘要:达芬方程作为典型的非线性振动方程,可以直观地用来说明与线性振动的区别。分别采用有限元程序ANSYS和编程语言Python对达芬方程进行求解。针对ANSYS界面操作效率低、数据后处理能力不足等问题。以PyQt5为平台,封装ANSYS和Python的求解以及数据处理过程,并制定可视化操作界面。程序包含达芬方程参数输入、ANSYS计算、Python计算和数据后处理四个功能。以多组系统参数为例,使用该程序计算达芬方程,计算结果表现了非线性振动中初值影响、多稳态解和谐波响应运动特性。
关键词:达芬方程;非线性振动;有限元;可视化设计
中图分类号:TP391.9 文献标识码:A 文章编号:1007-9416(2020)08-0076-04
0 引言
機载设备往往由多个零部件构成,随着科学技术的迅速发展,零件自身的复杂性和连接关系也趋于复杂。目前对于机载设备的振动强度主要采用有限元软件进行计算校核,然而有限元的振动计算是基于小变形线性理论。当结构简单、振幅较小、连接关系变化不大时,按线性理论是计算可以得到较为满意的结果[1]。
一切力学问题在本质上都属于非线性问题。对于非线性系统,响应和输出之间并不是线性关系,按照线性理论计算得到的结果精度可能不足,甚至导致本质上的错误。非线性振动会出现幅频曲线弯曲、谐波、分岔混沌共振等线性振动不存在的现象[2]。在非线性振动振动理论研究中,具有代表性的方程有达芬方程、Van-der-Pol方程等[3]。
达芬方程对应的动力学表达式如式(1)所示,也称为达芬系统,其中刚度包含立方项。
(1)
其中:x代表位移,m代表质量,c代表阻尼,k1代表线性刚度,k2代表非线性刚度,f(t)代表外载荷。
ANSYS的脚本语言APDL能够实现有限元模型的参数化建模计算功能,但其可视化程度较低,一般基于其他编程语言对其进行二次界面开发。Python是一种面向对象的动态解释型语言,应用领域广泛[4]。Qt是由C++语言编写的跨平台GUI库,PyQt5则是将Python语言与Qt融合,具有Python开发效率高的特点[5]。
本文以PyQt5为平台,基于Python对ANSYS求解达芬方程的过程进行封装并设计可视化操作程序,同时加入了基于Python科学计算库的达芬方程计算和结果显示功能。
1 计算程序的功能设计
达芬方程计算程序主要包含四个功能,分别是参数输入、提交ANSYS计算、提交Python计算和结果显示模块。由于Python语言自身的特点,许多功能的实现需要引用Python标准库和第三方库。程序的总体设计框图如图1所示。
(1)参数输入包括质量系数、阻尼系数、刚度线性系数和立方项系数、载荷幅值和频率、初始位移和速度、求解时间和步长。(2)提交ANSYS计算前提是用户电脑需要装有ANSYS软件,然后设置ANSYS.exe的启动位置、工作目录和APDL文件名即可,程序会在指定目录下生成文件并且调用ANSYS主程序进行求解。(3)提交Python计算只需前面的参数输入完毕后,利用Python科学计算库求解即可。(4)对于非线性微分方程,一般很难找到精确的解析解,大都是从定性和定量两个方向来研究。相平面法[6]是常用的定性方法之一,它是描述系统速度与位移的对应关系,可以直接判断方程解的平衡性、周期性和稳定性等。
1.1 基于Python实现ANSYS二次开发
利用Python对ANSYS二次开发的主要过程分为提取界面输出参数及相关信息、生成指定参数下的APDL文件和提交ANSYS计算。
1.1.1 APDL命令流文件的生成
在APDL建模命令流之前引入相关的参数化变量,然后对该字符串进行正确的格式化,即可得到特定输入下特定的ADPL文件。
本文编写的APDL脚本程序主要采用质量单元mass21和非线性弹簧单元combin39,分析类型为瞬态非线性,根据初始条件中的位移和速度是否为0,生成不同的APDL命令流以模拟相应的初始条件。
1.1.2 Python调用ANSYS程序
首先在计算程序设置APDL文件的存储位置和文件名称,程序即可在指定目录下生成2.1中描述的APDL文件,主要代码如下所示:
file = str #获取存储位置的绝对路径
with open (file,) as f: #打开文件
f.write(s) #写入2.1中的字符串
接下来需要设置启动ANSYS.exe的路径,依次生成执行批处理的Python文件。在Python中采用OS标准库完成系统操作,并且依据OS库执行的接口可以实现跨平台访问。生成批处理文件的代码如下所示:
最后再利用os.system命令运行上述的批处理文件,即可完成Python对ANSYS的调用计算。
1.2 提交Python计算
当达芬方程的系统参数和求解参数输入完成后,即可提交Python进行求解。整个过程基于Python的科学计算库[7]Numpy和Scipy,求解达芬方程采用Scipy库的odeint函数,该函数是基于龙格-库塔算法编写的。
1.3 结果显示
达芬方程计算程序的结果显示功能是基于Python科学计算库Matplotlib完成的,通过读取ANSYS和Python的计算结果进行显示。
2 可视化界面设计
达芬方程计算程序的界面设计基于Python的第三方库—PyQt5,基于PyQt5的界面与逻辑分离方法,利用Qt Designer设计程序页面,主程序编写各控件的功能以及相互之间的信号传递函数等实现整个程序的开发,最终效果如图2和图3所示。
(1)达芬方程参数输入。参数输入采用Qt内置的Qline Edit本文输入框来接收,并添加了数据检测功能。(2)ANSYS计算。考虑到ANSYS计算达芬方程是一个瞬态非线性分析类型,计算步长会计算结果的收敛性和时长影响较大,程序能够根据用户输入的达芬方程参数给出一个范围供用户选择;为了能够合理地利用计算机资源,程序会基于Psutil库获取CPU的逻辑个数,给出范围供用户选择。这两个功能都调用QSlider滑动条类完成。(3)Python计算。这部分由一個QButton按钮类和QLabel标签类组成,当提交Python计算完成时,标签将会显示“计算完成”。(4)结果显示。在PyQt5中引入Matplotlib库实现对计算结果的查看。并采用QtableView表格类读取达芬方程的时域计算结果,并提供保存功能,可对结果进行更深入的分析与绘制图形。
3 实例分析
本节以具体数据为例,利用本程序计算达芬方程并根据结果描述非线性振动的一些特点。
受迫振动是指系统在周期性的外力作用下所发生的的振动。以表1所示的三组方程参数为例,说明达芬系统受迫振动的一些特点,计算受迫振动时需要一定的计算时长,可根据响应曲线大致判断响应的稳定性。
对于线性振动,受迫振动响应必然是与载荷相同频率的简谐运动。当系统本身和载荷参数确定后,系统的振动响应就已确定,响应幅A值与载荷频率呈现一一对应的关系。
系统2-1的计算结果如图4所示,可以看出当初始位移不同时,达芬方程受迫振动的幅值可能不同。即达芬系统的响应幅值与频率不再呈现一一对应关系,这是非线性振动的多稳定解现象。
系统2-2的计算结果如图4所示,可以看出当初始位移为1或3时(这两者的差异是由于初值不同造成的相位差导致),幅值不仅与初值为5不同,而且已经不再是简谐运动。
取初始位移等于1和5,进一步查看系统2-2稳态阶段的相平面图,如图5所示。从相平面图中可以看出初始位移为1时相轨迹已经从椭圆发生了畸变,这是非线性振动的谐波现象。
4 结论
(1)以非线性振动方程—达芬方程为研究对象,基于有限元程序ANSYS和编程语言Python编写了可视化计算程序。该程序能够快速的完成不同参数下达芬方程的求解与结果显示,降低了软件使用难度并提高分析效率。(2)介绍了基于Python语言对ANSYS二次开发的主要步骤,以及该程序的主要功能和结构。(3)以具体参数为例,说明非线性振动与线性振动的区别,包括初值影响、多稳定解和谐波运动。
参考文献
[1] 黄安基.非线性振动[M].成都:西南交通大学出版社,1993.
[2] 王海波.Duffing方程非线性振动特性的计算与分析[D].西安:西安建筑科技大学,2009.
[3] 许磊,陆明万,曹庆杰.Van der Pol-Duffing方程的非线性动力学分叉特性研究[J].应用力学学报,2002(4):130-133+168.
[4] 蔡敏.Python语言的Web开发应用分析[J].无线互联科技,2019,16(04):27-28.
[5] Pina-Martins F,Paulo O S.Ncbi mass sequence downloader–large dataset downloading made easy[J].SoftwareX,2016(5):80-83.
[6] 张立军,曾庆东,刘志平.机械工程中常见振动的相平面分析[J].机械设计与制造,2000(1):32-33.
[7] 姚建盛,李淑梅.Python在科学计算中的应用[J].数字技术与应用,2016(11):76.