引言
Solidworks軟件是世界上第一個基于windows開發(fā)的三維CAD系統(tǒng),其操作非常符合windows用戶的習慣,因此新手入門上手比較容易。使用該軟件可以大大縮短設計時間,將產品快速投向市場,目前市面上做非標設計的工程師大多用的都是該軟件。同時,為實現數據共享,solidworks提供了VBA、VB.NET、C#等OLE的開發(fā)語言接口,極大地方便了軟件使用。
在企業(yè)日常使用過程中,模板制作、文檔屬性和標準件管理都是企業(yè)標準化和信息化的重要環(huán)節(jié)。solidworks文檔的屬性作為模型的附屬信息,是后續(xù)信息化的基礎信息。屬性可用于鏈接到工程圖以及輸出BOM等。同時,solidworks也提供了屬性標簽編制的工具程序,可利用它來生成模型的自定義屬性界面,在界面中能方便地進行模型的屬性修改等操作。
文獻闡述了一種進行solidworks文檔屬性及BOM定制的方法,可以提高日常工作效率與防出錯。但屬性編輯一般是手動填寫,BOM輸出也需手動處理或借助第三方插件完成,很多工作都是重復和煩瑣的。如果借助于VBA腳本按特定的規(guī)則進行文件屬性的填寫,同時通過遍歷模型特征樹及讀取屬性信息,快速生成BOM文件,就可避免很多設計過程中的重復性工作。
1文件屬性填寫VBA的實現
為了使VBA腳本能按特定的規(guī)則進行文件屬性的自動填寫,需要規(guī)范信息的輸入與輸出。本文的屬性名稱列表包括:項目、組件、名稱、規(guī)格、版本、外形尺寸、材料、單重、表面處理、類別、單機數量、設計、備注。
文獻闡述了如何用軟件自帶的屬性標簽編制程序來生成solidworks文件的自定義屬性界面,屬性標簽界面的內容與文件的屬性內容是一致的。材料和單重屬性可以是固定文字表達式,其他屬性則通過VBA填寫,同時也可以在執(zhí)行腳本后在自定義屬性界面手動修改。
考慮到在一個項目的設計過程中,一些如項目名稱、設計者等的屬性基本不變,可將信息存于xm1文件中,在整個項目期間僅進行一次寫入,其間直接讀取這些內容即可。對于一些特定材質的零件的表面處理,也可以設置默認的處理方式。屬性填寫的界面如圖1所示,xm1文件格式內容如圖2所示。
圖1屬性填寫界面
xm1文件讀取與寫入的部分腳本如下:
setxm1doc=CreateObject("Microsoft.xMLDOM")!創(chuàng)建xm1doc對象
xm1doc.Load(PathName)!加載xm1文件
ProjectName=xm1doc.getE1ementsByTagName("項目名稱").1tem(0).Text!讀取xm1節(jié)點
xm1doc.getE1ementsByTagName("項目名稱").1tem(0).Text=ProjectName!設置xm1節(jié)點
圖2xmI文件格式內容
在電子文檔存檔的同時,模型文件名字也可以作為輸入信息來源,零件名稱、規(guī)格圖號及種類等可以根據文件名字來進行判斷。solidworks電子文件存檔要求如下:所有3D模型文件分三類一自制件(包含零件和裝配件)、外購件(需要外購的電機、氣缸等及非標定制件等)和標準件(主要為緊固件,如螺釘、平墊、彈墊等)。
自制件命名:圖號+空格(半角)+名稱。
外購件命名:型號+空格+名稱+(品牌),空格和括號均為半角符號,如"R32x80s雙軸氣缸(亞德客)":沒有品牌的,名稱后面可空缺。
標準件命名:從邁迪或too1box等其他3D庫導入且以GB開頭的件,名字保持不變:非GB開頭的件,按外購件處理。
文獻介紹了如何利用VBA宏來自動分離零件文件名中的代號與名稱。本文通過讀取模型文件名字,并以半角符號的空格作為標志提取,可以得到零件名稱和規(guī)格圖號,實現功能的部分腳本如下:
'PartTit1e=圖號+空格+名稱
spacePos=Instr(PartTit1e,"")'獲取分隔標識符(空格)的位置
PartNumber=Left(PartTit1e,spacePos-l)'獲取圖號/規(guī)格
PartName=Mid(PartTit1e,l+spacePos,Len(PartTit1e)-spacePos-7)'獲取名稱
由于自制件的圖號是以公司項目代號開頭,與外購件這些型號可以區(qū)分開來,而標準件則是以GB開頭,因此可以憑此區(qū)分類別。
文獻提出了通過VBA腳本批量處理原有的solidworks模型屬性的思路和方法。
在裝配體下執(zhí)行腳本,可以對特征樹里面的每個部件和零件進行遍歷設置屬性,一次完成所有填寫,通過遞歸調用部件屬性設置函數,實現的部分腳本如下:
PrivatesubMysetComponentsProp(swMode1Doc2,ParentPartNo)
Components=swMode1Doc2.GetComponents(True)
ForEachswComponentInComponents'遍歷頂層子部件
setswComMode1Doc2=swComponent.GetMode1Doc2()
swConfigName=swComponent.ReferencedConfiguration
ret=setFi1eProperty(swComMode1Doc2,swConfigName,ParentPartNo)
IfswComMode1Doc2.GetType=swDocAssEMBLYThenCa11
MysetComponentsProp(swComMode1Doc2,ParentPartNo)'遞歸調用
Next
Endsub
屬性腳本執(zhí)行前的情況如圖3所示,屬性腳本執(zhí)行后的情況如圖4所示,所有屬性信息按預先設置自動填寫完成,如需修改,可在屬性標簽頁直接修改相應內容。
文獻講述了如何使用solidworks軟件創(chuàng)建模型與工程圖鏈接,來實現工程圖標題欄中相關內容的自動生成。因此,模型屬性可以自動鏈接到工程圖圖框中,如圖5所示,避免人為出錯。
2BOM清單輸出VBA的實現
縱觀整個B0M清單,除了零部件層次,其余信息可以直接從文件屬性中讀取,實現的部分腳本如下:
PrivatesubGetFi1eProperty(swMode1Doc2,configname)'獲取文件屬性
setcusPropMgr=swMode1Doc2.GetConfigurationByName(configname).
CustomPropertyManager
1RetVa1=cusPropMgr.Get2(B0M(3),Va10ut,Reso1vedVa10ut(3))'名稱
1RetVa1=cusPropMgr.Get2(B0M(4),Va10ut,Resolvedvalout(4))‘規(guī)格/圖號
零部件層次信息則從最頂層裝配體開始,遍歷特征樹即可獲取相關信息,實現的部分腳本如下:
PrivatesubMyGetComponents(Components)‘獲取裝配體頂層子部件
ForEachswComponentInComponents‘遍歷頂層子部件
If(False=swComponent.ExcludeFromBOM)ThensetswModelDoc2=swComponent.GetModel
Doc2()
CallGetFileProperty(swModelDoc2,swComponent.ReferencedConfiguration)
EndIf
Next
Endsub
最終生成的BOM清單如圖6所示。
3結語
本文結合solidworks模板的建立、定制屬性標簽界面、規(guī)范模型的命名、默認設置的xml儲存以及VBA宏程序等技術,實現了Solidworks模型文件屬性的一鍵快速填寫和B0M文件的快速生成,避免了設計過程中的重復性工作,大大提高了設計文件的編制效率,同時為企業(yè)的標準化和信息化夯實了基礎。