程澤明,唐露露,秦 凱,姚 禮,符純?nèi)A
(四川理工學(xué)院機(jī)械工程學(xué)院,四川自貢 643000)
AutoCAD功能強(qiáng)大,在機(jī)械制造、船舶、汽車、航空航天等行業(yè)應(yīng)用的非常廣泛,給設(shè)計(jì)帶來(lái)很大的方便。但其交互繪圖命令繪圖仍然繪圖效率不高。針對(duì)具體成熟產(chǎn)品的CAD二次開(kāi)發(fā)是CAD應(yīng)用取得實(shí)效的關(guān)鍵環(huán)節(jié)[1]。
在繪制裝配圖中,明細(xì)表是必不可少的內(nèi)容,同時(shí)也是報(bào)表統(tǒng)計(jì)、匯總輸出等工作的基本依據(jù)。明細(xì)表的本質(zhì)就是圖號(hào)(零件)清單。在CAD圖紙中,裝配圖明細(xì)表一般是在圖紙繪制結(jié)束后,根據(jù)裝配圖所包含零件的各項(xiàng)內(nèi)容,按順序逐行手工填入明細(xì)表中。在AutoCAD軟件中,如果直接使用AutoCAD繪圖命令來(lái)繪制明細(xì)表并填寫明細(xì)表的內(nèi)容,則相當(dāng)繁瑣,且效率極低。雖然也有不少對(duì)明細(xì)表填寫的開(kāi)發(fā)文章,但對(duì)成套產(chǎn)品開(kāi)發(fā)的機(jī)械明細(xì)表卻不適用,原因是必須先構(gòu)造明細(xì)表所有詳盡具體內(nèi)容的文本或EX?CELL文件。由于產(chǎn)品不同,導(dǎo)致裝配圖內(nèi)容不同,也導(dǎo)致了機(jī)械明細(xì)表內(nèi)容的不確定性。使用命令手工填入輸入時(shí)極易出錯(cuò),效率低,也不能保證數(shù)據(jù)的統(tǒng)一性,導(dǎo)致匯總處理的難度就更大了。由于二次開(kāi)發(fā)是CAD應(yīng)用取得實(shí)效的關(guān)鍵環(huán)節(jié),因此本文提出自動(dòng)填寫機(jī)械明細(xì)表的參數(shù)化設(shè)計(jì),以提高程序設(shè)計(jì)質(zhì)量與產(chǎn)品開(kāi)發(fā)效率。
一般來(lái)講,產(chǎn)品圖紙由裝配圖、部件圖和零件圖組成。裝配圖包括圖形、技術(shù)要求、標(biāo)題欄、明細(xì)欄等幾大部分。明細(xì)欄依次列出零件序號(hào)、代號(hào)、名稱、數(shù)量、材料、備注等內(nèi)容,在實(shí)際產(chǎn)品的開(kāi)發(fā)中,明細(xì)表往往由GB件、非標(biāo)件組成,按照傳統(tǒng)的填寫方式已不能滿足產(chǎn)品開(kāi)發(fā)的要求。設(shè)計(jì)開(kāi)發(fā)思路是:自動(dòng)構(gòu)造明細(xì)表列表[2]后,循環(huán)逐個(gè)取出表中的元素填寫明細(xì)表。關(guān)鍵技術(shù)是構(gòu)造明細(xì)表列表,其構(gòu)造方法如圖1所示。
對(duì)標(biāo)準(zhǔn)件如螺母、螺栓、墊圈等明細(xì)表的填寫,先建立數(shù)據(jù)庫(kù),通過(guò)的國(guó)標(biāo)代號(hào)(例"GB/T6170-2000")和螺母直徑(d)為查詢條件,并讀取標(biāo)準(zhǔn)件相關(guān)數(shù)據(jù),主要是單重??傊馗鶕?jù)數(shù)量自動(dòng)計(jì)算。
對(duì)于非標(biāo)準(zhǔn)件,先將非標(biāo)件標(biāo)題欄相關(guān)數(shù)據(jù)寫入數(shù)據(jù)庫(kù)[3],作為讀取數(shù)據(jù)的數(shù)據(jù)源。如圖2所示。然后通過(guò)圖樣代號(hào)和數(shù)量,到數(shù)據(jù)庫(kù)中找到符合條件的記錄并讀取非標(biāo)準(zhǔn)件相關(guān)數(shù)據(jù)(如材料、重量等)構(gòu)造非標(biāo)件明細(xì)表列表。這是本工具的關(guān)鍵技術(shù)之一,其函數(shù)如下。運(yùn)行本函數(shù)需要先連接數(shù)據(jù)庫(kù),VLISP[4]與數(shù)據(jù)庫(kù)連接本文不再贅述。
圖2 非標(biāo)件相關(guān)數(shù)據(jù)存入數(shù)據(jù)庫(kù)的截圖
;=================================
;函數(shù)功能:提供圖樣代號(hào)和數(shù)量構(gòu)造非標(biāo)件的明細(xì)表列表。
;參數(shù)說(shuō)明:secq——明細(xì)欄序
;tcode——圖紙代號(hào),如 5DB.075.002
;num----------數(shù)量
;demo----------備注
;使用方法:
;(GetBomList"3""5DB.750.002""8""demos")
;=================================
圖1 生成明細(xì)表內(nèi)容的方法
(defun GetBomList(secq tcode num demo/rValue rList sql weightAll)
(if (setq connObject(ado_connect))
(progn
(setq sql(strcat"select
partname,material,weight from SheetTitle where
tcode='"tcode"'")
);setq構(gòu)造查詢用SQL語(yǔ)句
(setq rList(ado_dosql connObject sql))
(ado_disconnect connObject)
;關(guān)閉數(shù)據(jù)庫(kù)
);progn
);if
(if(>(length rList)1)
(progn
(setq rList(nth 1 rList))
(if(not(wcmatch num"*.*,*@*"))
;只為數(shù)字時(shí)計(jì)算
(setq weightAll(rtos(*(atoi num)
(atof(nth 2 rList)))))
(setq weightAll"")
);if
(setq rValue(list secq tcode
(nth 0 rList)
num(nth 1 rList)(nth 2 rList)
weightAll demo))
);progn
(setq rValue(list secq tcode""
num""""""demo))
);if
rValue
);defun
對(duì)給定圖幅,標(biāo)題欄位置確定(每幅圖以(0,0)為左下角點(diǎn)),因此定義一個(gè)全局變量(pt_base_titlebar)為程序繪制明細(xì)表格作為基點(diǎn)即可。填寫明細(xì)表填寫流程圖如圖3所示。
通過(guò)構(gòu)造如下程序所示bom表,運(yùn)行函數(shù)
圖3 填寫明細(xì)表流程圖
(write_list_DF bom),得到圖4所示明細(xì)表內(nèi)容。
(setq bom(list
(GetBomList"1"
(strcat"8DB.070."
MainPostCode".1")"1""")
(GetNutBom"2""GB/T6170-2000"
"螺母M20""20""16""")
(list"3"""(strcat"拉帶絕緣1.5X160X"
(rtos L_LD 2 0))"4""絕緣紙板
100/00"(rtos weight_8 2 3)
(rtos(*weight_8 4)2 3)"")
(GetBomList"4"(strcat"5DB.023."
MainPostCode)"5"""))
);setq
自動(dòng)填寫明細(xì)表工具,經(jīng)實(shí)際使用并結(jié)合用戶習(xí)慣修改,使用效果良好,能較大幅度地提高繪圖效率。尤其是對(duì)成套產(chǎn)品進(jìn)行二次開(kāi)發(fā)的明細(xì)表填寫,只需局部修改構(gòu)造明細(xì)表的列表即可,因而繪圖效率更高。另外,本實(shí)用程序通用性強(qiáng),可作為繪制裝配圖的一個(gè)模塊,也可作為整套產(chǎn)品CAD的一個(gè)模塊,也可作為單獨(dú)的實(shí)用工具使用,具有較好的實(shí)際使用價(jià)值和推廣意義。
[1]柳博,楊明忠,國(guó)順生.基于關(guān)系型數(shù)據(jù)庫(kù)的BOM設(shè)計(jì)查詢策略[J].現(xiàn)代制造工程,2004(2):28-30.
[2]張志利.AutoCAD 2000定制與開(kāi)發(fā)手冊(cè)[M].武漢:華中理工大學(xué)出版社,1999.
[3]王宇虹,朱亦文,陳格,等.Access數(shù)據(jù)庫(kù)系統(tǒng)開(kāi)發(fā)從基礎(chǔ)到實(shí)踐[M].北京:電子工業(yè)出版社,2006.
[4]吳永進(jìn),林美櫻.AutoCAD完全應(yīng)用指南[M].北京:科學(xué)出版社,2009.