于曉
YU Xiao
大連傳森科技有限公司 遼寧大連 116600
Dalian Transen Technology Co.,Ltd. Dalian 116000
家電產品開發過程中,為了滿足各類人群的不同需求,在主型號設計完成并通過驗證后,還需設計基于已完成產品的子類型(系列)產品,即結構原理相同,而關鍵尺寸不同的產品。每次都需要結構設計人員根據要求重新設計,這樣不僅會浪費產品上市的寶貴時間,也會造成設計資源的大量浪費。是否可以設計出一個模型,當產品關鍵參數確定后,不需要結構設計人員再浪費時間在結構設計上,而是由計算機根據之前的模型,重新生成一個新產品,以縮短產品的開發周期,節約上市等待時間呢?在此背景下,筆者結合現有設計軟件功能,進行了家電系列化全參數自動設計的探索。
首先需要對產品進行分析,確定可變參數,并在裝配零件的表達式中建立可變參數,之后建立全參數化的單個零件,并在建立過程中應用C++語言的類思想,嚴格規定本零件的接口參數,通過零件之間的參數引用方法,將裝配件中的參數引入單個零件中,這樣,當改變裝配根部件中的表達式參數時,零件就會按預先的表達式進行改變。將這種方法應用到產品不同級別的所有零件上,當改變裝配根部件中表達式的參數時,所有與此參數關聯的零件都將按預先設計的規則變化,最終一個系列產品的新型號便產生了。之后對新生成的模型進行參數修正,通過菜單工具按鈕,快速生成后期生產、采購所需數據[1]。
模板創建、產品整體參數輸入界面創建、產品模型發布、產品屬性參數輸入、及產品BOM發布實現的過程如下:
以使用大門的裝配體為例,此類裝配體門的變化參數主要有長、寬、高、開門數量、開門方向、連接方式等,因此將這些因素作為門的輸入參數。門的橫梁變化的參數主要有型材的長、寬、高,其中的長一定是與父裝配中的寬有關,因此將這些參數作為子部件的輸入參數,同時把橫梁的長與父裝配中的寬建立連接。以此類推設計零件。
表達式建立:【文件】→【新建】→【裝配】→1001.prt。【工具】→【表達式】,在【名稱】中填入“X_Door”代表長度,在【公式】中填入“1000”,單位類型“長度”“mm”,點擊【應用】,一個表達式創建完畢。用同樣的方法創建其他表達式[2]。
表達式連接:【裝配】→【新建】→【模型】→1002.prt→【新建組件】→【確定】,1001裝配零件中加入了1002零件。將1002零件設為工作部件,選擇【工具】→【表達式】,在【名稱】中填入“X_Door_p01”代表橫梁1002零件長度,單位類型“長度”“mm”,鼠標放在“公式”文本框,點擊對話框靠下的【創建單個部件間表達式】,出現“選擇部件”對話框,選擇1001零件→【確定】,選擇表達式X_Door=1000→【確定】→【確定】,一個表達式連接創建完畢[2]。

圖1 模板參數關系示意圖

圖2 頂層參數輸入界面

圖3 屬性輸入界面
表達式使用:使用【拉伸】命令創建矩形方管,在“距離”框中點擊下拉列表,選擇【公式】打開“表達式”對話框,雙擊選擇“X_Door_p01”表達式,在【公式】對話框中寫入“X_Door_p01-10”,點擊【確定】,基于“X_Door_p01”表達式的實體結構創建完成。1002.prt零件中所有與“X_Door_p01”表達式相關的結構,都能以“X_Door_p01”表達式為紐帶進行設計。
子部件的輸入參數引用的是父部件的輸入參數,當零件數量增加時,參數名稱會變得難以理解,因此對于被引用的表達式,需要有統一的命名規則,并寫好備注。多個零件共同使用的表達式應同時包含子部件的父部件建立,避免零件再生時產生邏輯混亂,有利于參數的集中管理。
建模的方法還可以使用宏錄制,生成VC++、JAVA、C#等高級計算機語言[3]。如果對UG API函數有了解,也可以使用UG提供的API函數建立零件[4],這樣做的好處是,后期運行效率會更高。模板、宏錄制、API方法各有優缺點,可根據實際情況選擇。
利用以上方法,對產品的每一個零件進行參數的創建、連接、使用,最終形成一個全參數化的零件模板集合。模板參數關系如圖1所示。
輸入界面的作用是,間接對模型應用輸入參數,而非直接對模板模型操作,以達到避免因誤操作損壞模板參數的目的。
界面編寫:在零件設計模式下,點擊【文件】→【所有應用模塊】→【塊UI樣式編輯器】進入UI對話框編輯界面。點擊【基本】→【標簽/位圖】,在“對話框”樹列表中插入了一個節點“label0”,同時新增了一個“Group”組。點擊“Group”,在“屬性”框中找到屬性“label”,在值中填入“產品參數設計”。點擊“label0”,在“屬性”框中找到屬性“label”,刪除值“無標題”,點擊“Bitmap”,在值中輸入位圖存放路徑。點擊【數字】→【整型】,插入參數輸入框。按此方法插入其余參數輸入框。對話框結構設計完成后,選擇輸出語言C++,保存后生成三個文件:*.hpp,*.cpp,*.dlx。其中*.dlx文件是對話框界面文件,*.hpp和*.cpp是C++的程序接口文件,存放二次開發的程序源代碼[3]。調整后的參數輸入界面如圖2所示。
關鍵代碼:


以上代碼實現讀取模板模型零件中名稱為“N_BLOG_X”的參數,并限定此參數的輸入范圍5≤a≤15,滿足條件后,應用到模型中,并更新模型[6]。
啟動參數輸入界面后,UI界面中會顯示當前模型模板中的參數。當按要求填寫完所需參數后,點擊【確定】,程序將新填寫的參數應用到模型中,并更新模型,生成所需模型。

圖4 導出BOM界面

圖5 導出BOM計算
在產品模型發布前,要對所有零件進行精簡表達式處理,要求既要保留表達式參數,又要避免在多個型號產品同時存在時,零件之間產生參數干擾。
關鍵代碼如下:

以上代碼實現將part_tag標識的指定模型中的所有表達式讀入exps列表中,將表達式總數量讀入number_of_exps中,用循環方法實現將每個讀入的表達式的名稱與值分離,再用計算后的表達式值,編輯同名表達式[4]。表達式經處理后,會失去父子之間的引用關系,從而達到參數相對獨立的目的。
零件的相關制造信息,需手動填入具體參數,并根據公司實際需求調整屬性項。屬性輸入支持多零件相同參數可同時輸入的功能。界面設計如圖3所示。
關鍵代碼如下:


以上代碼實現新建名稱為"DB_PART_NAME"的屬性項,并將UI中對應ID的值復制到零件屬性值中。UG NX自身的Block UI界面可以實現常用名稱的預輸入。如常用單位,常用材質等,可在創建UI界面時,預先寫入UI界面中。
啟動屬性輸入界面后,可以查看模型原有屬性值。對原有屬性值相同的零件,可以同時選擇多個零件,一次更改多個相同屬性值的屬性項。若【去除所選零件參數】被選中,則所有被選中零件的所有參數均將被刪除。
零件屬性填寫完成后,需要生成產品的結構BOM,用于安排原材料采購,安排生產工藝等。同時要能夠生成生產專用BOM。BOM導出界面如圖4所示。
關鍵代碼如下:


以上代碼實現將顯示模型中所有不同零件的Tag值存入向量newbodyTAG中。CycleAllParts1是按深度方向遍歷模型獲取tag值的函數實現代碼。
啟動導出BOM功能,可以選擇多種導出方式。“單文件導出”指的是不同零件在一個prt文件中的裝配圖BOM導出方式。“多文件導出”指每個prt文件是一個零件的裝配圖BOM導出方式。導出BOM還可根據實際情況選擇一鍵導出或選擇導出。BOM中會含有三維實體模型的最大外形尺寸。在選擇合適的模板后,可以輸出零件的重量[7]。
通過實際的應用發現,某款家電產品原來從改型參數確定,到形成產品BOM,需要1個月的時間才能完成,而應用此全參數自動設計模型,計算機僅需1天時間便可完成,大大提高了設計速度,降低了出錯的概率和設計人員的重復勞動強度,達到了降低設計成本的目的。證明這種將設計思想以表達式的方式存儲在零件模板中,借助少量輔助開發工具,實現自動設計的思路,能夠滿足有系列化產品設計要求的設計場合,在人工成本不斷增加的現在,有著借鑒價值。同時,在激烈的家電市場競爭中,加快了投放市場的速度,為家電新系列產品搶占市場贏得了先機。