王加攀 吳仁智 秦 磊
(同濟大學機械與能源工程學院 上海 201804)
PPR管又稱三型聚丙烯管,由無規共聚聚丙烯注塑而成[1],廣泛應用于建筑物內的冷熱水系統、采暖系統、可直接飲用的純凈水供水系統、中央集中空調系統等[2]。傳統的給水系統采用的設計軟件是Auto CAD,但其繪圖效率低下,設計質量往往也不能滿足要求[3]。BIM技術在工程中的應用極大地減少了設計、施工中不必要的浪費,解決建筑行業的低效能問題[4]。目前應用于給排水的主要三維建模軟件是RevitMEP,通過生成三維模型實現所見即所得,減少了因主觀想象失誤而造成的設計錯誤[5]。文獻[6]分析了BIM技術在建筑給排水工程設計中的應用及存在的問題;文獻[7]以某工業園區的綜合樓為例,運用BIM技術進行了給排水管道設計;文獻[8]通過制作Revit相關族構件和開發配套的程序,布置了給排水衛浴裝置。
上述文獻研究了利用RevitMEP進行給排水設計的方法和流程,但仍存在以下問題:(1) 現有構件族庫缺少符合中國國家產品標準的PPR管構件[9],Revit創建的模型還不能達到預制加工的深度,特別是管材、管件及閥門閥件等Revit族尚沒有統一的族庫標準,且Revit在預制加工圖等方面還不完善[10];(2) Revit軟件和ANSYS等大型有限元軟件不能有效對接[11],使得在需要進行數值模擬計算時受到限制;(3) 管線布置時自動化、智能化程度不高。
Revit是一個參數化的設計軟件,最早推出參數化建模技術的是PTC公司的Pro/E[12]。Creo軟件是PTC公司推出的一種基于特征建模技術和統一數據庫參數化的通用CAD系統,PTC軟件被廣泛應用于機械產品的布線和布管設計[13-16]。針對上述Revit設計的問題,本文提出在Creo軟件中進行PPR冷熱水系統設計的方法,采用Creo二次開發的方式,建立標準的PPR管材管件三維標準庫,并開發出冷熱水管的自動布管系統,實現冷熱水系統的智能設計,提高設計效率。
開發的功能框架如圖1所示,點擊對應的子菜單即可調用相應的功能模塊。

圖1 冷熱水系統功能模塊
冷熱水系統主要包括PPR三維標準庫和自動布管兩部分。三位標準庫系統以GB/T 18742.2—2002和GB/T 18742.3—2002為標準進行建立。包括管件、管材和閥門配件三個大類,按照手冊的分類又將管件分為28個小類別,管材分為4個小類別,閥門配件分為6個小類別,這些標準件足以為大多數的冷熱水管路系統設計提供所需要的標準零件。自動布管是用程序來驅動系統自動裝配零件進而替代手動裝配。進行冷熱水系統設計時的一般流程如下:
(1) 在開發的對話框中選擇需要的管件或管材型號,注意選擇管材后應輸入PPR管的長度,即可快速完成標準件的設計,并保存在指定的文件夾內。
(2) 新建裝配體。
(3) 選擇自動布管系統菜單,選擇需要的布管方法,完成PPR管路布管。
PTC公司為Pro/E軟件提供二次開發工具集Pro/Toolkit。本系統采用同步模式下的DLL模式,在Microsoft Visual Studio 2010中新建MFC DLL工程項目,編寫信息文件和程序代碼。DLL模式下應用程序的入口函數是User-initialize,它包含Pro/Toolkit應用程序的所有初始化進程;終止函數是User-terminate函數,在Creo終止應用程序時被調用。最后編寫注冊文件,并在Creo中通過“工具”→“輔助應用程序”命令,即可注冊運行二次開發的功能模塊[17]。
標準庫中包含兩個集合:一個是三維模板庫,儲存在計算機硬盤中;另一個是尺寸參數庫,以數據表格的形式存儲在Access數據庫中,基本原理如圖2所示。首先,可通過Creo建立某型號零件三維模型作為該型號零件的模版,并將其存儲在模版庫中。然后將該型號下不同規格的尺寸等可變參數值輸入至數據表中,并將其存儲至Access數據庫中。當需要調出這一型號下某一規格零件時,可通過應用程序搜Access數據庫并提取該規格的參數數據,將該組數據賦值給該型號三維模版,就可生成所需規格的零件三維模型。為方便調用,可利用MFC類庫設計人機交互界面。

圖2 三維標準庫原理圖
模板庫中的三維模板,可以通過一組參數和關系控制零件的外形和大小(并不需要零件中的所有尺寸參數),稱這些參數為驅動參數。
建立參數化標準件模版的主要步驟:(1) 基于特征的三維建模;(2) 通過Creo“參數”工具添加驅動參數;(3) 將所建立的驅動參數與實體模型中可變變量建立某種映射關系。如圖3所示,Creo“關系”工具中建立了模型尺寸變量和驅動參數的函數映射關系,尺寸變量是由驅動參數進行驅動變化的,在驅動過程中,模型中的拓撲形狀變量(約束變量)并不發生改變。

圖3 等徑三通參數化建模
圖4為儲存在Access數據庫平臺下的等徑三通驅動參數表。

圖4 等徑三通驅動參數存儲
采用ActiveX數據對象(ActiveX Data Object,ADO)技術對驅動參數數據庫進行訪問。訪問步驟如下:
(1) 應用#import宏將ADO動態庫文件msado15.dll加載到工程中,這個動態庫文件提供了對ADO對象的封裝。
(2) 創建Connection對象,調用Open()函數連接驅動參數數據庫;創建Recordset對象,調用Open()函數取得查詢結果。
(3) 應用Recordset對象提供的函數移動、查看、獲取各個記錄。提取其中的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) 提取指定規格標準件的尺寸信息:m_pRecordset->GetCollect(_T("mdi")),mdi即存儲在數據庫中的驅動參數。
用戶操作界面是由MFC建立的非模式對話框和控件的方式來進行設計的,代碼如下,以等徑三通和冷水管為例,設計的管件和管材對話框如圖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("對話框創建失敗."));
}
dlgst.ShowWindow(SW_SHOW);
return true;}
選定好指定規格的標準件以后,點擊確定按鈕,在數據庫訪問接口技術的基礎上,對模板實現參數化驅動并將零件調入到Creo環境。程序實現的流程如圖7所示。

圖7 參數化驅動流程
利用Creo布管即將PPR管件、管材等在Creo環境中裝配起來,將多個元件組合到一個組件中。基本原理如圖8所示。

圖8 自動布管原理
設計的自動布管模塊有交叉塊自動布管、冷水布管、熱水布管三部分,上述的交叉塊是由同濟大學與上海一翔機械科技有限公司發明的一種新型水管件,如圖9所示。交叉塊的材料為無規共聚聚丙烯,內部一條冷水/熱水流道向上彎曲,另一條冷水/熱水流道向下彎曲,兩條流道投影呈X型交叉且互不連通,可以構成冷水和熱水管路在同一平面并行敷設輸送且多點并行引出的冷熱水管路系統[18]。

圖9 冷熱水交叉塊示意圖
本文將以交叉塊為例,介紹自動布管的實現流程。在編寫自動布管程序之前,首先自定義標準件模型的基準項,如圖10所示設置孔底面和孔中心軸線并重命名。

圖10 自定義模型基準項
用程序實現自動布管的步驟如下:
(1) 將元件1添加到初始默認位置,通過函數ProAsmcompAssemble()實現。
(2) 對相關對象聲明變量,如元件ProMdl、模型基準項ProModelitem、裝配參考基準ProSelection等。
(3) 選擇已存在裝配中參與裝配的元件1,通過函數ProSelect()實現,輸出選擇的模型*sel供步驟(4)調用。
(4) 獲取元件1的裝配路徑comp_path,通過函數ProSelectionAsmcomppathGet(sel[0],&comp_path)實現。
(5) 獲取元件1的句柄comp_model_1,通過函數ProAsmcomppathMdlGet(&comp_path,&comp_model_1)實現。
(6) 載入待裝配的元件2,并獲得其句柄,通過函數:ProMdlLoad(name1,PRO_MDL_UNUSED,PRO_B_FALSE,&comp_model_2)實現。
(7) 獲取兩個元件的模型基準項,通過函數ProModelitemByNameInit()實現。
(8) 施加約束,以施加面面重合約束為例,實現代碼如下:
ProArrayAlloc(0,sizeof(ProAsmcompconstraint),1,(ProArray*)&constraints);
//為約束數組constraints分配空間
ProSelectionAlloc(&comp_path,&comp_datum_1,&compdatum_
sel_1);
//獲得元件1的裝配參考基準,此處的comp_path為
//步驟(4)獲得的裝配路徑
ProSelectionAlloc(NULL,&comp_datum_2,&compdatum_sel_2);;
//獲得元件2的裝配參考基準,由于元件2形式為零件
//裝配路徑設為空NULL值
ProAsmcompconstraintAlloc(&constraintdatum);
//為裝配約束constraintdatum分配空間
ProAsmcompconstraintTypeSet(constraintdatum,PRO_ASM_ALIGN);
//設置約束類型
ProAsmcompconstraintAsmreferenceSet(constraintdatum,compdatum_sel_1,PRO_DATUM_SIDE_YELLOW);
//設置約束
//constraintdatum的元件參照compdatum_sel_1,無參考方向
ProAsmcompconstraintCompreferenceSet(constraintdatum,compdatum_sel_2,PRO_DATUM_SIDE_RED);
//設置約束
//constraintdatum的元件參照compdatum_sel_2,參考方向取反向
ProArrayObjectAdd((ProArray*)&constraints,-1,1,&constraintdatum);
//裝配約束constraintdatum加入約束數組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)。
所開發的交叉塊自動布管界面如圖11所示,首先點擊對話框中交叉塊的按鈕將其作為第一個元件裝配至指定位置,然后在此基礎上按照指示點擊相應的按鈕,添加另外的PPR管材或管件直至完成交叉塊的自動布管。

圖11 交叉塊自動布管對話框
冷水布管、熱水布管的原理與交叉塊布管的原理相同,可通過選擇相應的布管系統,來進行冷熱水系統的設計。
以某室內冷熱水供應系統為例,如圖12所示利用開發的冷熱水布管系統實現了某室內衛浴供水系統的三維快速智能設計。

圖12 冷熱水系統示意三維圖
本實例室內三維圖中包含了墻體、燃氣熱水器、水槽、水龍頭、馬桶、淋浴器等衛浴產品,將上述冷熱水系統裝配進建筑實體中,實現最終三維裝配,如圖13所示。

圖13 室內三維裝配圖
通過對Creo進行二次開發,開發出一套冷熱水智能設計系統,利用三維標準庫能快速生成符合國家標準的PPR標準件,使用自動布管系統以程序代碼來代替重復性的手工操作,大大減少了冷熱水系統的設計時間。實例結果表明,基于該系統能夠提高設計的效率和自動化程度,生成的三維圖可用于指導施工減少錯誤,直觀的三維圖既能避免管線交叉等問題,又可以快速準確地向客戶展示所設計系統圖。本文為給排水領域的BIM軟件應用提供了一種全新的解決方案。