吳志林,張凱還
((南京理工大學機械工程學院,江蘇南京210094)
Solidworks是一套完全基于windows的三維設計軟件,它具有強大的零件建模、零部件裝配、工程圖輸出功能,支持OLE(對象鏈接與嵌入)技術與COM(組件對象模型)技術,設計者能夠根據自身需要對其進行二次開發。通過Solidworks提供的API(應用編程接口),可以開發嵌入式模塊以擴充原Solidworks的功能,形成客戶化定制的Solidworks軟件系統。
在進行齒輪、彈丸等具有特殊輪廓的零件建模時,Solidworks現有模塊無法滿足用戶需求,而Solidworks三維實體零件特征量的輸出,如質量、質心、轉動慣量等參數對后續的產品設計有很大影響,因此,開發出能夠在Solidworks中精確繪制任意工程函數曲線的功能非常必要。傳統的二次開發只針對某一領域的特殊情況,不具備普遍性,本文以Solidworks自帶VBA為開發工具,論述了在Solidworks中繪制任意一元函數曲線的思想與方法,該方法可以解決在Solidworks中繪制齒輪、凸輪、拋物線等復雜輪廓時遇到的難題,具有重要的現實意義。
Solidworks增值開發主要通過其內嵌的SolidworksAPI接口進行,API提供了大量的OLE對象及對象的屬性和方法,利用這些OLE對象,幾乎可以實現所有模型創建的開發。任何支持OLE技術的高級語言如Delphi,C,C++,Visual C++,VBA,Visual basic 等都可作為開發工具[1]。用戶可以根據自己的需要編寫生成DLL文件,作為插件掛在Solidworks菜單之中,也可以添加到工具條中,甚至可以生成單獨的可執行文件調用Solidworks軟件。
Solidworks API對象是一個自上而下的多層次的樹形網絡。如圖1所示[2],Sldworks是根目錄對象,位于應用程序的底層,是訪問Solidworks API所有對象的入口程序。接口對Solidworks API的調用實行逐級尋訪,先調用能實現所需功能對象的父對象,然后調用與父對象相關的子對象,如果子對象所封裝的屬性和方法不能實現所需要的功能,則繼續調用該子對象的下級子對象,如此逐級遍歷,直到結束[3]。So1idworks API父對象與子對象是包含關系,不是繼承關系,父對象包含子對象的屬性和方法,子對象自身不帶有該屬性和方法。二次開發中,如果沒有按規則進行API逐級調用,將無法實現所需功能。

圖1
在Solidworks提供的所有對象中,絕大多數二次開發要用到Modeldoc對象,零件草圖創建、尺寸標注、三維零件生成、特征管理、裝配體零部件添加、配合關系添加、草圖生成、工程圖標注等的二次開發,都需要調用到該對象的子對象。主要用到了Modeldoc對象的子對象Partdoc(零件對象)以及Partdoc的不同子對象,只有正確的選用開發對象并實現逐級調用,才能實現預期的開發目的。
草圖繪制是Solidworks三維模型創建的第一步,草圖輪廓的每一段在Solidworks中都可以用函數表示,只要精確的做出草圖輪廓,就可以實現零件的精確建模。Solidworks沒有繪制漸開線、拋物線等復雜曲線的功能,可以通過選擇足夠多的樣點,以繪制樣條曲線命令CreateSpline依次連接,近似生成所需要的函數曲線,并有相當高的精度。
當需要繪制一元函數曲線輪廓時,為用戶提供曲線表達式輸入、曲線段選擇窗口,并根據精度要求選擇取樣步長。通過編程實現表達式字符串的讀取,還原函數方程并處理得出曲線導數方程,按照取樣步長計算取樣點值,參照曲線段前段輪廓及特定點導數方程值,將樣點做相應旋轉和移動,即可方便精確的做出所需曲線。
以繪制弧形部為拋物線的彈丸為例,如圖2所示,在Solidworks中繪制彈丸零件草圖時,習慣將彈丸圓柱部母線DE平行于水平軸。取拋物線AB段作為彈丸弧形部,為減小彈丸飛行阻力,將A、B兩點中曲率半徑較大的點(A點)與圓柱部結束點(E點)重合并使圓柱部與弧形部相切。設選用弧形部曲線為y=ax2+bx+c(xB≤x≤xA),做點A切線與水平軸交于C點,夾角為θ。將AB弧繞原點O逆時針旋轉π-θ到達A1B1,此時A1點切線A1C1必然與圓柱部母線DE平行,AB弧上任意一點F旋轉后的坐標(xF1,yF1)為:

圖2 彈丸拋物線圖

最后將旋轉后各點沿水平軸正向移動xE-xF1,沿豎直軸正向移動yE-yF1,即可使A1點與E點重合,再用樣條線依次連接取樣點即可使曲線弧與圓弧部相切,得到所需拋物線。
如上所述,在繪制草圖時只需關心所需要的輪廓形狀,而無需在Solidworks繪制出的曲線位置上耗費精力,在繪制其他零件時,用戶只需根據實際需要對旋轉角度做一選擇即可達到作圖目的。
1)建立曲線函數輸入界面,見圖3。

圖3
2)函數字符串處理。首先利用VBA內部字符串函數 Right,Mid,Instr,Val等讀取系數、變量、符號位置并存儲于數組,然后將函數還原并計算得出函數導數方程。部分語句如下:

3)運用CreateSpline命令繪制目標曲線,部分程序如下[2]:


4)將編制程序制作成按鈕并置于草圖繪制工具條中,方便使用。
見圖3程序運行界面及運行結果。
以在Solidworks中繪制任意一元函數曲線為開發目的,介紹了在Solidworks中繪制任意一元函數曲線的思想與方法,利用VBA編程、以繪制弧形部為拋物線的彈丸為例,演示了該方法在產品設計中的應用。對本文所述方法稍做改動,即可實現繪制任意工程函數曲線的目的,為諸如繪制任意形狀齒輪等模型提供極具意義的參考。
[1]徐國權,黃志超.基于SolidWorks的參數化設計二次開發研究[J].機械設計與研究,2007,23(1),68~70.
[2]Solidworks公司.Solidworks API二次開發[M].北京:機械工業出版社,2005.
[3]呂曉燕,賈海英,張曉鐘.基于VB對SolidWorks二次開發方法的研究[J].機械設計與制造,2005(3),114 ~116.
[4]丁彩虹.SolidWorks中函數曲線繪制的二次開發[J].機械與電子,2006,(7),79~80.