胡延平, 殷寶連, 吳城玉, 王鑫磊
(合肥工業大學 機械工程學院,安徽 合肥 230009)
隨著我國建設步伐的加快,工程橋梁在城市交通中的作用日益凸顯。鋼模板作為建筑工程中不可或缺的重要施工工具,被廣泛應用在城市交通、公路、鐵路等各個重要工程中[1]。由于鋼模板屬于訂制產品,同種類型鋼模板存在不同規格尺寸的結構特征,因此,對鋼模板的設計可采用參數化設計[2],以加快圖紙的設計速度,提高鋼模板的設計效率。
近年來各領域很多學者借助不同的商業軟件進行參數化設計研究,相繼取得了一定的研究成果,如文獻[3]將HyperWorks軟件應用于參數化有限元分析平臺的研究。但目前國內外大多數學者對鋼模板的參數化設計建模與出圖的研究很少涉及,對其建模與出圖的方法更是缺少詳細的說明?;诖?本文將Visual Studio 2010作為開發平臺,借助C++開發語言,在SolidWorks軟件二次開發的基礎上,對橋梁墩柱鋼模板參數化建模過程與自動出圖方法進行研究,并以橋梁圓墩鋼模板為實例進行具體演示,詳細說明改變參數完成零件參數化建模和自動出圖的方法及關鍵技術,實現橋梁墩柱鋼模板的參數化建模與工程圖紙生成。
基于Solidworks的參數化建模主要有2種設計方式:一種是完全編程技術,由設計者根據實際需求,通過程序代碼編譯生成符合用戶要求的零件模型,模型完全由編寫的程序驅動生成,此技術每輸入一次模型參數,程序就要重新驅動建立相應的模型,嚴重降低開發效率;另一種是將零件制成三維模型模板,通過更改模板相應的尺寸,在保證零件結構不發生變化的前提下,利用軟件提供的應用程度界面(application programming interface,API)編程接口來驅動該模板,稱為尺寸驅動技術[4],但是該技術只適用于固定零件特征,對特征隨型變化的模型無效。
基于此,本文結合2種技術的優缺點,首先利用尺寸驅動技術思路將事先建立的模板保存并將保存路徑輸入到SolidWorks函數的打開文件函數OpenDoc6中,以實現模板文件的調用;然后借助于編程技術控制模板模型特征隨型生成;最后通過尺寸驅動模型尺寸參數完成建模。打開函數OpenDoc6各參數的含義見表1所列。

表1 SldWorks->OpenDoc6各參數說明
模型模板質量的好壞直接影響整個參數化設計的結果,因此,創建符合參數化設計要求的鋼模板就顯得尤為重要。
由于鋼模板結構存在多個重復特征(如三角肋、法蘭孔、緯(經)肋等),在創建這些特征時,需要先創建首個特征,再依據該特征陣列生成多個特征(下文將此類特征稱作源特征)。然而,隨著模型參數的變化,源特征的位置不能隨之動態調整,致使肋板和特征孔不能依次對稱排布,造成部分特征的丟失,進而引發應力集中或者因強度不足發生斷裂的問題。因此以緯肋為例,采取如圖1a、圖1b所示的創建方案來確定源特征排布方式,即在鋼模板高度的1/2處,按緯肋個數奇、偶數分別創建源特征;然后創建鋼模板其余特征,并選定初始模板參數完成對鋼模板模型的創建操作。

圖1 肋板設計排布圖
為了保證參數化設計后模型的合理性,應對模板進行預處理操作。模板預處理主要是對鋼模板模型中需要修改的相關尺寸進行約束和參數關聯[5],即在建模時充分考慮添加合理的約束,實現參數的全約束,以保證尺寸改變后模型的聯動效果。實現參數化鋼模板模型參數全約束不僅要求所建草圖完全定義,還要確保各個獨立的尺寸參數之間建立必要的關聯,可以通過軟件中的方程式功能完成尺寸關聯,方程式形如“因變量”=“自變量”。
以圓墩鋼模板為例,在添加方程式前,應對圓墩鋼模板結構進行仔細分析,充分考慮面板、橫(圓)法蘭、豎法蘭、三角肋、緯肋與經肋之間相互配合關系,以保證相關尺寸發生改變時對應鋼模板模型不會發生重建錯誤。
不同于其他零件結構,橋梁墩柱鋼模板隨著尺寸參數變化,零件模型不再是簡單的尺寸更替,隨之變化的還有零件特征在數量上的增加或減少。為此,研究出一種特征隨型智能排布設計的方法。以圓墩鋼模板為例,圓法蘭上的特征排布可按照定角度陣列排布實現,此處不作贅述。本節重點研究豎法蘭上特征的隨型智能排布法。
該特征隨型智能排布方法基于方程式、模型、代碼程序三者展開設計。將經過模型預處理得到的模板通過特征壓縮函數EditSuppress2與特征解壓函數EditUnsuppress2實現單一控制奇、偶緯肋源特征的壓縮與解壓,以達到隨著圓墩高度改變特征隨型變化的“開關效果”;運用SolidWorks中的定距陣列功能在鋼模板高度的H/2處左右陣列源特征,記錄陣列數,再通過程序控制陣列數即可控制排布特征的個數,陣列數的具體數值可通過程序代碼智能計算得出;最后在豎法蘭上最靠近圓法蘭的孔、三角肋、緯肋之間或三者與圓法蘭之間發生干涉的情況設置條件控制,編寫防干涉代碼。至此,整個模型搭建完成,當用戶在交互界面輸入模型參數后,系統會智能識別用戶輸入的數據,對模板初始參數自動更新,并將這些數據寫入控制對應特征的程序中,進一步控制特征按照指定的尺寸參數智能排布模型特征,完成特征隨型智能排布設計。
特征隨型智能排布設計具體流程如圖2所示。

圖2 特征隨型智能排布設計流程
為了滿足用戶對軟件二次開發的需求,SolidWorks軟件公司提供了強大的API應用程序開發接口,接口中的函數為開發者直接訪問軟件帶來極大的便利。開發者通過該接口支持的開發工具(如VC++、VBA、VB等)對SolidWorks函數進行調取使用,進而拓展軟件的功能。軟件二次開發有2種開發模式:一種是使用OLE方式開發,借助生成的*.exe文件調用軟件中的功能,然而這種技術無法集成到軟件系統中去;另一種模式是生成動態鏈接庫(dynamic link library,DLL)文件,加載和調用這個DLL文件就可以實現軟件的二次開發,即以插件的形式進行開發。第2種模式實現方式可以與原開發對象程序共享同一個進程,大大節省了內存[6-8]。因此,本文選用以生成插件的形式進行二次開發。
采用第2種模式進行二次開發之前,需要先將該技術與軟件的開發接口完成搭建。搭建方法主要有工程向導、ATL對象向導等。由于工程向導搭建方法已經被淘汰,本文主要闡述ATL對象向導。隨著VS版本的不斷升級,目前以采用由ATL向導開發的SolidWorks COM Addin向導來搭建接口用戶只需安裝SolidWorks API SDK工具包即可完成接口搭建,至此可對軟件進行二次開發[9]。編好程序代碼后,對該項目進行編譯生成“.dll”文件,在SolidWorks 2019中加載即可進行參數化設計。
模板要實現參數化建模,零件的主要尺寸參數就必須可供用戶修改,因此,調用軟件中的API函數并設計人機交互界面來完成。編程方法可以通過在配置中設置鋼模板的各個參數來更改零件的尺寸值,以實現鋼模板的參數化設計功能。具體方法是將鋼模板中需要用戶提供的可變化的尺寸參數包含到配置管理器中,通過軟件的二次開發接口,對配置管理二次開發,完成整個模型的參數化建模設計[7]。
本文通過調用ISetConfigurationParams函數來設置配置中的參數值,該函數的各參數說明見表2所列。

表2 ConfigurationManager->ISetConfigurationParams參數說明
自動生成工程圖的方法有2種:一種是通過調用軟件的API函數生成對應工程視圖,再對工程圖進行尺寸標注等操作,該方法程序編程量很大且要求開發人員能熟悉調用軟件中的API函數;另一種是借助軟件提供的全相關性,借助零件模板建立工程圖模板,當三維模型零件更改時,自動更新工程圖尺寸,完成自動出圖操作[4]?;诖?本文選擇用第2種方法。然而在創建時因為軟件中自帶的一些國標模板的圖紙格式常不符合用戶的圖紙要求,所以在建立工程圖模板前通過對圖層設置、圖紙屬性等操作自行設計工程圖圖紙格式并保存,使圖紙模板達到工程實際要求。選擇保存的工程圖紙,從三維模型中創建工程圖模板即可。
由于軟件是借助建立好的零件模板生成工程圖,當模型零件的尺寸參數發生改變時,相應的工程圖也會隨之發生改變,使得模型出現視圖比例不合理、尺寸混亂等現象?;诖?本文針對此類現象作進一步研究。
2.2.1 視圖比例調整
智能調整視圖比例的主要思路是將變化后的包絡線框的對角線長度等于變化前的長度,借助粒子群算法,仿照鳥群覓食的行為,使得群體達到最優的方法,進而獲得最優的視圖比例值。確定適應度函數為:
(1)
其中:n為工程視圖的數量;Dk、Dk′分別為尺寸變化前、后的對角線長度值;c、c′分別為圖紙更新前、后的視圖比例。適應度函數F(c′)越大,尺寸變化前、后包絡線對角線長度越接近,由此調整視圖比例轉化為求解函數F(c′)最大值問題。
具體方法是:先調用GetOutline函數得到視圖包絡線框對角線的2個頂點,借助程序計算該對角線的長度;接著確定粒子群的規模為5個粒子,區間范圍在1~100,定義粒子的位置和速度;通過(1)式評價每個粒子的適應度,獲得個體和群體歷史最優解;不滿足條件時,通過更新粒子位置和速度來更新種群,繼續返回算法中。更新粒子的公式[10]為:
Vi=ωVi+c1r1(pbesti-Xi)+
c2r2(gbest-Xi)
(2)
Xi=Xi+Vi
(3)
其中:Xi、Vi分別為第i個粒子的位置和速度;ω為慣性權重;c1、c2為學習因子;r1、r2為[0,1]區間的隨機數;pbesti為第i個粒子的歷史最優位置;gbest為粒子種群最優位置。智能視圖比例調整流程如圖3所示。判斷所用算法是否滿足最大迭代次數或適應值閾值來進行繼續或終止的操作,進而得到最優解,最后通過調用ScaleRatio函數設置計算得來的最優視圖比例。

圖3 視圖比例調整流程
2.2.2 尺寸智能標注
由于SolidWorks軟件是借助建立好的三維模型投影生成工程圖,可以先通過調用AddDimension2函數在零件模板的對應模型特征上標注相應尺寸,設置選項“為工程圖標注”,并合理設置尺寸標注的位置參數。尺寸標注完成后,系統通過在工程圖中識別對應特征,借助InsertModelAnnotations3函數自動將模型尺寸從零件中插入到工程視圖中的相應位置,此方法很好地規避了尺寸不隨型和尺寸導入凌亂的問題,從而得到正確的工程圖紙。
2.2.3 注釋的優化調整
模型完成建模后,在工程圖中標注符合企業圖紙標準的注釋是非常必要的。注釋主要是對技術要求、焊接符號等進行注解說明。目前對注釋位置調整主要是先利用DAT文件保存工程圖模板中的注釋信息,再將這些信息進行計算,提取出注釋的相對位置信息,最后將注釋對應在合理的位置上。但該操作較為復雜且易出錯,因此,通過標注約束元的方法將注釋與零件的邊線添加約束,使其位置相對于零件邊線保持固定不變。
具體操作是在一個新建圖層中添加草圖點,并使其完全約束,再在其附近添加注釋,設置相關屬性,添加兩者之間的約束即可。對于焊接符號的約束元,則是由箭頭所指的零件邊線,當焊接符號指向零件邊線時,約束完全定位,從而達到注釋位置不會隨模型變化而改變的效果。
以橋梁墩柱的圓墩鋼模板為例,具體闡述零件實現參數化建模與自動出圖的全過程。圓墩鋼模板的三維模型(初始化尺寸)如圖4所示。

圖4 圓墩鋼模板三維模型
為方便程序更好地控制零件對應的尺寸參數,通過軟件自帶的方程式查看并編著需要修改的尺寸參數對象的名稱,如“圓墩半徑@草圖1”,以便后面查詢與修改。在進行二次開發前,應確保SolidWorks已經與Visual Studio 2010完成環境的搭建操作。首先,在項目中創建一個非模態對話框,以便用戶可以在當前對話框時與其他窗口之間進行切換;然后編輯對話框中的內容,根據用戶提供的模型尺寸參數,向對話框添加相應的控件,并添加對應的字符串變量。對話框界面效果如圖5所示。
最后添加事件響應函數按鈕,將按鈕名稱改為“生成三維模型”,并在該函數內部添加控制尺寸變量的代碼。代碼編寫結束后,用戶編輯框中輸入相關參數值,點擊“生成三維模型”按鈕即可完成對圓墩鋼模板的三維參數化建模。實現修改尺寸零件參數化建模功能的部分代碼如下。
CComBSTR fileName(-T("C:\***\圓墩參數化模板.SLDPRT"));//定義文件名
iSwApp-dlg->OpenDoc6(filename,swDocPART,Options,NULL,&Errors,&Warnings,&swDoc)//打開文件
CComBSTR Name(-T("默認"));//定義配置名
long paramCount=25;//定義修改尺寸參數個數
BSTR *paramNames=new BSTR[25];//初始化
BSTR *paramValues=new BSTR[25];//初始化
CString a0="圓墩直徑@草圖1";//定義參數名
CString a1="圓墩高度@拉伸-薄壁1";//定義參數名
…
pConfigurationManger->ISetConfigurationPara-ms(Name,paramCount,paramNames,paramValues,&retval);//設置參數值
m-iModelDoc->ViewZoomtofit();//調整視圖全屏顯示
pConfigurationManger.Release();//釋放配置器
swDoc=NULL;//釋放ModelDoc對象

圖5 對話框設計效果圖
零件修改尺寸參數的程序搭建完成后,只需對零件中隨參數變化而改變的特征添加關鍵代碼即可控制零件特征合理排布及正確顯示。對該類模型特征數量或距離定義參數名,形如特征數量定義“int num0=0”、特征距離定義“double numM=0.0”,以便用代碼設置條件加以控制特征的生成。特征智能排布設計部分關鍵代碼如下:
//判斷肋板個數及識別肋板奇偶數代碼
int cnt;//肋板個數
intk=(int)(h-2 *t2);//h為圓墩高度t2為圓法蘭厚度
if (k% 400 !=0)//肋板間距定為400 mm
{
cnt=(int)(k/400.0);
}else{
cnt=k/400-1;
}
if (cnt % 2==0)//如果緯肋個數為偶數
{//壓縮奇數肋,解壓偶數肋
swDocExt->SelectByID2("旋轉4",L"BODYFEATURE",0.0,0.0,0.0,VARIANT-FA-LSE,0,NULL,swSelectOptionDefault,&bRetval);//選中奇數肋特征“旋轉4”
swDoc->EditSuppress2(&bRetval);//對特征“旋轉4”壓縮
…
//壓縮偶數三角肋,解壓奇數三角肋
…
}
//特征防干涉部分代碼(以陣列孔為例,陣列孔數量參數名為num3)
If (h/2 000.0-0.1-0.2*(num3-1)≤0.05)
{
num3-=1;//陣列孔與尾孔發生干涉減少1個陣列孔
}
點擊“生成工程圖”按鈕,系統自動調取工程圖模板,通過智能識別交互界面的模型參數,完成自動更新,模板圖紙自動完成工程圖出圖,圖紙效果如圖6所示。

圖6 工程圖出圖效果
自動出圖及優化部分代碼如下。
//打開工程圖關鍵代碼
CComBSTR fileName(-T("C:\***\圓墩參數化模板.SLDDRW"));//定義文件名
iSwApp-dlg->OpenDoc6(fileName,3,0,L"",&Errors,&Warnings,&m-iModelDoc);//打開工程圖模板
//調整視圖比例幾個關鍵代碼
pDraw->ActivateView (-T("工程圖視圖1"),&retval);//激活工程視圖
pDraw->get-IActiveDrawingView(&pView);//獲取工程視圖
pView->IGetOutline(outline);//獲取包絡線框數組
pView->get-IScaleRatio(scal);//獲取當前圖紙比例
pView->put-IScaleRatio(scal);//設置圖紙比例
本文介紹了一種以Visual studio 2010為開發環境、C++為開發語言、SolidWorks 2019為特征建模軟件,針對工程橋梁墩柱鋼模板設計的參數化建模及出圖方法。通過對橋梁圓墩鋼模板實例的具體演示,詳細闡述了修改參數實現特征隨型參數化建模與自動出圖的方法及關鍵技術。通過該方法設計的參數化建模平臺能夠實現根據用戶輸入自動更新模型參數、智能排布,能夠自動生成二維工程圖紙,使得同類型鋼模板的設計難度降低,大大縮短設計周期,提高了系列化三維橋梁墩柱鋼模板的設計效率,具有一定的研究與借鑒意義。