□ 目登臣□ 孫寶壽□ 黃吉平□ 劉韶華□ 劉忠洋
1.寧波大學(xué) 機(jī)械工程與力學(xué)學(xué)院 浙江寧波315211
2.寧波鎮(zhèn)海減變速機(jī)制造有限公司 浙江寧波315211
隨著三維造型技術(shù)的快速發(fā)展,越來(lái)越多的制造型企業(yè)運(yùn)用各種三維造型軟件進(jìn)行產(chǎn)品的前期設(shè)計(jì)和后期的宣傳展示。SolidWorks作為重要的實(shí)體建模軟件,以其優(yōu)異的設(shè)計(jì)性能、易用性和創(chuàng)新性等優(yōu)點(diǎn)受到廣大工程技術(shù)人員的青睞。而且,SolidWorks具有良好的兼容性和開(kāi)放性,技術(shù)人員可以使用高級(jí)編程語(yǔ)言調(diào)用API(Application Program Interface,應(yīng)用程序編程接口)函數(shù)對(duì)其進(jìn)行二次開(kāi)發(fā),實(shí)現(xiàn)某些復(fù)雜零件的快速設(shè)計(jì),極大地提高了產(chǎn)品設(shè)計(jì)效率和質(zhì)量。
漸開(kāi)線齒輪傳動(dòng)是目前各種機(jī)械傳動(dòng)過(guò)程中應(yīng)用最為廣泛的一種傳動(dòng)機(jī)構(gòu)。但是,在實(shí)際設(shè)計(jì)工作中漸開(kāi)線齒輪的精準(zhǔn)造型是一大難點(diǎn),主要在于齒廓漸開(kāi)線草圖的繪制。部分三維造型軟件是可以通過(guò)繁瑣的計(jì)算和一系列復(fù)雜的命令,利用圓弧或直線擬合漸開(kāi)線或齒根過(guò)渡曲線,但這樣就造成齒廓精度較低,不利于后續(xù)的齒輪動(dòng)態(tài)仿真及有限元分析。也有工程技術(shù)人員使用Visual Basic 6.0或Visual C++開(kāi)發(fā)工具進(jìn)行過(guò)齒輪的參數(shù)化設(shè)計(jì),但是大部分實(shí)現(xiàn)的功能比較單一,對(duì)齒根過(guò)渡圓角的處理多選用經(jīng)驗(yàn)公式計(jì)算[1-3]。為此,筆者探討了在Visual Studio 2013集成開(kāi)發(fā)環(huán)境下利用C#6.0高級(jí)編程語(yǔ)言對(duì)SolidWorks進(jìn)行進(jìn)程外二次開(kāi)發(fā),實(shí)現(xiàn)了整個(gè)齒輪齒廓曲線的精確繪制,從而達(dá)到漸開(kāi)線齒輪類零件的全參數(shù)化三維精確造型的目的。
SolidWorks具有良好的開(kāi)放性,提供了開(kāi)放的數(shù)據(jù)結(jié)構(gòu)和便捷的二次開(kāi)發(fā)環(huán)境,通過(guò)COM(Component Object Model,組件對(duì)象模型)或OLE(object Linking and Embeding,對(duì)象連接與嵌入)技術(shù)為開(kāi)發(fā)者提供了強(qiáng)大的二次開(kāi)發(fā)接口,即SolidWorks API。其中包涵了SolidWorks操作的所有功能函數(shù),開(kāi)發(fā)者只需在編程時(shí)調(diào)用所需的API函數(shù)即可開(kāi)發(fā)出企業(yè)適用的相關(guān)軟件,實(shí)現(xiàn)SolidWorks功能的拓展。只要支持COM/OLE編程的開(kāi)發(fā)工具語(yǔ)言如VC++、VB.Net、C#等均可用于SolidWorks的二次開(kāi)發(fā)[4]。
用戶在對(duì)SolidWorks軟件進(jìn)行二次開(kāi)發(fā)時(shí),首先要得到SolidWorks API對(duì)象的接口,才能使用接口所提供的方法。所以必須先了解API的對(duì)象模型,如圖1所示,SolidWorks API是樹(shù)形層次結(jié)構(gòu),每一層包含若干對(duì)象,每個(gè)對(duì)象又都有自己的屬性和方法。
▲圖1 SolidWorks API對(duì)象層次結(jié)構(gòu)圖
由于SolidWorks提供了幾百個(gè)API函數(shù),所以開(kāi)發(fā)者不必掌握所有對(duì)象的用法,只需在開(kāi)發(fā)過(guò)程中先使用宏錄制功能把操作過(guò)程記錄下來(lái),然后確定需要使用哪些方法,再去創(chuàng)建能夠連接這些方法的對(duì)象。圖1中的SolidWorks接口對(duì)象是所有SolidWorks API中最高層的對(duì)象,它能夠直接或間接地訪問(wèn)SolidWorks API中的所有其它子類對(duì)象[5]。此參數(shù)化設(shè)計(jì)系統(tǒng)中使用的對(duì)象有SolidWorks文件基類、草圖點(diǎn)、特征管理、模型視圖、草圖管理等,利用這些對(duì)象中的功能可以完成模型草圖的創(chuàng)建、特征的創(chuàng)建以及模型視角的轉(zhuǎn)換等。
筆者采用進(jìn)程外組件開(kāi)發(fā)方式對(duì)SolidWorks 2016進(jìn)行二次開(kāi)發(fā),開(kāi)發(fā)的用戶程序以*.exe方式獨(dú)立運(yùn)行于SolidWorks之外,并驅(qū)動(dòng)SolidWorks完成相應(yīng)的操作[6]。基本思路是,在開(kāi)發(fā)之前先搭建出系統(tǒng)的整體框架,把整個(gè)系統(tǒng)分為界面模塊、參數(shù)計(jì)算模塊、齒廓草圖繪制和實(shí)體造型四個(gè)模塊進(jìn)行設(shè)計(jì)。再對(duì)零件模型特征進(jìn)行分析,確定出最優(yōu)建模順序并利用SolidWorks的宏錄制功能對(duì)建模過(guò)程進(jìn)行記錄,從生成的宏程序中找到建模所需的API函數(shù)供C#程序調(diào)用。開(kāi)發(fā)方法如下。
(1)首先根據(jù)齒輪類零件的類型和建模所需的尺寸參數(shù)在開(kāi)發(fā)工具Visual Studio 2013中創(chuàng)建用戶界面, 再添加引用SolidWorks.Interop.swcommands、SolidWorks.Interop.sldworks和SolidWorks.Interop.swconst三個(gè)類庫(kù),聲明相關(guān)對(duì)象變量并建立起外部程序和SolidWorks的連接。
(2)然后根據(jù)功能要求調(diào)用API函數(shù)編寫(xiě)不同模塊的執(zhí)行代碼,實(shí)現(xiàn)主要結(jié)構(gòu)參數(shù)的計(jì)算,漸開(kāi)線齒廓和齒根過(guò)渡曲線的生成以及零件的實(shí)體建模。
(3)最后調(diào)試修改完成之后打包發(fā)布即可。圖2所示是此系統(tǒng)完成齒輪零件建模過(guò)程的流程圖,其中的關(guān)鍵性步驟是繪制過(guò)渡曲線和漸開(kāi)線,也是整個(gè)系統(tǒng)的核心模塊。
▲圖2 系統(tǒng)流程圖
根據(jù)上述建模思路分析,可知程序運(yùn)行過(guò)程中需要通過(guò)人機(jī)交互獲取到齒輪的相關(guān)參數(shù)來(lái)實(shí)現(xiàn)齒輪類零件的快速建模。用戶界面作為人機(jī)交互的重要載體,在設(shè)計(jì)時(shí)要做到美觀大方、簡(jiǎn)潔易操作。由于不同類型齒輪零件建模所需參數(shù)不同,所以采用嵌套二級(jí)子窗體的方式來(lái)完成不同類型齒輪的參數(shù)輸入。圖3所示是直齒輪造型參數(shù)輸入主界面,用來(lái)輸入齒輪零件主體建模所用的參數(shù)值。
▲圖3 直齒輪基本參數(shù)輸入界面
其中對(duì)直齒輪和斜齒輪建模提供了實(shí)心式、齒軸式、腹板式三種結(jié)構(gòu)類型供用戶選擇,圖4(a)~(c)所示是用戶選擇下拉框中的不同齒輪結(jié)構(gòu)類型時(shí)彈出的輸入對(duì)應(yīng)參數(shù)的子窗體。
▲圖4 不同結(jié)構(gòu)類型參數(shù)輸入子窗體
在Visual Studio2013的Visual C#選項(xiàng)下單擊新建窗體應(yīng)用程序,首先創(chuàng)建出一個(gè)主窗體并重命名為FrmMain,然后把主窗體分割成左右兩欄,左欄放置所需的功能按鈕,右欄嵌入對(duì)應(yīng)的齒輪主參數(shù)輸入界面。對(duì)于四種齒輪主參數(shù)輸入U(xiǎn)I界面的設(shè)置可根據(jù)建模所需的參數(shù)在窗體上畫(huà)出相關(guān)的控件,比如Button按鈕控件、Label標(biāo)簽控件和TextBox文本框控件,并修改各控件的屬性值,其中的模數(shù)m、齒數(shù)z、壓力角α、頂高因數(shù)ha*、頂隙因數(shù)c*的參數(shù)輸入框設(shè)置成Combox下拉框控件,用戶既可以直接從下拉列表中選擇參數(shù),也可以在文本框中輸入相關(guān)參數(shù)。
當(dāng)用戶點(diǎn)擊工具欄中的按鈕時(shí),齒輪主參數(shù)輸入界面會(huì)嵌入到主窗體的右邊容器中,實(shí)現(xiàn)此功能的部分代碼為:
對(duì)于如何在主窗體中調(diào)用子窗體,并在子窗體中輸入相關(guān)參數(shù)來(lái)完成零件的三維建模,就要用到C#中的委托方法,其原理和方法可見(jiàn)參考文獻(xiàn)[7]。
筆者以斜齒輪軸參數(shù)化建模為例說(shuō)明整個(gè)零件的造型過(guò)程,主要步驟是:首先拉伸出齒坯模型,根據(jù)齒根過(guò)渡曲線參數(shù)方程和漸開(kāi)線參數(shù)方程繪制出漸開(kāi)線上的若干坐標(biāo)點(diǎn),接著利用樣條曲線功能依次連接各坐標(biāo)點(diǎn)完成單側(cè)齒廓的繪制,然后利用旋轉(zhuǎn)、鏡像、修剪等命令完成齒槽草圖輪廓的繪制,再插入螺旋線作為掃描軌跡,所有草圖繪制完成后調(diào)用掃描切除函數(shù)生成單個(gè)齒槽特征,然后使用圓周陣列命令完成整個(gè)齒輪的繪制,最后輸入軸段的參數(shù)完成整個(gè)齒輪軸的設(shè)計(jì)。
齒輪齒根過(guò)渡曲線雖然不參與嚙合過(guò)程,但是它的精準(zhǔn)成形是計(jì)算齒根彎曲強(qiáng)度的重要依據(jù),也是準(zhǔn)確進(jìn)行齒輪有限元分析的必要前提。
齒根過(guò)渡曲線實(shí)際是齒條型刀具齒頂圓角的圓在齒嚙合傳動(dòng)時(shí)相對(duì)被切齒廓走過(guò)軌跡的包絡(luò)線,即刀具圓角圓心形成的延伸漸開(kāi)線的等距曲線[8-10],如圖5所示。
▲圖5 齒條型刀具加工齒輪的齒廓
圖5的坐標(biāo)系中,直線nn為刀具齒頂圓角和過(guò)渡曲線接觸點(diǎn)的公法線,當(dāng)?shù)毒邎A角與齒根過(guò)渡曲線剛開(kāi)始接觸時(shí)nn垂直于刀具的齒側(cè)直線并與嚙合線重合,此時(shí)α′等于齒輪與齒條的分度圓壓力角α′,當(dāng)α′等于π/2時(shí),刀具頂部直線與齒根過(guò)渡曲線末端接觸,并切出齒根圓弧,所以α′的取值范圍是α~π/2。齒根過(guò)渡曲線在直角坐標(biāo)系下的參數(shù)方程為:
式中:φ為齒輪轉(zhuǎn)角;α′為nn與刀具加工節(jié)線之間的夾角,其取值范圍為(α,π/2);a為刀具圓角圓心到加工節(jié)線之間的距離;b為刀具圓角圓心到齒槽中線之間的距離;rρ為刀具圓角半徑;r為分度圓半徑;ha*為齒頂高因數(shù);c*為頂隙因數(shù)。
齒輪齒廓部分的形狀是由齒數(shù)z、模數(shù)m、變位因數(shù)x、分度圓壓力角α、齒頂高因數(shù)ha*和頂隙因數(shù)c*等主要參數(shù)決定的漸開(kāi)線曲線。由漸開(kāi)線齒輪的形成原理,可以得到漸開(kāi)線齒廓的繪制方法,具體方法就是繪制出漸開(kāi)線齒廓上的若干坐標(biāo)點(diǎn),然后利用SolidWorks的API函數(shù)—CreateSpline函數(shù)依次連接各坐標(biāo)點(diǎn)即可繪制出齒廓漸開(kāi)線[11]。
漸開(kāi)線上各點(diǎn)直角坐標(biāo)方程表示為:
為了實(shí)現(xiàn)漸開(kāi)線和過(guò)渡曲線的平滑連接并簡(jiǎn)化程序算法,θi的起始角度和過(guò)渡曲線α′的起始角度取相同值,即壓力角α的值。
通過(guò)式(1)~(4)可編程求出過(guò)渡曲線和漸開(kāi)線段上的若干點(diǎn)坐標(biāo),然后使用樣條曲線命令通過(guò)各個(gè)坐標(biāo)點(diǎn)擬合出單側(cè)齒廓[12],再使用鏡像命令做出另一側(cè)齒廓曲線,最后做出齒頂圓和齒根圓并裁剪完成,如圖6所示。
▲圖6 齒輪齒廓草圖
由式(1)~(3)可得到過(guò)渡曲線的算法程序如下:
由式(4)可得出繪制漸開(kāi)線上坐標(biāo)點(diǎn)的主要程序代碼如下:
由于編程時(shí)SolidWorks中長(zhǎng)度是以米為單位、角度是以弧度為單位計(jì)算的,所以在程序中進(jìn)行值類型的運(yùn)算時(shí)要把相關(guān)參數(shù)進(jìn)行單位轉(zhuǎn)換。另外,在調(diào)用某個(gè)命令函數(shù)之前要先定義接口對(duì)象,才能獲取到對(duì)應(yīng)的方法函數(shù),此處進(jìn)行了省略。
齒廓草圖創(chuàng)建三維實(shí)體步驟如下:
(1)插入螺旋線,程序代碼如下。
(3)圓周陣列齒槽特征,程序代碼如下。
生成的斜齒輪軸實(shí)體模型如圖8所示,直齒輪和內(nèi)齒輪的生成過(guò)程與斜齒輪類似,只需刪除插入螺旋線的代碼即可。
對(duì)于直齒條的生成相對(duì)比較簡(jiǎn)單,只需根據(jù)初始輸入值計(jì)算出齒條齒廓相關(guān)尺寸參數(shù),繪制草圖即可,部分程序代碼如下:
▲圖7 齒槽實(shí)體
▲圖8 斜齒輪軸三維實(shí)體
以SolidWorks 2016為開(kāi)發(fā)平臺(tái)、Visual Studio 2013為開(kāi)發(fā)工具,使用C#編程語(yǔ)言調(diào)用API函數(shù)實(shí)現(xiàn)對(duì)SolidWorks的二次開(kāi)發(fā),構(gòu)建了一套齒輪類零件的參數(shù)化建模系統(tǒng)。
(1)系統(tǒng)操作簡(jiǎn)單,界面友好并且獨(dú)立運(yùn)行于SolidWorks之外,整個(gè)建模時(shí)間只需數(shù)秒鐘即可完成,避免同一進(jìn)程內(nèi)運(yùn)行引起的卡頓、崩潰現(xiàn)象,提高了工作效率。
(2)通過(guò)對(duì)齒廓漸開(kāi)線和齒根過(guò)渡曲線的成形原理的分析,得出整個(gè)齒廓草圖繪制的核心算法,實(shí)現(xiàn)了齒輪類零件的快速精確造型,為后續(xù)的運(yùn)動(dòng)仿真和有限元分析提供了可靠的三維模型。