盛慶軻 梁海琴
摘要:達(dá)芬方程作為典型的非線性振動(dòng)方程,可以直觀地用來(lái)說(shuō)明與線性振動(dòng)的區(qū)別。分別采用有限元程序ANSYS和編程語(yǔ)言Python對(duì)達(dá)芬方程進(jìn)行求解。針對(duì)ANSYS界面操作效率低、數(shù)據(jù)后處理能力不足等問(wèn)題。以PyQt5為平臺(tái),封裝ANSYS和Python的求解以及數(shù)據(jù)處理過(guò)程,并制定可視化操作界面。程序包含達(dá)芬方程參數(shù)輸入、ANSYS計(jì)算、Python計(jì)算和數(shù)據(jù)后處理四個(gè)功能。以多組系統(tǒng)參數(shù)為例,使用該程序計(jì)算達(dá)芬方程,計(jì)算結(jié)果表現(xiàn)了非線性振動(dòng)中初值影響、多穩(wěn)態(tài)解和諧波響應(yīng)運(yùn)動(dòng)特性。
關(guān)鍵詞:達(dá)芬方程;非線性振動(dòng);有限元;可視化設(shè)計(jì)
中圖分類號(hào):TP391.9 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2020)08-0076-04
0 引言
機(jī)載設(shè)備往往由多個(gè)零部件構(gòu)成,隨著科學(xué)技術(shù)的迅速發(fā)展,零件自身的復(fù)雜性和連接關(guān)系也趨于復(fù)雜。目前對(duì)于機(jī)載設(shè)備的振動(dòng)強(qiáng)度主要采用有限元軟件進(jìn)行計(jì)算校核,然而有限元的振動(dòng)計(jì)算是基于小變形線性理論。當(dāng)結(jié)構(gòu)簡(jiǎn)單、振幅較小、連接關(guān)系變化不大時(shí),按線性理論是計(jì)算可以得到較為滿意的結(jié)果[1]。
一切力學(xué)問(wèn)題在本質(zhì)上都屬于非線性問(wèn)題。對(duì)于非線性系統(tǒng),響應(yīng)和輸出之間并不是線性關(guān)系,按照線性理論計(jì)算得到的結(jié)果精度可能不足,甚至導(dǎo)致本質(zhì)上的錯(cuò)誤。非線性振動(dòng)會(huì)出現(xiàn)幅頻曲線彎曲、諧波、分岔混沌共振等線性振動(dòng)不存在的現(xiàn)象[2]。在非線性振動(dòng)振動(dòng)理論研究中,具有代表性的方程有達(dá)芬方程、Van-der-Pol方程等[3]。
達(dá)芬方程對(duì)應(yīng)的動(dòng)力學(xué)表達(dá)式如式(1)所示,也稱為達(dá)芬系統(tǒng),其中剛度包含立方項(xiàng)。
(1)
其中:x代表位移,m代表質(zhì)量,c代表阻尼,k1代表線性剛度,k2代表非線性剛度,f(t)代表外載荷。
ANSYS的腳本語(yǔ)言APDL能夠?qū)崿F(xiàn)有限元模型的參數(shù)化建模計(jì)算功能,但其可視化程度較低,一般基于其他編程語(yǔ)言對(duì)其進(jìn)行二次界面開(kāi)發(fā)。Python是一種面向?qū)ο蟮膭?dòng)態(tài)解釋型語(yǔ)言,應(yīng)用領(lǐng)域廣泛[4]。Qt是由C++語(yǔ)言編寫的跨平臺(tái)GUI庫(kù),PyQt5則是將Python語(yǔ)言與Qt融合,具有Python開(kāi)發(fā)效率高的特點(diǎn)[5]。
本文以PyQt5為平臺(tái),基于Python對(duì)ANSYS求解達(dá)芬方程的過(guò)程進(jìn)行封裝并設(shè)計(jì)可視化操作程序,同時(shí)加入了基于Python科學(xué)計(jì)算庫(kù)的達(dá)芬方程計(jì)算和結(jié)果顯示功能。
1 計(jì)算程序的功能設(shè)計(jì)
達(dá)芬方程計(jì)算程序主要包含四個(gè)功能,分別是參數(shù)輸入、提交ANSYS計(jì)算、提交Python計(jì)算和結(jié)果顯示模塊。由于Python語(yǔ)言自身的特點(diǎn),許多功能的實(shí)現(xiàn)需要引用Python標(biāo)準(zhǔn)庫(kù)和第三方庫(kù)。程序的總體設(shè)計(jì)框圖如圖1所示。
(1)參數(shù)輸入包括質(zhì)量系數(shù)、阻尼系數(shù)、剛度線性系數(shù)和立方項(xiàng)系數(shù)、載荷幅值和頻率、初始位移和速度、求解時(shí)間和步長(zhǎng)。(2)提交ANSYS計(jì)算前提是用戶電腦需要裝有ANSYS軟件,然后設(shè)置ANSYS.exe的啟動(dòng)位置、工作目錄和APDL文件名即可,程序會(huì)在指定目錄下生成文件并且調(diào)用ANSYS主程序進(jìn)行求解。(3)提交Python計(jì)算只需前面的參數(shù)輸入完畢后,利用Python科學(xué)計(jì)算庫(kù)求解即可。(4)對(duì)于非線性微分方程,一般很難找到精確的解析解,大都是從定性和定量?jī)蓚€(gè)方向來(lái)研究。相平面法[6]是常用的定性方法之一,它是描述系統(tǒng)速度與位移的對(duì)應(yīng)關(guān)系,可以直接判斷方程解的平衡性、周期性和穩(wěn)定性等。
1.1 基于Python實(shí)現(xiàn)ANSYS二次開(kāi)發(fā)
利用Python對(duì)ANSYS二次開(kāi)發(fā)的主要過(guò)程分為提取界面輸出參數(shù)及相關(guān)信息、生成指定參數(shù)下的APDL文件和提交ANSYS計(jì)算。
1.1.1 APDL命令流文件的生成
在APDL建模命令流之前引入相關(guān)的參數(shù)化變量,然后對(duì)該字符串進(jìn)行正確的格式化,即可得到特定輸入下特定的ADPL文件。
本文編寫的APDL腳本程序主要采用質(zhì)量單元mass21和非線性彈簧單元combin39,分析類型為瞬態(tài)非線性,根據(jù)初始條件中的位移和速度是否為0,生成不同的APDL命令流以模擬相應(yīng)的初始條件。
1.1.2 Python調(diào)用ANSYS程序
首先在計(jì)算程序設(shè)置APDL文件的存儲(chǔ)位置和文件名稱,程序即可在指定目錄下生成2.1中描述的APDL文件,主要代碼如下所示:
file = str #獲取存儲(chǔ)位置的絕對(duì)路徑
with open (file,) as f:? #打開(kāi)文件
f.write(s)? #寫入2.1中的字符串
接下來(lái)需要設(shè)置啟動(dòng)ANSYS.exe的路徑,依次生成執(zhí)行批處理的Python文件。在Python中采用OS標(biāo)準(zhǔn)庫(kù)完成系統(tǒng)操作,并且依據(jù)OS庫(kù)執(zhí)行的接口可以實(shí)現(xiàn)跨平臺(tái)訪問(wèn)。生成批處理文件的代碼如下所示:
最后再利用os.system命令運(yùn)行上述的批處理文件,即可完成Python對(duì)ANSYS的調(diào)用計(jì)算。
1.2 提交Python計(jì)算
當(dāng)達(dá)芬方程的系統(tǒng)參數(shù)和求解參數(shù)輸入完成后,即可提交Python進(jìn)行求解。整個(gè)過(guò)程基于Python的科學(xué)計(jì)算庫(kù)[7]Numpy和Scipy,求解達(dá)芬方程采用Scipy庫(kù)的odeint函數(shù),該函數(shù)是基于龍格-庫(kù)塔算法編寫的。
1.3 結(jié)果顯示
達(dá)芬方程計(jì)算程序的結(jié)果顯示功能是基于Python科學(xué)計(jì)算庫(kù)Matplotlib完成的,通過(guò)讀取ANSYS和Python的計(jì)算結(jié)果進(jìn)行顯示。
2 可視化界面設(shè)計(jì)
達(dá)芬方程計(jì)算程序的界面設(shè)計(jì)基于Python的第三方庫(kù)—PyQt5,基于PyQt5的界面與邏輯分離方法,利用Qt Designer設(shè)計(jì)程序頁(yè)面,主程序編寫各控件的功能以及相互之間的信號(hào)傳遞函數(shù)等實(shí)現(xiàn)整個(gè)程序的開(kāi)發(fā),最終效果如圖2和圖3所示。
(1)達(dá)芬方程參數(shù)輸入。參數(shù)輸入采用Qt內(nèi)置的Qline Edit本文輸入框來(lái)接收,并添加了數(shù)據(jù)檢測(cè)功能。(2)ANSYS計(jì)算。考慮到ANSYS計(jì)算達(dá)芬方程是一個(gè)瞬態(tài)非線性分析類型,計(jì)算步長(zhǎng)會(huì)計(jì)算結(jié)果的收斂性和時(shí)長(zhǎng)影響較大,程序能夠根據(jù)用戶輸入的達(dá)芬方程參數(shù)給出一個(gè)范圍供用戶選擇;為了能夠合理地利用計(jì)算機(jī)資源,程序會(huì)基于Psutil庫(kù)獲取CPU的邏輯個(gè)數(shù),給出范圍供用戶選擇。這兩個(gè)功能都調(diào)用QSlider滑動(dòng)條類完成。(3)Python計(jì)算。這部分由一個(gè)QButton按鈕類和QLabel標(biāo)簽類組成,當(dāng)提交Python計(jì)算完成時(shí),標(biāo)簽將會(huì)顯示“計(jì)算完成”。(4)結(jié)果顯示。在PyQt5中引入Matplotlib庫(kù)實(shí)現(xiàn)對(duì)計(jì)算結(jié)果的查看。并采用QtableView表格類讀取達(dá)芬方程的時(shí)域計(jì)算結(jié)果,并提供保存功能,可對(duì)結(jié)果進(jìn)行更深入的分析與繪制圖形。
3 實(shí)例分析
本節(jié)以具體數(shù)據(jù)為例,利用本程序計(jì)算達(dá)芬方程并根據(jù)結(jié)果描述非線性振動(dòng)的一些特點(diǎn)。
受迫振動(dòng)是指系統(tǒng)在周期性的外力作用下所發(fā)生的的振動(dòng)。以表1所示的三組方程參數(shù)為例,說(shuō)明達(dá)芬系統(tǒng)受迫振動(dòng)的一些特點(diǎn),計(jì)算受迫振動(dòng)時(shí)需要一定的計(jì)算時(shí)長(zhǎng),可根據(jù)響應(yīng)曲線大致判斷響應(yīng)的穩(wěn)定性。
對(duì)于線性振動(dòng),受迫振動(dòng)響應(yīng)必然是與載荷相同頻率的簡(jiǎn)諧運(yùn)動(dòng)。當(dāng)系統(tǒng)本身和載荷參數(shù)確定后,系統(tǒng)的振動(dòng)響應(yīng)就已確定,響應(yīng)幅A值與載荷頻率呈現(xiàn)一一對(duì)應(yīng)的關(guān)系。
系統(tǒng)2-1的計(jì)算結(jié)果如圖4所示,可以看出當(dāng)初始位移不同時(shí),達(dá)芬方程受迫振動(dòng)的幅值可能不同。即達(dá)芬系統(tǒng)的響應(yīng)幅值與頻率不再呈現(xiàn)一一對(duì)應(yīng)關(guān)系,這是非線性振動(dòng)的多穩(wěn)定解現(xiàn)象。
系統(tǒng)2-2的計(jì)算結(jié)果如圖4所示,可以看出當(dāng)初始位移為1或3時(shí)(這兩者的差異是由于初值不同造成的相位差導(dǎo)致),幅值不僅與初值為5不同,而且已經(jīng)不再是簡(jiǎn)諧運(yùn)動(dòng)。
取初始位移等于1和5,進(jìn)一步查看系統(tǒng)2-2穩(wěn)態(tài)階段的相平面圖,如圖5所示。從相平面圖中可以看出初始位移為1時(shí)相軌跡已經(jīng)從橢圓發(fā)生了畸變,這是非線性振動(dòng)的諧波現(xiàn)象。
4 結(jié)論
(1)以非線性振動(dòng)方程—達(dá)芬方程為研究對(duì)象,基于有限元程序ANSYS和編程語(yǔ)言Python編寫了可視化計(jì)算程序。該程序能夠快速的完成不同參數(shù)下達(dá)芬方程的求解與結(jié)果顯示,降低了軟件使用難度并提高分析效率。(2)介紹了基于Python語(yǔ)言對(duì)ANSYS二次開(kāi)發(fā)的主要步驟,以及該程序的主要功能和結(jié)構(gòu)。(3)以具體參數(shù)為例,說(shuō)明非線性振動(dòng)與線性振動(dòng)的區(qū)別,包括初值影響、多穩(wěn)定解和諧波運(yùn)動(dòng)。
參考文獻(xiàn)
[1] 黃安基.非線性振動(dòng)[M].成都:西南交通大學(xué)出版社,1993.
[2] 王海波.Duffing方程非線性振動(dòng)特性的計(jì)算與分析[D].西安:西安建筑科技大學(xué),2009.
[3] 許磊,陸明萬(wàn),曹慶杰.Van der Pol-Duffing方程的非線性動(dòng)力學(xué)分叉特性研究[J].應(yīng)用力學(xué)學(xué)報(bào),2002(4):130-133+168.
[4] 蔡敏.Python語(yǔ)言的Web開(kāi)發(fā)應(yīng)用分析[J].無(wú)線互聯(lián)科技,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ī)械工程中常見(jiàn)振動(dòng)的相平面分析[J].機(jī)械設(shè)計(jì)與制造,2000(1):32-33.
[7] 姚建盛,李淑梅.Python在科學(xué)計(jì)算中的應(yīng)用[J].數(shù)字技術(shù)與應(yīng)用,2016(11):76.