林昌華,邢海斌
(重慶理工大學(xué)重慶汽車學(xué)院,重慶 400054)
在機械CAD中,無論是設(shè)計計算或是參數(shù)化繪制圖形,往往都需要引用有關(guān)的數(shù)據(jù)信息,這些信息既有公式表達(dá)的數(shù)據(jù),又有線圖或數(shù)表等形式表達(dá)的數(shù)據(jù),如經(jīng)驗數(shù)表、實驗曲線、各種標(biāo)準(zhǔn)和規(guī)范等[1-2]。在傳統(tǒng)的設(shè)計中,這些數(shù)據(jù)往往是以查閱設(shè)計手冊或工具書的形式獲得的。在計算機輔助設(shè)計中,就必須對這些數(shù)據(jù)資料作相應(yīng)的處理,以便程序運行時計算機能按照設(shè)計要求自動檢索和引用。本文主要針對復(fù)雜數(shù)據(jù)的程序化問題,介紹數(shù)據(jù)處理的一些簡捷實用方法和應(yīng)用。
機械設(shè)計中,很多參數(shù)通常以數(shù)表的形式給出,如V帶型號與截面尺寸的關(guān)系、平鍵剖面尺寸與輪轂和軸頸之間的關(guān)系等。這些數(shù)據(jù)共同的特點就是參數(shù)之間的函數(shù)關(guān)系難以用數(shù)學(xué)公式來表達(dá),因而在CAD過程中,需要針對各種情況對數(shù)據(jù)進(jìn)行相應(yīng)的處理[3-5]。
根據(jù)自變量數(shù)量,數(shù)表可分為一維數(shù)表和二維數(shù)表等。其程序化最常用的方法就是將一維、二維數(shù)表數(shù)據(jù)以表的形式直接編入程序中。因為AutoLISP語言本身就屬于表處理語言,所以在處理表數(shù)據(jù)方面非常方便。
表1所示為普通V帶的基準(zhǔn)長度Ld及帶長修正系數(shù)KL數(shù)據(jù),基準(zhǔn)長度為標(biāo)準(zhǔn)長度系列,要求根據(jù)已經(jīng)確定的V帶型號和初步計算出的帶長Lc來確定帶長修正系數(shù) KL[6]。

表1 普通V帶的基準(zhǔn)長度系列及帶長修正系數(shù)KL
由于帶長修正系數(shù)KL值對應(yīng)不同的帶型號,其位置、數(shù)據(jù)個數(shù)和大小均有所不同,很難用數(shù)學(xué)公式來表達(dá)。利用AutoLISP編程及表處理功能,分別將V帶基準(zhǔn)長度系列和帶型號對應(yīng)的帶長修正系數(shù)KL值建立在函數(shù)變量引用表中。程序運行時根據(jù)帶長初步計算值Lc進(jìn)行檢索,取最接近計算值的基準(zhǔn)長度Ld。帶長修正系數(shù)KL則由帶型號和基準(zhǔn)長度共同確定。由于KL對應(yīng)于不同的帶型號具有不同的位置和數(shù)據(jù)個數(shù),因而首先要針對不同的型號檢索出相應(yīng)的系數(shù)表,再根據(jù)Ld所處的位置檢索出修正系數(shù)KL。如果Ld不在帶型號所在區(qū)間,則應(yīng)給出錯誤信息,如“帶長Ld超出帶型號所在范圍!查不到帶長修正系數(shù)KL!”。具體編程[7]:
(defun ldkl(dx lc);定義帶型號和帶長計算值為變參的函數(shù);
首先建立基準(zhǔn)長度標(biāo)準(zhǔn)系列引用表:

其次建立帶型號對應(yīng)的帶長修正系數(shù)KL值數(shù)據(jù)表:

檢索帶長計算值最接近的基準(zhǔn)長度及位置:

檢索帶型號對應(yīng)的基準(zhǔn)長度系列:

假設(shè)取帶型號為“C”,帶長初值 Lc=892,由于C型號在該長度段沒有對應(yīng)的帶長修正系數(shù),故執(zhí)行函數(shù)(LdKL“C”892),返回結(jié)果:“帶長 Ld超出帶型號所在范圍!查不到帶長修正系數(shù) KL!”。
如果帶型號為“C”,帶長初值Lc=2 892,執(zhí)行函數(shù)(LdKL“C”2 892)后,返回結(jié)果 Ld=2 800,KL=0.95。
在機械設(shè)計數(shù)據(jù)中,有很多參數(shù)間的關(guān)系是用線圖來表示的,如圖1所示的齒輪動載系數(shù)曲線,就表明了齒輪動載系數(shù)與速度和制造精度的關(guān)系。線圖的程序化處理通常有2種途徑:一是將線圖離散化后存入數(shù)表,再進(jìn)行前述的數(shù)表程序化處理;二是將線圖通過插值或擬合變成公式,再將公式編入程序執(zhí)行[8]。

圖1 齒輪動載系數(shù)Kv
插值法的基本思想是:設(shè)法構(gòu)造一個簡單的函數(shù)y=p(x),作為曲線函數(shù)f(x)的近似表達(dá)式,然后計算p(x)的值以得到f(x)的近似值,使得

成立。
插值方法有線性插值和非線性插值。在某些情況下,線性插值的誤差較大,難以滿足設(shè)計要求,為了提高插值精度,可采用非線性的多點插值方法。多點插值又稱為拉格朗日插值,當(dāng)插值節(jié)點取n=3時,就得到二次插值多項式,即拋物線插值[9]。若插值節(jié)點取n,則拉格朗日插值多項式的一般表達(dá)式為[10]

以圖1中齒輪精度為8級的動載系數(shù)曲線為例,要求根據(jù)齒輪的線速度V確定其動載系數(shù)Kv[11]。對該曲線進(jìn)行處理時可在該曲線上取出7個點,分別將其坐標(biāo)值賦給表變量xi和yi,然后通過多項式插值確定自變量相對應(yīng)的函數(shù)值。程序編制:

應(yīng)用舉例:設(shè)齒輪線速度V=15 m/s,執(zhí)行該函數(shù)(fx15),將得到動載系數(shù)值y(x)=1.32。
說明:所編制的多項式插值程序是一個通用程序,其中數(shù)表xi、yi中的數(shù)據(jù)可以根據(jù)具體情況更換,坐標(biāo)點數(shù)可多于7點,也可少于7點,基本上沒有限制。
前述方法是將數(shù)據(jù)資料編入程序,使用起來方便、快捷,但缺陷是數(shù)據(jù)依賴于程序而存在,若要修改數(shù)據(jù),則要修改程序,各程序之間所需相同數(shù)據(jù)資料無法共享。因此,對于數(shù)據(jù)量較大,且需要共享的數(shù)據(jù),采用數(shù)據(jù)文件是較好的一種方式。數(shù)據(jù)文件有固定的存取格式,既可在各種文本編輯器中建立,又可通過程序運行自動產(chǎn)生,而數(shù)據(jù)文件的管理和數(shù)據(jù)的檢索則可利用AutoLISP程序語言中的函數(shù)或文件管理功能來實現(xiàn)。
數(shù)據(jù)文件的建立格式取決于數(shù)據(jù)的類型和對應(yīng)的檢索數(shù)據(jù)方法,通常采用的數(shù)據(jù)文件保存為后綴為“dat”的文本格式,檢索方法為表處理關(guān)鍵字對應(yīng)法,即根據(jù)關(guān)鍵字檢索對應(yīng)的數(shù)據(jù)。如一維數(shù)據(jù)類型的文件格式:

該數(shù)據(jù)文件的第1排為變量表,表中的每一個變量對應(yīng)后面各排數(shù)據(jù)表中的數(shù)據(jù),每個表中的第1個元素為關(guān)鍵字。檢索時根據(jù)關(guān)鍵字找到數(shù)據(jù)文件中相應(yīng)的數(shù)據(jù)表,再將數(shù)據(jù)表中的數(shù)據(jù)依次賦給對應(yīng)的變量。
這類數(shù)據(jù)類型很常見,可定義一個通用的檢索函數(shù)來檢索數(shù)據(jù)并給變量賦值。檢索函數(shù)定義[12]:

再例如根據(jù)帶輪幾何圖形關(guān)系圖(圖2)及數(shù)據(jù)表建立 CAD文件夾下的數(shù)據(jù)文件為“dlvc.dat”,數(shù)據(jù)建立:


該數(shù)據(jù)文件使用檢索函數(shù)js的檢索過程為調(diào)用:(js"d:/cad/dlvc.dat"“B”)
返回:("B"3.5 10.8 7.5 12.5 19 14 38)

圖2 帶輪幾何參數(shù)
同時表中的數(shù)據(jù)已賦給數(shù)據(jù)文件首表中的各個變量中,如查詢 “!ha”,將顯示其值為3.5。
將數(shù)據(jù)存入一個獨立于程序的數(shù)據(jù)文件中,使數(shù)據(jù)和應(yīng)用程序分開,程序運行時,可按需要打開相應(yīng)的數(shù)據(jù)文件檢索數(shù)據(jù)。優(yōu)點是應(yīng)用程序簡潔,占用內(nèi)存量大大減少,數(shù)據(jù)更改也方便;缺點是數(shù)據(jù)的操作仍離不開應(yīng)用程序,兩者之間并未實現(xiàn)完全獨立。
在機械設(shè)計過程中,要查閱和檢索的數(shù)據(jù)信息、圖表、線圖等的形式是千變?nèi)f化的,上面所舉的只不過是比較典型的一些例子。從這些例子可見,工程數(shù)據(jù)的處理具有很大的靈活性,同一種數(shù)據(jù)資料可以采用多種方式編程處理。在具體處理時遵循的原則:在保證數(shù)據(jù)精確可靠的前提下,盡可能尋找簡練的方式,在編程時多費點功夫,使用起來就顯得方便、快捷。
[1]濮良貴,紀(jì)明剛.機械設(shè)計[M].8版.北京:高等教育出版社,2006:4-21.
[2]許天羽,鄭婷婷,戴賽帥.基于VB的高速艇航速預(yù)報程序開發(fā)[J].重慶理工大學(xué)學(xué)報:自然科學(xué)版,2011,25(2):34 -36
[3]喬愛科.機械CAD軟件開發(fā)實用技術(shù)教程[M].北京:機械工業(yè)出版社,2008:2-10.
[4]閆潔,江開勇.馬達(dá)外殼盒形拉深件成型模擬與沖壓級進(jìn)模設(shè)計[J].重慶理工大學(xué)學(xué)報:自然科學(xué)版,2011,25(9):25 -28
[5]許桎樟,李強,趙君官.基于ADAMS的軟導(dǎo)引結(jié)構(gòu)特性分析[J].四川兵工學(xué)報,2011(6):28-30.
[6]萬小利,高志.計算機輔助機械設(shè)計[M].北京:機械工業(yè)出版社,2005:22-28.
[7]劉銀遠(yuǎn).AutoLISP(10.0版)教程[M].北京:希望電腦公司,1991,37 -40.
[8]李志宏.使用AutoLISP程序進(jìn)行數(shù)據(jù)文件處理[J].林業(yè)建設(shè),2008(4):61-62.
[9]李建霞,肖啟敏.非圖形數(shù)據(jù)結(jié)構(gòu)在AutoLISP程序設(shè)計中的應(yīng)用[J].煤礦機械,2004(3):62-64.
[10]王漢財,金銀玉.淺談AUTOLISP在數(shù)據(jù)入庫過程中的應(yīng)用[J].吉林測繪,2009(4):54-56.
[11]姜松,姚敬,吳應(yīng)兵.CAD平臺下用AutoLISP進(jìn)行圖形數(shù)據(jù)檢查軟件開發(fā)[J].科技信息,2008(5):67-68.
[12]張漢春,廖金才.AutoLisp在管線數(shù)據(jù)轉(zhuǎn)換中的應(yīng)用[J].廣東科技,2009(20):65.