APP下载

基于Creo和Excel二次开发零件参数化设计系统*

2020-03-22申逸骋

机械工程与自动化 2020年1期
关键词:参数值二次开发代码

胡 迪,罗 辉,张 伟,申逸骋

(合肥工业大学 智能制造技术研究院,安徽 合肥 230000)

0 引言

参数化设计可提高设计效率,其基本原理是:采用三维模型与程序控制相结合的方式,根据零件或组件的设计要求,建立一组能控制三维模型形状和拓扑关系的设计参数,参数化程序通过对零件或组件的设计参数编程来实现设计参数的检索、修改以及三维模型的再生[1]。

Creo是目前最流行的三维CAD软件之一,也是国内外CAD/CAM软件中用户数最多的软件之一,提供了 Creo/Toolkit、VB API、J-Link等多种二次开发接口[2-5],方便用户通过 C/C++、Basic、Java等常用开发语言进行系统的二次开发。针对Creo二次开发进行参数化设计问题,国内外学者做了大量的研究。臧岩[6]使用Pro/Toolkit构建了注塑模架的参数化设计系统,实现了模架设计的自动化。张文彬等[7]使用Creo/Toolkit实现了阶梯轴零件的参数化变型设计。李润泉等[8]则依托Creo/Toolkit实现浇口套零件的参数化变型设计。孙太良[9]基于Creo二次开发了外啮合圆柱齿轮优化设计系统。以上利用Creo/Toolkit二次开发工具进行二次开发的参数化设计系统多聚焦于某些具体零件的参数化设计系统开发,当需要扩充参数化设计系统库时,需要重新修改代码,以至于开发的产品使用范围受限,灵活度大打折扣。此外,Creo/Toolkit使用C语言进行开发,其开发周期长,学习曲线相对陡峭,也限制了行业从业人员参与系统的开发和维护。

Excel作为电子报表工具,内置宏计算和VBA二次开发工具,在产品设计和工程计算中得到了广泛的应用,是企业常用的设计开发工具之一[10-13]。本文使用Creo提供的VB API开发接口,在Excel平台下开发零件参数化设计系统,以期实现一套易于扩展和维护的零件参数化设计系统。

1 零件参数化设计系统分析

1.1 设计流程

参数化设计的零件在构型上相同,设计过程主要是对各尺寸进行修改,故零件参数化设计主要由“确定构型”到“确定参数”两个步骤组成。设计人员首先在参数化设计库中选择与设计目标一致的零件三维模型,确定通用件构型,获取须修改的主要参数。在确定参数后,通过系统计算或直接输入确定所有参数值。最后,通过参数化设计接口在Creo中对已有模型进行修改,获得最终的设计结果。零件参数化设计流程如图1所示。

1.2 关键模块

参数化设计系统主要包含两个关键模块:一是参数修改模块,主要用于确定需要修改的参数及其数值;二是零件信息快速查找模块,能够帮助设计人员快速找到需要修改的零件。

1.2.1 参数模块修改

与用户直接使用CAD工具画图不同,参数化设计系统并不需要在三维模型中确定所有尺寸参数,利用零件尺寸与一些工程参数(压强、力、材料牌号以及相关的某一配合或驱动尺寸等)的相关性可以确定部分关键尺寸参数,另外诸如倒角等一些尺寸无需修改。由于参数间存在一定的关联性,参数的修改主要包括以下两种类型:

(1)主动修改。必须人工输入参数的值,所有直接参数及部分间接参数均需通过此类修改方式进行修改。参数修改的方式有两种,一种为设计人员根据实际情况输入任意数值,另一种为已标准化的数据,用户只能在定义好的表格数据中选取合适的数值。

(2)联动修改。部分参数之间存在一定的关系,某些参数值可以根据相关参数值通过一定的映射进行修改,如在缸体的设计过程中,壁厚尺寸值可通过内部液体的压强值计算得出,无需人工填写。由于Creo提供了关系这一工具,实现了参数的关联功能,故只要在模型中设置好关系,确定需要主动修改的参数后联动修改即可直接计算得到关联的参数。

参数值的修改流程如图2所示。用户根据实际情况,首先输入主动修改的参数值;之后系统根据设定好的关系计算得到联动修改参数的值;最后通过参数化设计接口在三维软件系统下修改已有模型的相关尺寸,完成参数的修改过程。

图1 零件参数化设计流程

图2 参数值的修改流程

1.2.2 零件信息快速查找模块

参数化设计系统需考虑系统的可扩展性和维护性,应只需一次编码后仅需维护零件库和相关参数设计信息即可。零件信息快速查找模块的关键技术包括以下两个方面:

(1)零件通用信息模板的建立。确保所有零件的信息能够以标准化的方式保存,由模板记录零件的路径以及相关参数的名称、类型等信息,如图3所示。

图3 零件通用信息模板

(2)零件库的建立。Excel文件本身与数据库有点类似,一个Excel文件即一个工作簿,包含了多张工作表,每个工作表均能记录独立的信息,并且各工作表之间的信息可以互相关联。故为便于维护,系统不使用专业数据库系统,将所有的信息均存放在一个单独的文件中,每个零件的信息以标准化模板的形式保存在对应的工作表内,在工作表内进行参数的修改;在Excel工作簿内设置一个工作表专门进行零件选择和零件的生成等操作。零件库的构架如图4所示。

2 系统实现

2.1 开发环境设定

系统使用 Creo 2.0M060和 Excel 2016进行开发,需要一定的配置后方能进行代码编写。

2.1.1 VB API环境配置

系统使用VB API对Creo进行二次开发,需要首先配置VB API的开发环境,主要包括以下3个步骤:

(1)设置系统环境变量。添加PRO_COMM_MSG_EXE到环境变量,变量值填写pro_comm_msg.exe所在的路径加文件全名。pro_comm_msg.exe位于CREO安装目录中Common Files\datecode\machine type\obj目录下。

(2)注册COM服务器。以管理员权限运行CREO安装目录下Parametric/bin中的vb_api_register.bat文件即可。如需反注册,以管理员权限运行vb_api_unregister.bat即可。

(3)配置选项。该步可选,主要解决二次开发过程中使用函数进行重生操作出现的IpfcXToolkitBadContext错误,在CREO配置编辑器中将选项regen_failure_handling的值设为resolve_mode。

图4 零件库的构架

2.1.2 添加VB API项目引用

代码在Excel内嵌VBA环境下编写,首先要添加VB API项目引用。打开Excel内嵌的宏编辑器,点击工具-引用菜单,在弹出的对话框中选中“Creo VB API Type Library for Creo Parametric”即可,如图5所示。

图5 添加Creo VB API引用

2.2 关键代码实现

系统主要包含模型的快速检索、Creo会话操作、Creo模型操作、参数修改等四部分关键内容。

(1)模型的快速检索。如前文所述,模型库中每个模型对应一个Excel工作表,工作表名为模型的模板名称,系统通过读取所有的工作表名形成模型库清单供用户选取,其关键代码如下:

Private Sub Worksheet_Activate()

Dim s As String

Dim i As Integer

s=""

For i=2To Sheets.Count

s=s &Sheets(i).Name & ","

Next

s=Left(s,Len(s)-1)

Range("A6").Select

With Selection.Validation

.Delete

.Add Type:=xlValidateList,Formula1:=s

End With

End Sub

(2)Creo会话操作。VB API只能使用异步模式进行开发,系统首先需要创建一个会话再进行Creo的相关操作。由于VBA环境使用老式的vb6的语法,因此代码与VB API的语法稍有不同,如对对象的赋值需要使用Set语句进行赋值等。新建会话关键代码如下:

Dim asyncConnection As IpfcAsyncConnection

Dim cAC As CCpfcAsyncConnection

Dim baseSession As IpfcBaseSession

Dim creoapp As String

creoapp=Sheets("计算界面").Range("B3")+"-g:no_graphics-i:rpc_input"//参数表示不显示Creo界面

Set cAC=New CCpfcAsyncConnection

Set asyncConnection=cAC.Start(creoapp,"")

Set baseSession=asyncConnection.Session

(3)Creo模型操作。系统首先将模板文件复制到用户指定的目录,之后在新建的会话中打开模型并进行参数操作,其关键代码如下:

Dim model As IpfcModel

Dim modelDesc As IpfcModelDescriptor

Dim retrieveModelOptions As IpfcRetrieveModelOptions

Dim cmodelDescriptor As New CCpfcModelDescriptor

Dim cretrieveModelOptions As New CCpfcRetrieveModelOptions

outputfile=Sheets("计算界面").Range("B4")

modelname=Sheets("计算界面").Range("A6")

modelfile=Sheets(modelname).Range("B2")

Call FileCopy(modelfile,outputfile)

Set modelDesc=cmodelDescriptor.Create(EpfcModelType.EpfcMDL_PART,"","")

modelDesc.Path=outputfile

Set retrieveModelOptions=cretrieveModelOptions.Create

retrieveModelOptions.AskUserAboutReps=False

Set model= baseSession.RetrieveModelWithOpts(modelDesc,retrieveModelOptions)

(4)参数修改。这是系统实现的最核心部分,系统读取工作表中相关参数信息对模型进行修改,其关键代码如下:

For i=4To Sheets(modelname).UsedRange.Rows.Count

Call Modifiy_Param(model,Sheets(modelname).Range("A"+Trim(Str(i))),Sheets(modelname).Range("B"+Trim(Str(i))),Sheets(modelname).Range("C"+Trim(Str(i))))

Next

Private Sub Modifiy_Param(model As IpfcModel,ParamName As String,ParamType As String,ParamValue As String)

Dim iParameterOwner As IpfcParameterOwner

Dim iParamValue As IpfcParamValue

Dim cmodelItem As New CMpfcModelItem

Dim parameter As IpfcParameter

'Create iParamValue类

If(ParamType="浮点型")Then

Set iParamValue = cmodelItem.CreateDoubleParamValue(CSng(ParamValue))

ElseIf(ParamType="整形")Then

Set iParamValue=cmodelItem.CreateIntParamValue(CLng(ParamValue))

ElseIf(ParamType="字符串")Then

Set iParamValue=cmodelItem.CreateStringParamValue(ParamValue)

ElseIf(ParamType="布尔型")Then

Set iParamValue=cmodelItem.CreateBoolParamValue(CBool(ParamValue))Else

Set iParamValue=cmodelItem.CreateNoteParamValue(CLng(ParamValue))

End If

Set iParameterOwner=model

Set parameter=iParameterOwner.GetParam(ParamName)

Call parameter.SetScaledValue(iParamValue,Nothing)

End Sub

3 工程应用实例

在上述研究的基础上,综合设计经验,开发了液压机板材参数化设计系统,系统主要操作界面如图6所示。

图6 液压机板材参数化设计系统主要操作界面

设计人员首先在图6的下拉框中选择需要生成的零件,同时修改文件保存路径;打开如图7所示的对应工作表,修改参数值;确定参数之后,点击图7上的生成按钮,系统会自动修改参数生成对应的模型。如果用户需要添加新零件时,可以新建一个工作表,按照图7的内容模板添加修改对应的文件、参数等信息,即可完成零件库的增加操作。

图7 参数修改界面

4 结语

本文阐述了利用Excel二次开发Creo的设计流程和方法,并利用Creo提供的VB API接口开发了一套零件参数化设计系统。开发的系统编码简单,同时具有较强的可扩展性,无需修改源码即可完成参数化设计零件库的维护,有利于技术员的掌握、维护和扩充。该系统能够节省设计时间,提高设计效率。此外,本文的二次开发方式相较基于Creo/Toolkit的二次开发具有易于理解、编程和维护方便等特点,也为开发人员提供了新的二次开发思路。

猜你喜欢

参数值二次开发代码
例谈不等式解法常见的逆用
不等式(组)参数取值范围典例解析
西门子Operate高级编程的旋转坐标系二次开发
浅谈Mastercam后处理器的二次开发
创世代码
创世代码
创世代码
创世代码
某系列柴油机与电子调速器匹配标准化参数优化
逆向思维求三角函数中的参数值