(特变电工衡阳变压器有限公司 湖南衡阳 421007)
摘要:Creo是目前世界上应用最为广泛的三维设计软件,本文介绍了Creo二次开发异步模式的基本概念,以及通过异步开发实现变压器产品部件自动成型关键技术。
关键词:Creo;二次开发;变压器;自动成型
1.引言
Creo 是美国参数化公司PTC(Parametric Technology Corporation)的产品,是一个用于产品三维模型设计、加工、分析及绘图的三维设计软件,广泛应用于我国机电、电子、家电、塑料模具等行业。
一个成熟的CAD软件一般都提供用户进行二次开发的接口,CreoToolkit是Creo的二次开发接口,提供了强大的二次开发功能,其二次开发工具以C语言为依托,向用户提供了大量针对Creo底层资源调用的库函数和头文件。通过调用这些底层函数,外部应用程序可以在方便、安全、受控的情况下访问Creo的数据库及内部应用函数,从而方便地开发出符合企业产品设计特色的专用设计系统(见图1)。
图1 笔者开发的变压器三维AI设计系统
2.Creo Toolkit异步开发技术
CreoToolkit的应用程序工作方式分为两种:同步模式(Synchronous Mode)和异步模式(Asynchronous Mode)。
本文主要介绍CreoToolkit异步模式下的开发。异步模式无需启动Creo就能够单独运行CreoToolkit的应用程序,可以实现两个程序的并行运行,并且只在程序需要调用Creo功能时才启动新的Creo会话或连接现有Creo会话(见图2)。
图2 三维AI设计系统中与Creo会话的连接(异步模式)
异步模式分为简单异步模式(Simple Asynchronous Mode)和完全异步模式(Full Asynchronous Mode)。它们的不同点在于使用简单异步模式开发的程序不实现处理Creo本身的各种消息、请求的接口,因此它不能在Creo中添加菜单、按钮等;使用完全异步模式开发的程序由于实现了能监听Creo发出的各种消息的监听器接口,因此Creo可以调用程序中的函数,包括菜单、按钮的回调函数。
在简单异步模式中,CreoToolkit应用程序应在自己的主函数中定义程序的控制流并在程序中调用函数ProEngineerStart( )启动Creo会话,或者调用函数ProEngineerConnect( )来连接现有Creo会话。这使得应用程序可以开发出自己风格的界面,并且该界面是独立于Creo界面的。在运行过程中,Creo会话监听从CreoToolkit进程中发出的异步请求信息,根据接受到的请求信息作出相应的回应。
完全异步模式是简单异步模式的扩展,在完全异步模式下,CreoToolkit应用程序和Creo会话可以相互交互。不仅CreoToolkit应用程序可以往Creo会话发送和请求消息,而且Creo会话也可以发送或请求消息到CreoToolkit进程。使用完全异步模式,除了需要首先调用ProEngineerStart( )或ProEngineerConnect( )函数外,还必须在CreoToolkit程序中建立事件消息处理函数,该函数在消息循环中不断检查和处理从Creo会话传递过来的信息。
从上述分析可知,当CreoToolkit程序与Creo会话之间只存在单向消息传递时(只有应用程序往Creo发送消息),在这种情况下应采用简单异步模式,当存在双向通信时,应采用全异步通信模式。笔者开发的三维AI设计系统(见图1)采用的是完全异步模式。
3.变压器产品部件自动成型的关键技术
通过上面的介绍,我们对CreoToolkit的异步开发技术有了一定的了解。下面我们主要介绍下变压器产品部件自动成型的关键技术点。
图3 三维AI设计系统中部件自动成型
3.1 CreoToolkit中部件自动成型关键函数
①取得变压器组件和零件的句柄。通过ProMdlRetrieve()函数获得标识组件和零件的ProMdl结构。
②通过开发UsrAssemblyComp (ProMdl asmmdl, ProMdl compmdl, AsmConstraint constraint)将变压器的零组件根据标准化原则自动装配到一起。因篇幅有限,下面简短列出此函数的流程)
其中 为自定义的约束结构体,
Typedef struct asmconstraint
{
int ConstraintNum; //约束数量
CString ConstraintName[3]; //约束类型
CString Asmreference[3]; //组件参照
CString Compreference[3]; //零件参照
Double Offset[3]; //零组件参照偏移数值
} AsmConstraint;
ProError UsrAssemblyComp (ProMdl asmmdl, ProMdl compmdl, AsmConstraint constraint)
{
//初始化相关类
ProError status;
ProMatrix identity_matrix = {{ 1.0, 0.0, 0.0, 0.0 },
{0.0, 1.0, 0.0, 0.0},
{0.0, 0.0, 1.0, 0.0},
{0.0, 0.0, 0.0, 1.0}};
ProAsmcomp asmcomp;
ProAsmcompconstraint* constraints;
ProIdTable c_id_table;
c_id_table [0] = -1;
…………………………………
//解析组件和零件并校验约束类型
ProAsmcompAssemble((ProAssembly)asmmdl, (ProSolid)compmdl, identity_matrix, &asmcomp);
ProArrayAlloc(0, sizeof (ProAsmcompconstraint), 1,(ProArray*)&constraints);
for (int i=0;i<constraint.ConstraintNum;i++)
{
if (constraint.Asmreference[i].GetAt(0) == _T('M'))
{
status = ProModelitemByNameInit (asmmdl, PRO_SURFACE, asm_datums [i], &asm_datum);
…………………………………
}
else
{
SW_ToolKitLog.StatusOut(_T("不支持的装配模式!"));
return PRO_TK_BAD_INPUTS;
}
status = ProAsmcomppathInit ((ProSolid)asmmdl, c_id_table, 0, &comp_path);
status = ProSelectionAlloc (&comp_path, &asm_datum, &asm_sel);
status = ProSelectionAlloc (NULL, &comp_datum, &comp_sel);
status = ProAsmcompconstraintAlloc (&constraint);
…………………………………
status = ProArrayObjectAdd((ProArray*)&constraints, -1, 1, &constraint);
}
status = ProAsmcompConstraintsSet(NULL, &asmcomp, constraints);
if (status != PRO_TK_NO_ERROR )
{
SW_ToolKitLog.StatusOut(_T("部件自动成型失败!"));
return PRO_TK_GENERAL_ERROR;
}
ProArrayFree((ProArray*)&constraints);
ProWindowRepaint (-1);
return PRO_TK_NO_ERROR;
}
3.2 产品设计标准化的重要性
CreoToolkit的自动成型函数是技术关键点,除此之外产品设计标准化是自动成型的基础,为此,笔者还建立了下面的设计标准数据库:
①根据产品结构标准化方案,建立了结构标准信息数据库。数据库包含了变压器零组件的厂家、型号、图号、装配位置信息。
②根据零组件计算标准化方案,建立了产品零组件脚本库。通过脚本实时计算变压器零件在组件中的装配位置,并通过上述相关函数装配到组件中。
4.结束语
图4 三维AI设计系统部件自动成型后的模型
截止目前,一套110kV变压器产品部件(总装)从无到有自动成型时间大约在20分钟(见图4),如果一位成熟的三维设计员要装配到此程度大约需要2-3天时间,极大地提升了产品的设计效率。
本文介绍了电力变压器三维部件自动成型的关键技术,并给出了利用CreoToolkit实现的代码,开发人员可以根据自己企业产品的实际形式进行规划,开发相关程序实现产品的部件自动成型,提高产品设计效率。
参考文献
[1]Parametric Technology Corporation.Creo Parametric Toolkit User’s Guide 6.0.1.0。USA:PTC公司出版,2019
[2]王文波编著.Pro/E Wildfire 4.0 二次开发实例解析.清华大学出版社.2010.6
论文作者:陈鹏,刘冠军,于水,凡新,倪志利,张永新,曹妙
论文发表刊物:《电力设备》2020年第2期
论文发表时间:2020/5/7