李冰 郭獻禮 張林多 賈文聰
摘 要 爬梯是工業(yè)場景中使用率很高的部件,本文基于SolidWorks VBA開發(fā)方法針對爬梯進行快速二次開發(fā),實現(xiàn)爬梯部件的參數(shù)化建模,用戶通過輸入爬梯高度和傾角等參數(shù)即可快速生成對應(yīng)的爬梯模型,可以極大地提高設(shè)計效率和設(shè)計質(zhì)量。此外,本文展示了通過SolidWorks API實現(xiàn)參數(shù)化建模的主要代碼,具有一定的參考價值。
關(guān)鍵詞 SolidWorks VBA 二次開發(fā) 爬梯
中圖分類號:TP391文獻標識碼:A
0引言
三維模型展示效果更加直觀,具有二維圖紙無法比擬的優(yōu)越性,更有助于提高產(chǎn)品布局的合理性以及方便檢查產(chǎn)品細節(jié)是否存在干涉,大大提高了設(shè)計的準確性;而且目前市面上絕大部分的三維設(shè)計軟件都能夠?qū)崿F(xiàn)模型與對應(yīng)圖紙的聯(lián)動,從而節(jié)省了大量修改圖紙的時間,提高了設(shè)計效率。由此可見,三維設(shè)計是未來設(shè)計發(fā)展的必然趨勢。
SolidWorks作為一款主流三維機械設(shè)計軟件,其靈活而強大的建模和圖形渲染功能能夠滿足不同層次設(shè)計人士的需求,但對于一些差異不大使用率卻較高的部件,傳統(tǒng)的手工交互式建模方式仍然顯得繁瑣,屬于重復(fù)勞動,而定制化的開發(fā)則可以改善這種狀況,將設(shè)計人員從這種大量的重復(fù)勞動中解放出來,可以利用更多時間進行更有價值更有意義的工作,進而極大地提高設(shè)計效率和設(shè)計質(zhì)量。SolidWorks除了具備參數(shù)化驅(qū)動的建模功能以外,還提供了豐富的可供二次開發(fā)的API(Application Programming Interface)接口,可以使用VBA、Visual Basic、Visual C#和Visual C++等開發(fā)工具方便地進行二次開發(fā),用戶在SolidWorks界面上所作的操作均可以通過API編程實現(xiàn)自動化。其中,采用VBA編程的優(yōu)點是無需安裝外部的開發(fā)環(huán)境,可以直接在SolidWorks中通過錄制和編輯宏進行二次開發(fā),而且相比其他開發(fā)語言,VBA對代碼的修改量最少,可讀性強,易于編寫和后期的維護。爬梯在工業(yè)場景中的使用頻率較高,又非完全意義上的標準件,重復(fù)建模繁瑣耗時,但可參數(shù)化性強,本文采用VBA編程方式進行爬梯模型的二次開發(fā)。
1本文用到的API接口介紹
本文在爬梯開發(fā)過程中主要用到了插入草圖直線、移動草圖,選擇實體、生成鈑金件、線性陣列實體等5個接口函數(shù),下面分別簡單介紹其功能,詳細用法可以參閱SolidWorks API幫助:
(1)插入草圖直線:SketchManager:CreateLine(Double X1, Double Y1, Double Z1, Double X2, Double Y2, Double Z2)。該函數(shù)用于在當前2D或3D草圖中繪制直線,括號中參數(shù)為要繪制直線的起點和終點坐標;
(2)移動指定草圖:ModelDocExtension::MoveOrCopy Boolean Copy, Integer NumCopies, Boolean KeepRelations, Double BaseX, Double BaseY, Double BaseZ, Double DestX, Double DestY, Double DestZ。該函數(shù)用于移動并且選擇性地復(fù)制選中的草圖實體,參數(shù)為一些選項開關(guān)和起點終點坐標;
(3)選擇實體:ModelDocExtension::SelectByID2(String Name, Type, Double X, Double Y, Double Z, Boolean Append, Integer Mark, Callout Callout, Integer Selec-tOption)。該函數(shù)用于選擇指定實體,選擇實體的類型包括基準面、參考平面、坐標軸、草圖,實體點、實體線、實體面、實體特征、注釋等;
(4)生成鈑金件:FeatureManager::InsertSheetMetalBaseFlange2 (Double Thickness, Boolean ThickenDir, Double Radius, Double ExtrudeDist1, Double Ex-turdeDist2, Boolean FlipExtruDir, Integer EndCondition1, Integer EndCondition2, Integer DirToUse, CustomBendAllowance PCBA, Boolean UseDefaultRelief, Integer ReliefType, Double ReliefWidth, Double ReliefDepth, Double ReliefRatio, Boolean UseReliefRatio, Boolean Merge, Boolean UseFeatScope, Boolean UseAutoSelect)。該函數(shù)基于法蘭特征生成鈑金件,括號中為一些鈑金參數(shù),如鈑金厚度、彎折半徑等;
(5)線性陣列實體:FeatureManager::FeatureLinearPattern5(Integer Num1, Double Spacing1, Integer Num2, Double Spacing2, Boolean FllipDir1, Boolean FlipDir2, String DName1, String DName2, Boolean GeometryPattern, Boolean Var-yInstance, Boolean HasOffset1, Boolean HasOffset2, Boolean CtrlByNum1, Boolean CtrlByNum2, Boolean FromCentroid1, Boolean FromCentroid2, Boolean RevOffset1, Boolean RevOffset2, Double Offset1, Double Offset2, Boolean D2PatternSeedOnly, Boolean SyncSubAssemblies)。該函數(shù)用于線性陣列特征,括號中主要包括陣列個數(shù)、陣列間距和陣列方向等參數(shù)。
2程序的開發(fā)及運行
2.1程序界面設(shè)計
進入SolidWorks,新建空白零件,即可通過“工具——宏——新建”新建VBA宏程序,用戶可以通過工具箱在新建的用戶窗口中添加標簽、文本框和按鈕等控件,以滿足需要的功能。這里主要設(shè)置了爬梯高度、爬梯傾角、臺階長度、臺階深度、臺階高度等參數(shù),用戶可以根據(jù)設(shè)計需要將上述設(shè)計參數(shù)的數(shù)值輸入對應(yīng)的文本框,點擊“生成”按鈕則程序根據(jù)用戶輸入的設(shè)計參數(shù)值生成爬梯模型,點擊“退出”按鈕則退出當前程序窗口。
設(shè)計完成的生成爬梯程序窗口如圖1,窗口包含一個框架控件,5個標簽控件,5個文本框控件和兩個按鈕控件:
2.2程錄制和編輯宏
SolidWorks API函數(shù)調(diào)用包含的參數(shù)通常較多,例如“拉伸凸臺/基體”函數(shù)FeatureManager::FeatureExtrusion3,它共有23個參數(shù),而在為SolidWorks開發(fā)應(yīng)用程序時,只有API的每個參數(shù)都滿足條件,代碼才能夠正確執(zhí)行,所以通過錄制和編輯宏是一個很好的快速進行SolidWorks二次開發(fā)的方法,而且通過預(yù)先計劃,多次錄制的方式可以實現(xiàn)較為復(fù)雜程序的二次開發(fā)。
這里將爬梯模型的錄制過程分為以下6個步驟:
(1)創(chuàng)建平行四邊形草圖1,確定爬梯的高度和傾角;
(2)創(chuàng)建臺階草圖2,確定爬梯臺階長、寬等參數(shù);
(3)根據(jù)草圖2生成最底部鈑金臺階;
(4)陣列生成鈑金臺階;
(5)根據(jù)草圖1生成臺階一側(cè)鈑金側(cè)板;
(6)陣列生成另一側(cè)鈑金側(cè)板,模型完成。
錄制完成后,先對每一段宏命令進行必要的編輯,例如刪除變換視圖的代碼,添加自定義參數(shù)的聲明并將其代入特征函數(shù)以及添加控件動作等,然后將修改后的宏命令統(tǒng)一整理,經(jīng)過調(diào)試,最終形成一段功能完整的宏命令。
2.3主要功能代碼展示
本文針對爬梯模型的VBA二次開發(fā)程序主要實現(xiàn)的是以下幾點功能:
(1)定義爬梯參數(shù)的數(shù)據(jù)類型并從文本框控件獲取參數(shù)數(shù)值,代碼如下(單引號表示本行為注釋內(nèi)容,下同):
'定義爬梯高度Hi和傾角An,兩者均為Double Precision數(shù)據(jù)類型
Dim Hi As Double
Dim An As Double
Hi = CDbl(TextBox1.Text) / 1000
An = CDbl(TextBox2.Text) * (3.141592653 / 180)
'定義臺階長度l0、寬度和b0層高h0,三者均為Double Precision數(shù)據(jù)類型
Dim l0 As Double
Dim b0 As Double
Dim h0 As Double
l0 = CDbl(TextBox3.Text) / 1000
b0 = CDbl(TextBox4.Text) / 1000
h0 = CDbl(TextBox5.Text) / 1000
其中,CDbl()函數(shù)的作用是將輸入文本框中的字符串轉(zhuǎn)化為Double Precision類型的數(shù)據(jù)。由于SolidWorks內(nèi)部運行的單位制仍然是米和弧度,所以需要用表達式將用戶輸入的參數(shù)從毫米轉(zhuǎn)換為米,從角度轉(zhuǎn)換為弧度。
(2)將定義好的參數(shù)代入生成草圖直線和生成鈑金實體等函數(shù),實現(xiàn)草圖和特征的參數(shù)化建模,代碼如下:
'創(chuàng)建參數(shù)化草圖1
Dim skSegment As Object
Set skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, Hi / Tan(An), Hi, 0#)
Part.SetPickMode
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 0, 0, 0, True, 0, Nothing, 0)
Part.Extension.MoveOrCopy True, 1, True, 0, 0, 0, b0, 0, 0
Part.ClearSelection2 True
Set skSegment = Part.SketchManager.CreateLine(Hi / Tan(An), Hi, 0#, Hi / Tan(An) + b0, Hi, 0#)
Set skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, b0, 0#, 0#)
Part.ClearSelection2 True
Part.SketchManager.InsertSketch True
'創(chuàng)建參數(shù)化鈑金臺階草圖2
boolstatus = Part.Extension.SelectByID2("前視基準面", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.SketchManager.InsertSketch True
Set skSegment = Part.SketchManager.CreateLine(h0 / Tan(An), h0, 0#, h0 / Tan(An) + b0, h0, 0#)
Part.SetPickMode
Part.ClearSelection2 True
Set skSegment = Part.SketchManager.CreateLine(h0 / Tan(An), h0, 0#, h0 / Tan(An), (h0 - 0.05), 0#)
Part.SetPickMode
Part.ClearSelection2 True
Part.SketchManager.InsertSketch True
'生成最底部鈑金臺階
Dim customBendAllowanceData As Object
Set customBendAllowanceData = Part.FeatureManager.CreateCustomBendAllowa-nce()
customBendAllowanceData.KFactor = 0.5
Dim myFeature As Object
Set myFeature = Part.FeatureManager.InsertSheetMetalBaseFlange2(0.0007366, False, 0.0007366, l0, 0.01, False, 0, 0, 1, customBendAllowanceData, False, 0, 0.0001, 0.0001, 0.5, True, False, True, True)
Part.ClearSelection2 True
(3)計算陣列臺階個數(shù)并線性陣列鈑金臺階,代碼如下:
Dim num As Integer
Dim num1 As Double
Dim num2 As Integer
Dim h1 As Double
num1 = Hi / Sin(An) / (h0 / Sin(An))
num2 = Int(Hi / Sin(An) / (h0 / Sin(An)))
h1 = h0 / Sin(An)
If num2 >= num1 Then
num = num2 - 1
End If
If num2 < num1 Then
num = num2
End If
boolstatus = Part.Extension.SelectByID2("Line1@草圖1", "EXTSKETCHSEG-MENT", 0, 0, 0, True, 1, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("基體-法蘭1", "SOLIDBODY", 0, 0, 0, True, 256, Nothing, 0)
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Line1@草圖1", "EXTSKETCHSEG-MENT", 0, 0, 0, False, 1, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("基體-法蘭1", "SOLIDBODY", 0, 0, 0, True, 256, Nothing, 0)
Dim swLinearPattern As Feature
Set swLinearPattern = Part.FeatureManager.FeatureLinearPattern5(num, h1, 1, 0.01, False, False, "NULL", "NULL", False, False, False, False, False, False, True, True, False, False, 0, 0, False, False)
boolstatus = Part.Extension.SelectByID2("Line1@草圖1", "EXTSKETCHSEG-MENT", 0, 0, 0, True, 1, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("基體-法蘭1", "SOLIDBODY", 0, 0, 0, True, 256, Nothing, 0)
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Line1@草圖1", "EXTSKETCHSEG-MENT", 0, 0, 0, False, 1, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("基體-法蘭1", "SOLIDBODY", 0, 0, 0, True, 256, Nothing, 0)
Set swLinearPattern = Part.FeatureManager.FeatureLinearPattern5(2, (Hi - h0) / Sin(An), 1, 0.01, False, False, "NULL", "NULL", False, False, False, False, False, False, True, True, False, False, 0, 0, False, False)
其中,Int()為取整函數(shù),將計算得到的臺階個數(shù)取整,并通過If條件句調(diào)整,最終確定陣列臺階個數(shù)。此外,線性陣列方向可以選取草圖線、特征線,也可以設(shè)置某平面法線方向,本文在陣列臺階時選取的是沿著爬梯傾斜方向的草圖線,陣列爬梯鈑金側(cè)板時設(shè)置的是該鈑金平面的法線方向。
2.4程序運行結(jié)果
程序經(jīng)過編輯整理后調(diào)試無誤即可運行。打開SolidWorks,新建空白零件,運行生成爬梯宏程序,輸入以下兩組設(shè)計參數(shù)運行(見圖2)。
點擊“生成”按鈕,即可生成對應(yīng)的爬梯模型,如圖3所示。
檢查生成的模型可知程序正確運行。
3總結(jié)
通過二次開發(fā)的方法實現(xiàn)定制部件的參數(shù)化建模,可以極大地提高設(shè)計效率和設(shè)計質(zhì)量。本文針對工業(yè)場景中使用率很高的爬梯部件進行了基于VBA 的SolidWorks二次開發(fā),詳細介紹了通過錄制、修改宏的方法進行快速二次開發(fā)的過程。簡單介紹了開發(fā)過程中用到的插入草圖直線、移動草圖、選擇實體、生成鈑金件、線性陣列實體等若干SolidWorks API函數(shù),并通過真實的生成爬梯程序代碼展示其功能以及參數(shù)化驅(qū)動建模的實現(xiàn),具有較高的實用和參考價值。
作者簡介:李冰,男,1988/08/30,河南鄭州,工作單位:河南衛(wèi)華重型機械股份有限公司,專業(yè):工程力學(xué),研究方向:結(jié)構(gòu)實驗分析。
參考文獻
[1] SolidWorks公司.SolidWorks高級教程:二次開發(fā)與API(2007版)[M].葉修梓,陳超詳編.北京:機械工業(yè)出版社,2009.