基于Creo二次开发的冷热水智能设计系统研究
2023-03-15王加攀吴仁智
王加攀 吴仁智 秦 磊
(同济大学机械与能源工程学院 上海 201804)
0 引 言
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所示,点击对应的子菜单即可调用相应的功能模块。
图1 冷热水系统功能模块
冷热水系统主要包括PPR三维标准库和自动布管两部分。三位标准库系统以GB/T 18742.2—2002和GB/T 18742.3—2002为标准进行建立。包括管件、管材和阀门配件三个大类,按照手册的分类又将管件分为28个小类别,管材分为4个小类别,阀门配件分为6个小类别,这些标准件足以为大多数的冷热水管路系统设计提供所需要的标准零件。自动布管是用程序来驱动系统自动装配零件进而替代手动装配。进行冷热水系统设计时的一般流程如下:
(1) 在开发的对话框中选择需要的管件或管材型号,注意选择管材后应输入PPR管的长度,即可快速完成标准件的设计,并保存在指定的文件夹内。
(2) 新建装配体。
(3) 选择自动布管系统菜单,选择需要的布管方法,完成PPR管路布管。
2 PPR三维标准库系统开发
2.1 Creo二次开发技术
PTC公司为Pro/E软件提供二次开发工具集Pro/Toolkit。本系统采用同步模式下的DLL模式,在Microsoft Visual Studio 2010中新建MFC DLL工程项目,编写信息文件和程序代码。DLL模式下应用程序的入口函数是User-initialize,它包含Pro/Toolkit应用程序的所有初始化进程;终止函数是User-terminate函数,在Creo终止应用程序时被调用。最后编写注册文件,并在Creo中通过“工具”→“辅助应用程序”命令,即可注册运行二次开发的功能模块[17]。
2.2 三维标准库系统基本原理
标准库中包含两个集合:一个是三维模板库,储存在计算机硬盘中;另一个是尺寸参数库,以数据表格的形式存储在Access数据库中,基本原理如图2所示。首先,可通过Creo建立某型号零件三维模型作为该型号零件的模版,并将其存储在模版库中。然后将该型号下不同规格的尺寸等可变参数值输入至数据表中,并将其存储至Access数据库中。当需要调出这一型号下某一规格零件时,可通过应用程序搜Access数据库并提取该规格的参数数据,将该组数据赋值给该型号三维模版,就可生成所需规格的零件三维模型。为方便调用,可利用MFC类库设计人机交互界面。
图2 三维标准库原理图
2.3 标准件模板建模
模板库中的三维模板,可以通过一组参数和关系控制零件的外形和大小(并不需要零件中的所有尺寸参数),称这些参数为驱动参数。
建立参数化标准件模版的主要步骤:(1) 基于特征的三维建模;(2) 通过Creo“参数”工具添加驱动参数;(3) 将所建立的驱动参数与实体模型中可变变量建立某种映射关系。如图3所示,Creo“关系”工具中建立了模型尺寸变量和驱动参数的函数映射关系,尺寸变量是由驱动参数进行驱动变化的,在驱动过程中,模型中的拓扑形状变量(约束变量)并不发生改变。
图3 等径三通参数化建模
2.4 数据库存储和访问
图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即存储在数据库中的驱动参数。
2.5 生成标准件实体
用户操作界面是由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 参数化驱动流程
3 水管路自动布管系统
3.1 自动布管基本原理
利用Creo布管即将PPR管件、管材等在Creo环境中装配起来,将多个元件组合到一个组件中。基本原理如图8所示。
图8 自动布管原理
设计的自动布管模块有交叉块自动布管、冷水布管、热水布管三部分,上述的交叉块是由同济大学与上海一翔机械科技有限公司发明的一种新型水管件,如图9所示。交叉块的材料为无规共聚聚丙烯,内部一条冷水/热水流道向上弯曲,另一条冷水/热水流道向下弯曲,两条流道投影呈X型交叉且互不连通,可以构成冷水和热水管路在同一平面并行敷设输送且多点并行引出的冷热水管路系统[18]。
图9 冷热水交叉块示意图
3.2 自动布管实现流程
本文将以交叉块为例,介绍自动布管的实现流程。在编写自动布管程序之前,首先自定义标准件模型的基准项,如图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 交叉块自动布管对话框
冷水布管、热水布管的原理与交叉块布管的原理相同,可通过选择相应的布管系统,来进行冷热水系统的设计。
4 应用实例
以某室内冷热水供应系统为例,如图12所示利用开发的冷热水布管系统实现了某室内卫浴供水系统的三维快速智能设计。
图12 冷热水系统示意三维图
本实例室内三维图中包含了墙体、燃气热水器、水槽、水龙头、马桶、淋浴器等卫浴产品,将上述冷热水系统装配进建筑实体中,实现最终三维装配,如图13所示。
图13 室内三维装配图
5 结 语
通过对Creo进行二次开发,开发出一套冷热水智能设计系统,利用三维标准库能快速生成符合国家标准的PPR标准件,使用自动布管系统以程序代码来代替重复性的手工操作,大大减少了冷热水系统的设计时间。实例结果表明,基于该系统能够提高设计的效率和自动化程度,生成的三维图可用于指导施工减少错误,直观的三维图既能避免管线交叉等问题,又可以快速准确地向客户展示所设计系统图。本文为给排水领域的BIM软件应用提供了一种全新的解决方案。