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