寧廷州,劉洋凱
(1.棗莊學(xué)院 機(jī)電工程學(xué)院,山東 棗莊 277160; 2.廣州市交通技師學(xué)院 汽車工程系,廣東 廣州 510540)
軸是機(jī)器中的重要零件之一,主要用來支持旋轉(zhuǎn)的機(jī)械零件和傳遞扭矩[1]。隨著當(dāng)今機(jī)械制造業(yè)的不斷發(fā)展,軸作為機(jī)械產(chǎn)品中最常用的零件,應(yīng)用場合十分廣泛。但在實(shí)際的生產(chǎn)設(shè)計(jì)中,存在設(shè)計(jì)重復(fù)性高、誤差大、周期長等問題;而且目前傳統(tǒng)的手工設(shè)計(jì)也只能針對某個(gè)相應(yīng)設(shè)備的某個(gè)零件,對于相同型號、規(guī)格的零件,如果在尺寸方面有所改動,必須要再次設(shè)計(jì),從而浪費(fèi)了大量的資源[2]。
隨著現(xiàn)代科技的發(fā)展,研究人員開發(fā)了多種機(jī)械設(shè)計(jì)軟件。在SolidWorks 2016中,利用自身提供的可供研究人員進(jìn)行二次開發(fā)的參數(shù)化設(shè)計(jì)接口Application Program Interface(API),根據(jù)高級計(jì)算機(jī)編程語言 Visual Basic 6.0,對其進(jìn)行二次開發(fā),并實(shí)行參數(shù)化設(shè)計(jì),從而完成對設(shè)計(jì)系統(tǒng)的研發(fā)[3]。該系統(tǒng)擁有友好的操作界面和強(qiáng)大的建模功能,對于縮短軸開發(fā)所需的時(shí)間、提高軸的設(shè)計(jì)效率和質(zhì)量等具有重要意義。
SolidWorks 2016具有強(qiáng)大的三維建模功能,也為操作者提供了豐富的應(yīng)用程序編程接口(API)[4-6]。操作者通過調(diào)用這些API,可以將SolidWorks 2016中一些重復(fù)單調(diào)或者規(guī)則明確的操作使用程序語言描述,并通過簡單的人機(jī)交互,讓計(jì)算機(jī)來完成此類工作。通常能夠支持OLE和COM的編程語言(如Visual Basic 6.0、C++等)都可以成為SolidWorks 2016的二次開發(fā)工具[7]。
Visual Basic 6.0是一種可視化的、面向?qū)ο蟮母呒売?jì)算機(jī)編程語言[8-9]。利用Visual Basic 6.0對SolidWorks 2016進(jìn)行二次開發(fā)時(shí),不用編寫大量界面代碼,只需要根據(jù)具體設(shè)計(jì)要求,利用系統(tǒng)所提供的控件,在界面上放置對象控件,即可完成相應(yīng)的對象控件的屬性設(shè)置和程序編寫。
參數(shù)化建模方法如圖1所示,包括在SolidWorks 2016中建立實(shí)體模型圖,在方程式中獲取各變量,在Visual Basic 6.0的參數(shù)化界面中添加窗體、編寫程序并調(diào)試等,最后創(chuàng)建一套軸的參數(shù)化建模程序[10]。
用戶進(jìn)入軸的參數(shù)化建模程序可快速設(shè)計(jì)交互式系統(tǒng)界面,并按照所需要求,輸入相應(yīng)參數(shù)數(shù)據(jù)即可對模型進(jìn)行整體建模,最終輸出零件的三維模型。
圖1 參數(shù)化建模方法Fig.1 Parametric modeling method
根據(jù)軸的結(jié)構(gòu)形狀,軸可分為光軸、階梯軸和曲軸等。現(xiàn)根據(jù)軸的參數(shù)化建模方法分別對光軸、階梯軸和曲軸的建模進(jìn)行闡述。
圖2為所建光軸的實(shí)體模型。首先進(jìn)入草圖,選擇前視基準(zhǔn)面并正視,用圓命令作出軸的圓表面并進(jìn)行尺寸約束;然后選擇特征中的拉伸凸臺/基體拉伸模塊輸入軸的長度;最后利用特征中的圓角命令選擇倒角,分別選擇各邊線對兩端進(jìn)行倒角設(shè)計(jì),從而完成對光軸模型的建立。
圖2 光軸的實(shí)體模型Fig.2 Entity modeling of optical shaft
在光軸模型的建立過程中,工具中的方程式會保存對所做步驟的記錄,并將所建模型保存于C:Users聯(lián)想Desktop論文程序光軸。
通過SolidWorks所提供的API函數(shù),根據(jù)菜單欄選項(xiàng)里工具中的方程式(圖3)對光軸進(jìn)行程序編寫。
圖3 光軸的方程式Fig.3 Equations of optical shaft
啟動Visual Basic 6.0,根據(jù)圖3方程式編寫生成光軸的程序代碼,具體如下:
Private Sub Command1_Click()
Dim swApp As Object′ 定義Solidworks對象的變量
Dim Part As Object′ 定義ModelDoc對象的變量
Dim strfilename As String′ 定義路徑變量
Dim longstatus As Long′ 定義狀態(tài)變量的數(shù)值
Dim d As Double
Dim h As Double′ 定義數(shù)值類型
If Dir(strfilename) = "" Then
MsgBox ("文件不存在, 請檢查:"& vbCrLf & strfilename)
Set swApp = CreateObject(SldWorks.Application)′ 激活Solidworks
Exit Sub
End If
strfilename = "C:Users聯(lián)想Desktop論文程序光軸.SLDPRT"
Set swApp = CreateObject("SldWorks.Application")
swApp.Visible = True
Set Part = swApp.OpenDoc4(strfilename, 1, 0, "", longstatus)
Set Part = swApp.ActivateDoc("光軸")′ 打開光軸零件文件
d = Text1.Text
l = Text2.Text
c = Text3.Text
a = Text4.Text′ 定義各文本框
Part.Parameter("D1@草圖1@光軸.SLDPRT").systemValue = d / 1000′ 光軸直徑定義
Part.Parameter("D1@凸臺-拉伸1@光軸.SLDPRT").systemValue = l / 1000′ 光軸長度尺寸定義
Part.Parameter("D1@倒角1@光軸.SLDPRT").systemValue = c / 1000′ 光軸左端倒角寬度尺寸定義
Part.Parameter("D1@倒角2@光軸.SLDPRT").systemValue = c / 1000′ 光軸右端倒角寬度尺寸定義
Part.Parameter("D2@倒角1@光軸.SLDPRT").systemValue = a * 3.141592653 / 180′ 光軸左端倒角角度定義
Part.Parameter("D2@倒角2@光軸.SLDPRT").systemValue = a * 3.141592653 / 180′ 光軸右端倒角角度定義
Part.EditRebuild′ 更新文件
Set Part = Nothing′ 釋放Part變量指針
Set swApp = Nothing′ 釋放swApp變量指針
End Sub
根據(jù)光軸的程序代碼,建得圖4所示的光軸參數(shù)建模窗口,并將所做程序保存于C:Users聯(lián)想Desktop論文程序。圖4中光軸的幾何參數(shù)分別設(shè)置為直徑d、長度l、倒角寬度(左右兩端)c和倒角角度a(左右兩端)。
圖4 光軸參數(shù)化建模窗口Fig.4 Parametric modeling window of optical shaft
啟動Visual Basic 6.0打開已保存好的光軸程序,點(diǎn)擊光軸進(jìn)入?yún)?shù)化建模界面;在窗口中輸入光軸的各參數(shù)值(圖5),點(diǎn)擊生成,即可在SolidWorks 2016中獲得所建模型(圖6)。
圖5 光軸參數(shù)化數(shù)據(jù)輸入實(shí)例Fig.5 An date input example of optical shaft
圖6 參數(shù)化后的光軸模型Fig.6 Parametric optical shaft model
圖7為所建階梯軸的實(shí)體模型。
圖7 階梯軸的實(shí)體模型Fig.7 Entity modeling of stepped shaft
通過SolidWorks所提供的API函數(shù),根據(jù)菜單欄選項(xiàng)里工具中的方程式(圖8)對階梯軸進(jìn)行程序編制。
啟動Visual Basic 6.0,根據(jù)圖8方程式編寫生成階梯軸的程序代碼,其中核心代碼如下:
Part.Parameter("D1@草圖1@階梯軸.SLDPRT").systemValue = d1 / 1000′ 軸頸1直徑定義
圖8 階梯軸的方程式Fig.8 Equations of stepped shaft
Part.Parameter("D1@凸臺-拉伸1@階梯軸.SLDPRT").systemValue = l1 / 1000′ 軸頸1長度定義
Part.Parameter("D1@草圖2@階梯軸.SLDPRT").systemValue = d2 / 1000′ 軸段1直徑定義
Part.Parameter("D1@凸臺-拉伸2@階梯軸.SLDPRT").systemValue = l2 / 1000′ 軸段1長度定義
Part.Parameter("D1@草圖3@階梯軸.SLDPRT").systemValue = d3 / 1000′ 軸段2直徑定義
Part.Parameter("D1@凸臺-拉伸3@階梯軸.SLDPRT").systemValue = l3 / 1000′ 軸段2長度定義
Part.Parameter("D1@草圖4@階梯軸.SLDPRT").systemValue = d4 / 1000′ 軸頭1直徑定義
Part.Parameter("D1@凸臺-拉伸4@階梯軸.SLDPRT").systemValue = l4 / 1000′ 軸頭1長度定義
Part.Parameter("D1@草圖5@階梯軸.SLDPRT").systemValue = d5 / 1000′ 軸頸2直徑定義
Part.Parameter("D1@凸臺-拉伸5@階梯軸.SLDPRT").systemValue = l5 / 1000′ 軸頸2長度定義
Part.Parameter("D1@草圖6@階梯軸.SLDPRT").systemValue = d6 / 1000′軸身直徑定義
Part.Parameter("D1@凸臺-拉伸6@階梯軸.SLDPRT").systemValue = l6 / 1000′ 軸身長度定義
Part.Parameter("D1@草圖7@階梯軸.SLDPRT").systemValue = d7 / 1000′ 軸頭2直徑定義
Part.Parameter("D1@凸臺-拉伸7@階梯軸.SLDPRT").systemValue = l7 / 1000′軸頭2長度定義
Part.Parameter("D1@倒角1@階梯軸.SLDPRT").systemValue = c1 / 1000′ 軸頸1倒角寬度定義
Part.Parameter("D2@倒角1@階梯軸.SLDPRT").systemValue = a1 * 3.141592653 / 180′ 軸頸1倒角角度定義
Part.Parameter("D1@倒角2@階梯軸.SLDPRT").systemValue = c2 / 1000′ 軸頭2倒角寬度定義
Part.Parameter("D2@倒角2@階梯軸.SLDPRT").systemValue = a2 * 3.141592653 / 180′ 軸頭2倒角角度定義
Part.Parameter("D1@基準(zhǔn)面1@階梯軸.SLDPRT").systemValue = d4 / 2000
Part.Parameter("D1@草圖8@階梯軸.SLDPRT").systemValue = (l2 + l3) / 1000 + (l4 - m1) / 2000 + b1 / 2000′ 軸頭1鍵槽左側(cè)圓心位置定義
Part.Parameter("D2@草圖8@階梯軸.SLDPRT").systemValue = b1 / 1000′ 軸頭1鍵槽寬度定義
Part.Parameter("D4@草圖8@階梯軸.SLDPRT").systemValue = b1 / 1000′ 同上
Part.Parameter("D3@草圖8@階梯軸.SLDPRT").systemValue = (m1 - b1) / 1000′ 軸頭1鍵槽兩圓心間距離定義
Part.Parameter("D1@切除-拉伸1@階梯軸.SLDPRT").systemValue =h1/ 1000′ 軸頭1鍵槽深度定義
Part.Parameter("D1@基準(zhǔn)面2@階梯軸.SLDPRT").systemValue = d7/ 2000
Part.Parameter("D1@草圖9@階梯軸.SLDPRT").systemValue = (l2 + l3 + l4 + l5 + l6) / 1000 + (l7 - m2 - c2) / 2000 + b2 / 2000′ 軸頭2鍵槽左側(cè)圓心位置定義
Part.Parameter("D2@草圖9@階梯軸.SLDPRT").systemValue = b2 / 1000′ 軸頭2鍵槽寬度定義
Part.Parameter("D4@草圖9@階梯軸.SLDPRT").systemValue = b2 / 1000′ 同上
Part.Parameter("D3@草圖9@階梯軸.SLDPRT").systemValue = (m2 - b2) / 1000′ 軸頭2鍵槽兩圓心間距離定義
Part.Parameter("D1@切除-拉伸2@階梯軸.SLDPRT").systemValue =h2/ 1000′ 軸頭2鍵槽深度定義
根據(jù)階梯軸的程序代碼,最終可得階梯軸的參數(shù)化建模窗口,如圖9所示。
啟動Visual Basic 6.0打開已保存好的階梯軸程序,點(diǎn)擊階梯軸進(jìn)入?yún)?shù)化建模界面;在窗口中輸入各軸段數(shù)值,點(diǎn)擊生成,即可在SolidWorks 2016中獲得所建模型(圖10)。
圖9 階梯軸參數(shù)化建模窗口Fig.9 Parametric modeling window of stepped shaft
圖11為所建曲軸的實(shí)體模型。
通過SolidWorks所提供的API函數(shù),根據(jù)菜單欄選項(xiàng)里工具中的方程式(圖12)對曲軸進(jìn)行程序編制。
啟動Visual Basic 6.0,根據(jù)圖12方程式編寫生成曲軸的程序代碼,其中核心代碼如下:
Part.Parameter("D1@草圖5@曲軸.SLDPRT").systemValue = d5 / 1000′ 凸臺1直徑尺寸定義
圖10 參數(shù)化后的階梯軸模型Fig.10 Parametric stepped shaft model
圖11 曲軸的實(shí)體模型Fig.11 Entity modeling of crankshaft
圖12 曲軸的方程式Fig.12 Equations of crankshaft
Part.Parameter("D1@凸臺-拉伸4@曲軸.SLDPRT").systemValue = l4 / 1000′ 凸臺1拉伸長度尺寸定義
Part.Parameter("D1@草圖4@曲軸.SLDPRT").systemValue = d4 / 1000′ 凸臺2直徑尺寸定義
Part.Parameter("D1@凸臺-拉伸3@曲軸.SLDPRT").systemValue = l3 / 1000′ 凸臺2拉伸長度尺寸定義
Part.Parameter("D1@草圖3@曲軸.SLDPRT").systemValue = d3 / 1000′ 凸臺3直徑尺寸定義
Part.Parameter("D1@凸臺-拉伸2@曲軸.SLDPRT").systemValue = l2 / 1000′ 凸臺3拉伸長度尺寸定義
Part.Parameter("D1@草圖1@曲軸.SLDPRT").systemValue = d1 / 1000′ 凸臺4上直徑尺寸定義
Part.Parameter("D3@草圖1@曲軸.SLDPRT").systemValue = d2 / 1000′ 凸臺4下直徑尺寸定義
Part.Parameter("D2@草圖1@曲軸.SLDPRT").systemValue = m / 1000′ 凸臺4圓心間距離尺寸定義
Part.Parameter("D1@凸臺-拉伸1@曲軸.SLDPRT").systemValue = l1 / 1000′ 凸臺4拉伸長度尺寸定義
Part.Parameter("D1@草圖6@曲軸.SLDPRT").systemValue = m / 1000′ 凸臺5位置約束
Part.Parameter("D2@草圖6@曲軸.SLDPRT").systemValue = d6 / 1000′ 凸臺5直徑尺寸定義
Part.Parameter("D1@凸臺-拉伸5@曲軸.SLDPRT").systemValue = l5 / 1000′ 凸臺5拉伸長度尺寸定義
Part.Parameter("D1@草圖7@曲軸.SLDPRT").systemValue = d7 / 1000′ 凸臺6直徑尺寸定義
Part.Parameter("D1@凸臺-拉伸6@曲軸.SLDPRT").systemValue = l6 / 1000′ 凸臺6拉伸長度尺寸定義
Part.Parameter("D1@基準(zhǔn)面2@曲軸.SLDPRT").systemValue = l6 / 2000′ 定義基準(zhǔn)面的位置,以鏡向凸臺5,4,3
Part.Parameter("D1@基準(zhǔn)面3@曲軸.SLDPRT").systemValue = l7 / 1000′ 凸臺7長度尺寸的定義
Part.Parameter("D1@草圖9@曲軸.SLDPRT").systemValue = d8 / 1000′ 凸臺7右端圓直徑尺寸的定義
Part.Parameter("D3@凸臺-拉伸7@曲軸.SLDPRT").systemValue = a * 3.141592653 / 180′ 凸臺7拔模角度的定義
Part.Parameter("D1@草圖10@曲軸.SLDPRT").systemValue = d9 / 1000′ 凸臺8直徑尺寸定義
Part.Parameter("D1@凸臺-拉伸8@曲軸.SLDPRT").systemValue = l8 / 1000′ 凸臺8拉伸長度尺寸定義
根據(jù)曲軸的程序代碼,最終得到曲軸的參數(shù)化建模窗口,如圖13所示。
圖13 曲軸參數(shù)化建模窗口Fig.13 Parametric modeling window of crankshaft
啟動Visual Basic 6.0打開已保存好的曲軸程序,點(diǎn)擊曲軸進(jìn)入?yún)?shù)化建模界面;在窗口中輸入各段凸臺數(shù)值,點(diǎn)擊生成,即可在SolidWorks 2016中獲得所建模型(圖14)。
啟動Visual Basic 6.0,新建一個(gè)軸的參數(shù)化建模窗口,如圖15所示;在窗體中添加所需的文本框及控件,并在窗體中添加新的窗體,分別為光軸、階梯軸、曲軸的參數(shù)化建模窗口;在生成按鈕中輸入各生成零件相應(yīng)的調(diào)用程序及對變量定義的程序,完成后保存。
圖14 參數(shù)化后的曲軸模型Fig.14 Parametric crankshaft model
在圖15窗體中點(diǎn)擊三個(gè)軸的按鈕會出現(xiàn)該軸對應(yīng)的參數(shù)化建模窗口,其程序代碼分別為:光軸的參數(shù)化建模窗口.Show,階梯軸的參數(shù)化建模窗口.Show,曲軸的參數(shù)化建模窗口.Show。
根據(jù)軸的設(shè)計(jì)尺寸和結(jié)構(gòu)形狀等,基于目前主流的三維軟件SolidWorks 2016,結(jié)合高級計(jì)算機(jī)編程語言 Visual Basic 6.0,分別對光軸、階梯軸和曲軸的參數(shù)化建模方法進(jìn)行研究,實(shí)現(xiàn)了在SolidWorks 2016中各類型軸的自動建?;蚋?,有效地提高了各類型軸的設(shè)計(jì)效率。