王加攀 吳仁智 秦 磊
(同濟大學機械與能源工程學院 上海 201804)
PPR管又稱三型聚丙烯管,由無規(guī)共聚聚丙烯注塑而成[1],廣泛應用于建筑物內(nèi)的冷熱水系統(tǒng)、采暖系統(tǒng)、可直接飲用的純凈水供水系統(tǒng)、中央集中空調(diào)系統(tǒng)等[2]。傳統(tǒng)的給水系統(tǒng)采用的設(shè)計軟件是Auto CAD,但其繪圖效率低下,設(shè)計質(zhì)量往往也不能滿足要求[3]。BIM技術(shù)在工程中的應用極大地減少了設(shè)計、施工中不必要的浪費,解決建筑行業(yè)的低效能問題[4]。目前應用于給排水的主要三維建模軟件是RevitMEP,通過生成三維模型實現(xiàn)所見即所得,減少了因主觀想象失誤而造成的設(shè)計錯誤[5]。文獻[6]分析了BIM技術(shù)在建筑給排水工程設(shè)計中的應用及存在的問題;文獻[7]以某工業(yè)園區(qū)的綜合樓為例,運用BIM技術(shù)進行了給排水管道設(shè)計;文獻[8]通過制作Revit相關(guān)族構(gòu)件和開發(fā)配套的程序,布置了給排水衛(wèi)浴裝置。
上述文獻研究了利用RevitMEP進行給排水設(shè)計的方法和流程,但仍存在以下問題:(1) 現(xiàn)有構(gòu)件族庫缺少符合中國國家產(chǎn)品標準的PPR管構(gòu)件[9],Revit創(chuàng)建的模型還不能達到預制加工的深度,特別是管材、管件及閥門閥件等Revit族尚沒有統(tǒng)一的族庫標準,且Revit在預制加工圖等方面還不完善[10];(2) Revit軟件和ANSYS等大型有限元軟件不能有效對接[11],使得在需要進行數(shù)值模擬計算時受到限制;(3) 管線布置時自動化、智能化程度不高。
Revit是一個參數(shù)化的設(shè)計軟件,最早推出參數(shù)化建模技術(shù)的是PTC公司的Pro/E[12]。Creo軟件是PTC公司推出的一種基于特征建模技術(shù)和統(tǒng)一數(shù)據(jù)庫參數(shù)化的通用CAD系統(tǒng),PTC軟件被廣泛應用于機械產(chǎn)品的布線和布管設(shè)計[13-16]。針對上述Revit設(shè)計的問題,本文提出在Creo軟件中進行PPR冷熱水系統(tǒng)設(shè)計的方法,采用Creo二次開發(fā)的方式,建立標準的PPR管材管件三維標準庫,并開發(fā)出冷熱水管的自動布管系統(tǒng),實現(xiàn)冷熱水系統(tǒng)的智能設(shè)計,提高設(shè)計效率。
開發(fā)的功能框架如圖1所示,點擊對應的子菜單即可調(diào)用相應的功能模塊。
圖1 冷熱水系統(tǒng)功能模塊
冷熱水系統(tǒng)主要包括PPR三維標準庫和自動布管兩部分。三位標準庫系統(tǒng)以GB/T 18742.2—2002和GB/T 18742.3—2002為標準進行建立。包括管件、管材和閥門配件三個大類,按照手冊的分類又將管件分為28個小類別,管材分為4個小類別,閥門配件分為6個小類別,這些標準件足以為大多數(shù)的冷熱水管路系統(tǒng)設(shè)計提供所需要的標準零件。自動布管是用程序來驅(qū)動系統(tǒng)自動裝配零件進而替代手動裝配。進行冷熱水系統(tǒng)設(shè)計時的一般流程如下:
(1) 在開發(fā)的對話框中選擇需要的管件或管材型號,注意選擇管材后應輸入PPR管的長度,即可快速完成標準件的設(shè)計,并保存在指定的文件夾內(nèi)。
(2) 新建裝配體。
(3) 選擇自動布管系統(tǒng)菜單,選擇需要的布管方法,完成PPR管路布管。
PTC公司為Pro/E軟件提供二次開發(fā)工具集Pro/Toolkit。本系統(tǒng)采用同步模式下的DLL模式,在Microsoft Visual Studio 2010中新建MFC DLL工程項目,編寫信息文件和程序代碼。DLL模式下應用程序的入口函數(shù)是User-initialize,它包含Pro/Toolkit應用程序的所有初始化進程;終止函數(shù)是User-terminate函數(shù),在Creo終止應用程序時被調(diào)用。最后編寫注冊文件,并在Creo中通過“工具”→“輔助應用程序”命令,即可注冊運行二次開發(fā)的功能模塊[17]。
標準庫中包含兩個集合:一個是三維模板庫,儲存在計算機硬盤中;另一個是尺寸參數(shù)庫,以數(shù)據(jù)表格的形式存儲在Access數(shù)據(jù)庫中,基本原理如圖2所示。首先,可通過Creo建立某型號零件三維模型作為該型號零件的模版,并將其存儲在模版庫中。然后將該型號下不同規(guī)格的尺寸等可變參數(shù)值輸入至數(shù)據(jù)表中,并將其存儲至Access數(shù)據(jù)庫中。當需要調(diào)出這一型號下某一規(guī)格零件時,可通過應用程序搜Access數(shù)據(jù)庫并提取該規(guī)格的參數(shù)數(shù)據(jù),將該組數(shù)據(jù)賦值給該型號三維模版,就可生成所需規(guī)格的零件三維模型。為方便調(diào)用,可利用MFC類庫設(shè)計人機交互界面。
圖2 三維標準庫原理圖
模板庫中的三維模板,可以通過一組參數(shù)和關(guān)系控制零件的外形和大小(并不需要零件中的所有尺寸參數(shù)),稱這些參數(shù)為驅(qū)動參數(shù)。
建立參數(shù)化標準件模版的主要步驟:(1) 基于特征的三維建模;(2) 通過Creo“參數(shù)”工具添加驅(qū)動參數(shù);(3) 將所建立的驅(qū)動參數(shù)與實體模型中可變變量建立某種映射關(guān)系。如圖3所示,Creo“關(guān)系”工具中建立了模型尺寸變量和驅(qū)動參數(shù)的函數(shù)映射關(guān)系,尺寸變量是由驅(qū)動參數(shù)進行驅(qū)動變化的,在驅(qū)動過程中,模型中的拓撲形狀變量(約束變量)并不發(fā)生改變。
圖3 等徑三通參數(shù)化建模
圖4為儲存在Access數(shù)據(jù)庫平臺下的等徑三通驅(qū)動參數(shù)表。
圖4 等徑三通驅(qū)動參數(shù)存儲
采用ActiveX數(shù)據(jù)對象(ActiveX Data Object,ADO)技術(shù)對驅(qū)動參數(shù)數(shù)據(jù)庫進行訪問。訪問步驟如下:
(1) 應用#import宏將ADO動態(tài)庫文件msado15.dll加載到工程中,這個動態(tài)庫文件提供了對ADO對象的封裝。
(2) 創(chuàng)建Connection對象,調(diào)用Open()函數(shù)連接驅(qū)動參數(shù)數(shù)據(jù)庫;創(chuàng)建Recordset對象,調(diào)用Open()函數(shù)取得查詢結(jié)果。
(3) 應用Recordset對象提供的函數(shù)移動、查看、獲取各個記錄。提取其中的m_Name名稱信息,將其顯示在對話框下拉表中,具體代碼如下:
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open((_bstr_t)(_T("select*from
ST")),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
m_pRecordset->MoveFirst();_variant_t var;CString strvalue;
while(!m_pRecordset->adoEOF){
var=m_pRecordset->GetCollect(_T("m_Name"));
if(var.vt!=VT_NULL)
strvalue=(LPCSTR)_bstr_t(var);m_MingCheng.AddString(strvalue);
m_pRecordset->MoveNext();}
(4) 提取指定規(guī)格標準件的尺寸信息:m_pRecordset->GetCollect(_T("mdi")),mdi即存儲在數(shù)據(jù)庫中的驅(qū)動參數(shù)。
用戶操作界面是由MFC建立的非模式對話框和控件的方式來進行設(shè)計的,代碼如下,以等徑三通和冷水管為例,設(shè)計的管件和管材對話框如圖5和圖6所示。
圖5 等徑三通對話框
圖6 冷水管對話框
st dlgst;
int PushButtonActionst()
{AFX_MANAGE_STATE(AfxGetStaticModuleState());
int status;
if(!IsWindow(dlgst.m_hWnd))
status=dlgst.Create(IDD_DIALOGst,NULL);
if(status==0)
{AfxMessageBox(_T("對話框創(chuàng)建失敗."));
}
dlgst.ShowWindow(SW_SHOW);
return true;}
選定好指定規(guī)格的標準件以后,點擊確定按鈕,在數(shù)據(jù)庫訪問接口技術(shù)的基礎(chǔ)上,對模板實現(xiàn)參數(shù)化驅(qū)動并將零件調(diào)入到Creo環(huán)境。程序?qū)崿F(xiàn)的流程如圖7所示。
圖7 參數(shù)化驅(qū)動流程
利用Creo布管即將PPR管件、管材等在Creo環(huán)境中裝配起來,將多個元件組合到一個組件中?;驹砣鐖D8所示。
圖8 自動布管原理
設(shè)計的自動布管模塊有交叉塊自動布管、冷水布管、熱水布管三部分,上述的交叉塊是由同濟大學與上海一翔機械科技有限公司發(fā)明的一種新型水管件,如圖9所示。交叉塊的材料為無規(guī)共聚聚丙烯,內(nèi)部一條冷水/熱水流道向上彎曲,另一條冷水/熱水流道向下彎曲,兩條流道投影呈X型交叉且互不連通,可以構(gòu)成冷水和熱水管路在同一平面并行敷設(shè)輸送且多點并行引出的冷熱水管路系統(tǒng)[18]。
圖9 冷熱水交叉塊示意圖
本文將以交叉塊為例,介紹自動布管的實現(xiàn)流程。在編寫自動布管程序之前,首先自定義標準件模型的基準項,如圖10所示設(shè)置孔底面和孔中心軸線并重命名。
圖10 自定義模型基準項
用程序?qū)崿F(xiàn)自動布管的步驟如下:
(1) 將元件1添加到初始默認位置,通過函數(shù)ProAsmcompAssemble()實現(xiàn)。
(2) 對相關(guān)對象聲明變量,如元件ProMdl、模型基準項ProModelitem、裝配參考基準ProSelection等。
(3) 選擇已存在裝配中參與裝配的元件1,通過函數(shù)ProSelect()實現(xiàn),輸出選擇的模型*sel供步驟(4)調(diào)用。
(4) 獲取元件1的裝配路徑comp_path,通過函數(shù)ProSelectionAsmcomppathGet(sel[0],&comp_path)實現(xiàn)。
(5) 獲取元件1的句柄comp_model_1,通過函數(shù)ProAsmcomppathMdlGet(&comp_path,&comp_model_1)實現(xiàn)。
(6) 載入待裝配的元件2,并獲得其句柄,通過函數(shù):ProMdlLoad(name1,PRO_MDL_UNUSED,PRO_B_FALSE,&comp_model_2)實現(xiàn)。
(7) 獲取兩個元件的模型基準項,通過函數(shù)ProModelitemByNameInit()實現(xiàn)。
(8) 施加約束,以施加面面重合約束為例,實現(xiàn)代碼如下:
ProArrayAlloc(0,sizeof(ProAsmcompconstraint),1,(ProArray*)&constraints);
//為約束數(shù)組constraints分配空間
ProSelectionAlloc(&comp_path,&comp_datum_1,&compdatum_
sel_1);
//獲得元件1的裝配參考基準,此處的comp_path為
//步驟(4)獲得的裝配路徑
ProSelectionAlloc(NULL,&comp_datum_2,&compdatum_sel_2);;
//獲得元件2的裝配參考基準,由于元件2形式為零件
//裝配路徑設(shè)為空NULL值
ProAsmcompconstraintAlloc(&constraintdatum);
//為裝配約束constraintdatum分配空間
ProAsmcompconstraintTypeSet(constraintdatum,PRO_ASM_ALIGN);
//設(shè)置約束類型
ProAsmcompconstraintAsmreferenceSet(constraintdatum,compdatum_sel_1,PRO_DATUM_SIDE_YELLOW);
//設(shè)置約束
//constraintdatum的元件參照compdatum_sel_1,無參考方向
ProAsmcompconstraintCompreferenceSet(constraintdatum,compdatum_sel_2,PRO_DATUM_SIDE_RED);
//設(shè)置約束
//constraintdatum的元件參照compdatum_sel_2,參考方向取反向
ProArrayObjectAdd((ProArray*)&constraints,-1,1,&constraintdatum);
//裝配約束constraintdatum加入約束數(shù)組constraints
ProAsmcompConstraintsSet(NULL,&asmcomp_2,constraints);
//為未施加約束的待裝配元件asmcomp_2施加約束constraints
軸向重合的裝配代碼與上述類似,不再贅述。
(9) 重生零件:ProSolidRegenerate((ProSolid)asm comp_2.owner,PRO_REGEN_CAN_FIX)。
(10) 釋放約束:ProArrayFree((ProArray*)&con--straints)。
釋放參照基準:ProSelectionFree(&compdatum_sel_1);ProSelectionFree(&compdatum_sel_2)。
所開發(fā)的交叉塊自動布管界面如圖11所示,首先點擊對話框中交叉塊的按鈕將其作為第一個元件裝配至指定位置,然后在此基礎(chǔ)上按照指示點擊相應的按鈕,添加另外的PPR管材或管件直至完成交叉塊的自動布管。
圖11 交叉塊自動布管對話框
冷水布管、熱水布管的原理與交叉塊布管的原理相同,可通過選擇相應的布管系統(tǒng),來進行冷熱水系統(tǒng)的設(shè)計。
以某室內(nèi)冷熱水供應系統(tǒng)為例,如圖12所示利用開發(fā)的冷熱水布管系統(tǒng)實現(xiàn)了某室內(nèi)衛(wèi)浴供水系統(tǒng)的三維快速智能設(shè)計。
圖12 冷熱水系統(tǒng)示意三維圖
本實例室內(nèi)三維圖中包含了墻體、燃氣熱水器、水槽、水龍頭、馬桶、淋浴器等衛(wèi)浴產(chǎn)品,將上述冷熱水系統(tǒng)裝配進建筑實體中,實現(xiàn)最終三維裝配,如圖13所示。
圖13 室內(nèi)三維裝配圖
通過對Creo進行二次開發(fā),開發(fā)出一套冷熱水智能設(shè)計系統(tǒng),利用三維標準庫能快速生成符合國家標準的PPR標準件,使用自動布管系統(tǒng)以程序代碼來代替重復性的手工操作,大大減少了冷熱水系統(tǒng)的設(shè)計時間。實例結(jié)果表明,基于該系統(tǒng)能夠提高設(shè)計的效率和自動化程度,生成的三維圖可用于指導施工減少錯誤,直觀的三維圖既能避免管線交叉等問題,又可以快速準確地向客戶展示所設(shè)計系統(tǒng)圖。本文為給排水領(lǐng)域的BIM軟件應用提供了一種全新的解決方案。