王 鵬
(廣州廣日電梯工業(yè)有限公司,廣東廣州 511447)
AutoCAD是目前使用廣泛的通用交互式計(jì)算機(jī)輔助繪圖與設(shè)計(jì)軟件包,其特點(diǎn)是通用性強(qiáng),具有多種工業(yè)標(biāo)準(zhǔn)和開(kāi)放的體系結(jié)構(gòu),具有強(qiáng)大的二次開(kāi)發(fā)功能。這些特點(diǎn)使得它在船舶、建筑、機(jī)械、電子、服裝等多個(gè)領(lǐng)域得到了極為廣泛的應(yīng)用[1]。
在機(jī)械產(chǎn)品設(shè)計(jì)中要頻繁使用通用零件軸,如果用傳統(tǒng)的方法對(duì)軸進(jìn)行設(shè)計(jì),由于參數(shù)太多,計(jì)算復(fù)雜,繪圖繁瑣,不僅設(shè)計(jì)效率低,而且容易出錯(cuò)。目前各類(lèi)CAD軟件在機(jī)械設(shè)計(jì)中的應(yīng)用日益廣泛,利用參數(shù)化輔助設(shè)計(jì)的方法來(lái)研究機(jī)械零件的設(shè)計(jì)問(wèn)題,已經(jīng)成為現(xiàn)在機(jī)械設(shè)計(jì)中十分流行的研究方法[2]。因此,應(yīng)用AutoCAD軟件平臺(tái)開(kāi)發(fā)軸的參數(shù)化輔助設(shè)計(jì)系統(tǒng)不僅具有很高的實(shí)用價(jià)值,而且對(duì)機(jī)械設(shè)計(jì)現(xiàn)代方法的研究是一項(xiàng)有益的探索。
系統(tǒng)應(yīng)用內(nèi)嵌于AutoCAD軟件平臺(tái)的VBA技術(shù)進(jìn)行二次開(kāi)發(fā),開(kāi)發(fā)出了軸設(shè)計(jì)CAD系統(tǒng),主要采用參數(shù)化設(shè)計(jì)方法,基于特征的實(shí)體造型理論,應(yīng)用數(shù)據(jù)庫(kù)的支持和尺寸驅(qū)動(dòng)原理,使軸的尺寸變化自動(dòng)轉(zhuǎn)化成幾何形狀的變化,并直接輸出圖形,從而大大提高了設(shè)計(jì)的質(zhì)量和繪圖的效率。
ActiveX技術(shù)來(lái)源于OLE(Object Linking and Embedding)技術(shù)。AutoCAD ActiveX使用戶(hù)能夠從AutoCAD的內(nèi)部或外部以編程方式來(lái)操作Auto-CAD,使許多不同的編程語(yǔ)言和環(huán)境及其他應(yīng)用程序可以訪問(wèn)被顯示的對(duì)象。對(duì)象是所有ActiveX應(yīng)用程序的主要構(gòu)造塊,每一個(gè)顯示的對(duì)象均精確代表一個(gè)AutoCAD組件。AutoCAD ActiveX接口中有許多不同類(lèi)型的對(duì)象[3]。在AutoCAD中實(shí)現(xiàn)ActiveX接口有兩大優(yōu)點(diǎn):更多的編程環(huán)境可以編程訪問(wèn)AutoCAD圖形;與其他Windows應(yīng)用程序共享數(shù)據(jù)變得更加容易。利用該項(xiàng)技術(shù)來(lái)進(jìn)行AutoCAD二次開(kāi)發(fā),控制AutoCAD的環(huán)境,或同外部程序進(jìn)行“對(duì)話(huà)”,或編寫(xiě)基于AutoCAD的數(shù)據(jù)庫(kù)程序,有著顯著的優(yōu)越性。ActiveX Automation技術(shù)為AutoCAD的二次開(kāi)發(fā)提供了一個(gè)嶄新的天地[4]。
VBA(Visual Basic for Application)是AutoCAD內(nèi)嵌的一種程序語(yǔ)言。它基于Visual Basic版本,是完全面向?qū)ο篌w系結(jié)構(gòu)的一種編程語(yǔ)言,有著與VB幾乎相同的開(kāi)發(fā)環(huán)境和語(yǔ)法。允許VBA環(huán)境與AutoCAD同時(shí)運(yùn)行,并通過(guò)ActiveX接口提供對(duì)AutoCAD的編程控制[5]。
自20世紀(jì)80年代以來(lái),基于特征的設(shè)計(jì)方法已被廣泛接受,也提出了不少特征的定義。更為嚴(yán)格的定義:特征就是一個(gè)包含工程含義或意義的幾何原型外形[6]。特征在此已經(jīng)不是普通的體素,而是一個(gè)封裝了各種屬性(attribute)和功能(function)的功能要素。由此,可以利用較高層次的語(yǔ)義豐富的特征來(lái)代替簡(jiǎn)單的原始的幾何元素作為基本元素,通過(guò)一定的組合法則來(lái)建模,這就是特征造型,特征的表示和建立就成為其中的關(guān)鍵。
軸類(lèi)零件的結(jié)構(gòu)特點(diǎn)是:不同的軸有不同的結(jié)構(gòu),但它們有共同的結(jié)構(gòu)特征,如都由幾節(jié)大小不同的圓柱段、倒角、鍵槽等組成。這些結(jié)構(gòu)都很簡(jiǎn)單,但又有很大的相似性??梢岳脜?shù)化的理論設(shè)計(jì)方法,基于特征實(shí)體的造型方法去研究軸的參數(shù)化設(shè)計(jì),并根據(jù)用戶(hù)輸入的相關(guān)軸段尺寸來(lái)驅(qū)動(dòng)系統(tǒng)運(yùn)行,使軸的設(shè)計(jì)可以通過(guò)修改參數(shù)來(lái)確定,從而實(shí)現(xiàn)了軸類(lèi)零件的計(jì)算機(jī)輔助設(shè)計(jì)。
考慮到計(jì)算機(jī)輔助軸的設(shè)計(jì)過(guò)程具有如下特點(diǎn)及難點(diǎn):設(shè)計(jì)前已知數(shù)據(jù)少;使用大量的設(shè)計(jì)及校核資料;結(jié)構(gòu)復(fù)雜,結(jié)構(gòu)信息難于合理存儲(chǔ)傳遞。將軸的輔助設(shè)計(jì)系統(tǒng)分為以下幾個(gè)模塊。
(1)結(jié)構(gòu)設(shè)計(jì)模塊。提供逐段進(jìn)行結(jié)構(gòu)設(shè)計(jì)的方便友好的交互界面,隨人機(jī)交互的進(jìn)行,系統(tǒng)進(jìn)行參數(shù)化繪圖并合理存儲(chǔ)軸的局部信息。
(2)數(shù)據(jù)處理與查詢(xún)模塊。由于軸的設(shè)計(jì)及校核涉及到大量的表格數(shù)據(jù),為便于存儲(chǔ)、計(jì)算和檢索,系統(tǒng)利用Access數(shù)據(jù)庫(kù)存儲(chǔ)與設(shè)計(jì)及校核相關(guān)的數(shù)據(jù)。
(3)力學(xué)計(jì)算模塊。將加載于轉(zhuǎn)動(dòng)件上的力轉(zhuǎn)換為加載于軸上的力,并計(jì)算該力作用下產(chǎn)生的支反力、彎矩和轉(zhuǎn)矩等。
(4)強(qiáng)度校核模塊。按照彎扭合成強(qiáng)度條件,利用數(shù)據(jù)處理與查詢(xún)模塊所獲取的參數(shù)和力學(xué)計(jì)算模塊得出的數(shù)據(jù),計(jì)算軸上受載荷處的彎矩、扭矩、當(dāng)量彎矩和計(jì)算應(yīng)力。并按照強(qiáng)度校核理論,計(jì)算軸上危險(xiǎn)點(diǎn)處的安全系數(shù),進(jìn)行強(qiáng)度校核,并判斷設(shè)計(jì)是否合格。
(5)參數(shù)化繪圖模塊。根據(jù)數(shù)據(jù)處理與查詢(xún)模塊提供的參數(shù)進(jìn)行參數(shù)化繪圖,并輸出圖形文件。提供用戶(hù)布置載荷的接口。
系統(tǒng)在應(yīng)用界面設(shè)計(jì)上,采用了按設(shè)計(jì)順序步驟逐步依次運(yùn)行。主要采用窗體的形式來(lái)完成系統(tǒng)的運(yùn)行。系統(tǒng)執(zhí)行的流程圖如圖1所示。
圖1 系統(tǒng)流程圖
系統(tǒng)的操作界面主要包括:引導(dǎo)界面、輔助設(shè)計(jì)界面、結(jié)構(gòu)設(shè)計(jì)界面、支承布置界面和載荷計(jì)算及強(qiáng)度校核界面,在此列出結(jié)構(gòu)設(shè)計(jì)界面(如圖2所示)和載荷計(jì)算及強(qiáng)度校核界面(如圖3所示)。
圖2 結(jié)構(gòu)設(shè)計(jì)界面圖
4.3.1 數(shù)據(jù)庫(kù)的連接與查詢(xún)
軸的輔助設(shè)計(jì)系統(tǒng)中,由于涉及到大量的數(shù)據(jù)處理與查詢(xún),因此建立了Access數(shù)據(jù)庫(kù)以方便系統(tǒng)管理相關(guān)數(shù)據(jù)。
圖3 載荷計(jì)算及強(qiáng)度校核界面圖
常用的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)有:數(shù)據(jù)訪問(wèn)對(duì)象DAO(Data Access Objects)技術(shù),遠(yuǎn)程數(shù)據(jù)對(duì)象RDO(Remote Data Objects)技術(shù)和Active數(shù)據(jù)對(duì)象ADO(ActiveX Data Objects)技術(shù)。ADO的對(duì)象模型是所有數(shù)據(jù)訪問(wèn)接口對(duì)象模型中最簡(jiǎn)單的一種,它的優(yōu)勢(shì)在于它可用于各種程序設(shè)計(jì)語(yǔ)言,所以ADO技術(shù)成為數(shù)據(jù)庫(kù)訪問(wèn)功能的新突破,開(kāi)發(fā)的系統(tǒng)使用的是ADO訪問(wèn)技術(shù)。
在使用ADO對(duì)象之前,需要在VBA集成開(kāi)發(fā)環(huán)境中,引用ADO的對(duì)象模型。連接數(shù)據(jù)庫(kù)、打開(kāi)記錄集的實(shí)現(xiàn)程序代碼如下:
'工程文件路徑
Dim strPath As String
Dim adoCon As Connection '連接對(duì)象
Dim adoRs As Recordset '記錄集對(duì)象
'首先獲得當(dāng)前的工程路徑
strPath=ThisDrawing.Application.VBE.
ActiveVBProject.FileName
'連接數(shù)據(jù)庫(kù)
Set adoCon=New Connection
adoCon.CursorLocation=adUseClient
adoCon.Open"Provider=Microsoft.Jet.
OLEDB.4.0;DataSource=" & Left(strPath,Len(strPath)-8)&"data.mdb;"
'打開(kāi)記錄集,查詢(xún)表jianhb
Set adoRs=New Recordset
adoRs.Open"SELECT*FROM jianhb",ado-Con,adOpenForwardOnly,adLockReadOnly,
adCmdText
adoRs.MoveFirst
在使用記錄集時(shí),在各個(gè)記錄集之間切換還可以使用記錄集的Move、Move-First、 MoveNext、 MovePrevious、MoveLast方法。
在連接數(shù)據(jù)庫(kù)獲取數(shù)據(jù)完成之后,必須使用Close方法來(lái)關(guān)閉記錄集和數(shù)據(jù)庫(kù)連接對(duì)象,其程序代碼如下:
adoRs.Close '關(guān)閉記錄集對(duì)象
adoCon.Close '關(guān)閉連接對(duì)象
鏈接好數(shù)據(jù)庫(kù)之后,需要從數(shù)據(jù)庫(kù)中獲取符合條件的參數(shù),采用For…Next循環(huán)語(yǔ)句實(shí)現(xiàn)了對(duì)所需查詢(xún)的表的遍歷,同時(shí)使用If…End if語(yǔ)句來(lái)選取符合查詢(xún)條件的參數(shù),方便參數(shù)化設(shè)計(jì)。
4.3.2 參數(shù)化繪圖
參數(shù)化繪圖部分主要包括:圖層的建立、繪制圖形和尺寸標(biāo)注三個(gè)方面。
(1)圖層的建立。其關(guān)鍵代碼如下:
‘創(chuàng)建“中心線”圖層,設(shè)置其線型,線寬,顏色
Public NewLayerName As String
Public LayerObject As AcadLayer
NewLayerName="中心線"
Set LayerObject=
ThisDrawing.Layers.Add(NewLayerName)
On Error GoTo ERRORHANDLER
linetypeName="CENTER"
ThisDrawing.Linetypes.Load linetypeName,"acadiso.lin"
ERRORHANDLER:
LayerObject.color=acWhite
LayerObject.Linetype="CENTER"
LayerObject.Lineweight=acLnWt015
ThisDrawing.ActiveLayer=LayerObject
(2)圖形繪制。其中直線和圓弧繪制的關(guān)鍵代碼如下:
‘直線
Dim Line As AcadLine:
Set Line = ThisDrawing.ModelSpace.AddLine(end1,end2)
‘圓弧
Dim arcObj As AcadArc
SetarcObj1 = ThisDrawing.ModelSpace.AddArc(center1,r,sangle,endang)
其中end1,end2,為線段端點(diǎn);center1,center2為圓弧圓心;r為圓弧半徑;sangle為圓弧起始角度;endang為圓弧終止角度。
(3)尺寸標(biāo)注。在系統(tǒng)中,標(biāo)注主要采用對(duì)齊標(biāo)注的方法,這種方法方便快捷,比較容易使用,對(duì)齊標(biāo)注的定義程序代碼如下:
Dim dimObj As AcadDimAligned
Set dimObj=ThisDrawing.ModelSpace.AddDimAligned(end1,end2,location)
其中end1,end2為標(biāo)注端點(diǎn),location為標(biāo)注文字的對(duì)齊點(diǎn)。其他標(biāo)注相關(guān):
‘設(shè)置小數(shù)分隔符
dimObj.DecimalSeparator= “.“
‘顯示直徑符號(hào)Φ
dimObj.TextOverride=“%%C<>“
dimObj.Update
4.3.3 參數(shù)化載荷計(jì)算及強(qiáng)度校核
在用戶(hù)輸入?yún)?shù)和數(shù)據(jù)庫(kù)連接完成之后,系統(tǒng)將進(jìn)行參數(shù)化的載荷計(jì)算及強(qiáng)度校核。
(1)最小直徑的估算是進(jìn)行結(jié)構(gòu)設(shè)計(jì),載荷計(jì)算及強(qiáng)度校核之前必不可少的,在估算最小直徑時(shí)需要獲得功率P、轉(zhuǎn)速n以及根據(jù)材料選取的系數(shù)A0。
計(jì)算過(guò)程由程序自動(dòng)完成,其主要代碼為:
dmin=A0*((P/n)^(1/3))
Textdmin.Text=dmin
同時(shí),用戶(hù)在進(jìn)行結(jié)構(gòu)設(shè)計(jì)時(shí)要保證軸段的直徑大于所估算的最小直徑,否則系統(tǒng)將提示錯(cuò)誤。
(2)在進(jìn)行載荷計(jì)算之前,必須先由用戶(hù)布置軸的支承點(diǎn)和受載荷點(diǎn),否則無(wú)法進(jìn)行載荷計(jì)算。軸的支承點(diǎn)需要布置2個(gè),受載荷點(diǎn)只需要布置1個(gè),其程序?qū)崿F(xiàn)的方法主要為鼠標(biāo)獲取點(diǎn)的坐標(biāo),調(diào)用GetPoint函數(shù)。其關(guān)鍵代碼如下:
'獲取點(diǎn)的位置
ptPick=ThisDrawing.Utility.GetPoint(,“指定點(diǎn):”)
在布置支承點(diǎn)和受載荷點(diǎn)時(shí)系統(tǒng)會(huì)彈出對(duì)話(huà)框,提示用戶(hù)在指定的位置來(lái)布置,以方便系統(tǒng)獲取計(jì)算載荷時(shí)所需的力臂長(zhǎng)度。
(3)在常規(guī)的軸設(shè)計(jì)當(dāng)中,進(jìn)行載荷計(jì)算時(shí)都需要構(gòu)建力學(xué)模型,以方便軸的計(jì)算。在開(kāi)發(fā)的系統(tǒng)當(dāng)中,進(jìn)行載荷計(jì)算時(shí)同樣要構(gòu)建力學(xué)模型,但是這里的力學(xué)模型需要進(jìn)行轉(zhuǎn)化,轉(zhuǎn)化成程序代碼的形式反映出來(lái)。所需計(jì)算的參數(shù)有切向支反力,切向彎矩,徑向支反力,徑向彎矩,扭矩,總彎矩等。
(4)在軸上載荷都計(jì)算完成之后,為了校核軸的強(qiáng)度,需要根據(jù)公式計(jì)算軸的計(jì)算彎矩,得出計(jì)算彎曲應(yīng)力之后,即可針對(duì)危險(xiǎn)截面(即計(jì)算彎矩大而直徑可能不足的截面)作強(qiáng)度校核計(jì)算。系統(tǒng)是按彎扭合成應(yīng)力校核軸的強(qiáng)度,得出計(jì)算彎曲應(yīng)力之后,系統(tǒng)跟據(jù)用戶(hù)所選擇的材料熱處理方法查詢(xún)?cè)S用彎曲應(yīng)力[σ-1],并與計(jì)算彎曲應(yīng)力進(jìn)行比較,判斷軸的結(jié)構(gòu)設(shè)計(jì)是否合理。
(1)打開(kāi)AutoCAD軟件,選擇【工具/宏/加載工程】。
(2)在彈出的對(duì)話(huà)框里找到存放系統(tǒng)的目錄,選中“計(jì)算機(jī)輔助軸設(shè)計(jì)系統(tǒng).dvb”工程文件,并單擊“打開(kāi)”按鈕。
(3)系統(tǒng)彈出Microsoft Visual Basic編輯器,選中User窗體,單擊運(yùn)行按鈕或者按下F5鍵系統(tǒng)便開(kāi)始運(yùn)行。
(4)系統(tǒng)運(yùn)行,由用戶(hù)根據(jù)系統(tǒng)提示進(jìn)行軸的計(jì)算機(jī)輔助設(shè)計(jì)。運(yùn)行結(jié)果如圖4、圖5所示。
圖4 載荷計(jì)算結(jié)果
圖5 強(qiáng)度校核結(jié)果
(1)基于AutoCAD VBA的二次開(kāi)發(fā),可以為計(jì)算機(jī)輔助設(shè)計(jì)帶來(lái)了很大的靈活性,進(jìn)一步增強(qiáng)程序的功能和代碼重用性,應(yīng)用上述技術(shù)開(kāi)發(fā)專(zhuān)用CAD系統(tǒng)是一種行之有效、方便實(shí)用的設(shè)計(jì)方法。
(2)系統(tǒng)基本滿(mǎn)足了軸設(shè)計(jì)過(guò)程當(dāng)中的基本要求,用戶(hù)只需根據(jù)輸入的參數(shù),即可由系統(tǒng)自動(dòng)完成輔助結(jié)構(gòu)設(shè)計(jì)及強(qiáng)度的校核,并輸出零件圖形。為設(shè)計(jì)人員提供了方便的設(shè)計(jì)手段。
[1]李長(zhǎng)勛.AutoCAD ActiveX二次開(kāi)發(fā)技術(shù)[M].北京:國(guó)防工業(yè)出版社,2005.
[2]肖剛,李學(xué)志,李俊源.機(jī)械CAD原理與實(shí)踐:第2版[M].北京:清華大學(xué)出版社,2006.
[3]張帆.AutoCAD VBA開(kāi)發(fā)精彩實(shí)例教程[M].北京:清華大學(xué)出版社,2004.
[4]張帆.AutoCAD VBA二次開(kāi)發(fā)教程[M].北京:清華大學(xué)出版社,2006.
[5]李慶興,李繼升,范順成,等.基于AutoCAD VBA平臺(tái)的機(jī)械零件工作圖參數(shù)化及自動(dòng)生成系統(tǒng)[J].機(jī)械設(shè)計(jì),2008,25(1):68-70.
[6]王彩英.基于特征的軸類(lèi)零件參數(shù)化設(shè)計(jì)的研究[J].機(jī) 電 產(chǎn) 品 開(kāi) 發(fā) 與 創(chuàng) 新 ,2008,21 (5):131-133.