APP下载

基于ProToolkit的Pro/E线束制造模型研究

2020-02-11陆承佳

机械工程师 2020年1期
关键词:线轴调用线缆

陆承佳

(英格索兰亚太工程技术中心,江苏 太仓215400)

0 引 言

线缆模型在产品控制部分由电气原理图到实际生产的过程中,扮演了至关重要的角色。线缆本身的长度、直径、颜色等信息,及其两端连接器的电气参数均会直接影响到线缆件的采购和加工。然而,使用Pro/E操作软件的“缆”(Cabling) 模块建立的三维线缆组件无法直观表现上述内容,必须再将其线束零件导入“制造模型”(Manufacturing Model)进行进一步的处理,使原先弯曲的线缆平整。此外,利用缆模块指令生成模型的过程与其他模块存在一定区别,在其基础上建立的制造模型更是和组件、零件模型大不相同。

本文旨在运用PTC官方提供的ProToolkit工具对Pro/E展开研究,试图通过编程从线束制造模型读取信息,进而分析其内在逻辑关系,同时为二次开发出提高工程师工作效率、减少产品设计错误的实际应用提供理论基础。

1 开发环境简介

Creo Parametric TOOLKIT是PTC官方针对C语言定制,采取面向对象设计风格的一款工具包。同时,它也是对于Creo Parametric主要的“应用程序编程接口”(API)。而且,其提供了大量可以接入Creo Parametric数据库与用户操作界面的C语言函数库和外部应用,供用户及第三方人员通过编写C语言代码进行二次开发,并将生成的应用功能无缝集成进Creo Parametric软件内部[1]。

本文以Visual Studio 2015为开发平台编写程序,借助TOOLKIT创建接口,从而获取Creo 4.0中线束制造模型信息并进行处理。最终,生成一个可以在Creo 4.0中运行的动态链接库(dll格式文件)[1],将无法直接从用户操作界面看到的各项数据导出,帮助工程师对模型内部逻辑有更清晰地认识。

2 线束制造模型解析

现假定有一线缆组件的三维模型如图1所示。该组件的所有线缆(不包含两端连接器)均建立在同一个“线束”(Harness) 零件内。尽管该零件的后缀名为.PRT,但与一般零件不同,只能在进入缆模块后,点击“创建线束”(Create Harness)生成,且无法被单独打开。此外,图1线束零件又分为16个子线束——被捆在一起的线缆归入同一子线束,单根线缆则视作独立子线束。在绘制线缆展平工程图前,需要分别为每个子线束创建制造模型以供图样参考。

现以其中一个子线束为例,为创建它的线束制造模型,应先在“新建”对话框的类型和子类型下分别选择“制造”(Manufacturing)与“线束”(Harness),再引用线束零件。接着,还需新建一个类型为“装配”(Assembly)、子类型为“平整线束”(Flat harness)的子件,并在随后弹出的线束窗口内选取要展平的子线束。最后,在如图2所示的两个窗口中执行展平操作——大窗口对应制造模型、小窗口对应线束零件。

图1 线缆三维模型

从图中即可发现诸多仅从建模角度无法解释的问题:1)在新建模型时,先后选择了制造和装配两种不同的类型,但实际生成的模型后缀名都是.ASM,两者是否有所不同;2)引入的线束零件无法在左侧模型树下找到,是否已被拆分成了制造模型子装配中的9个“平整段”(Flat Segment)特征;3)线束制造模型是否有导入原线缆组件的线束、线轴及连接器电气参数。

接下来便将借助ProToolkit提供的函数编写程序,提取制造模型数据,分析其内在逻辑关系,进而逐一对上述问题做出解答。

图2 线束制造模型操作窗口

3 线束制造解析

3.1 制造模型结构

图3 零件和装配制造模型层级

制造模型可分为零件制造和装配制造两种模式,它们的层次结构如图3所示。

两种模式的最上层均为制造(MFG),然后装配(ASM)次之,只是装配制造的层级较多,还包括子装配。因为制造模型只存放工具信息,并且其特征集成在顶层装配模型内,所以它既不在模型树下显示,又不会生成独立文件。由此可知,图2线束制造模型实际为4 层结构,属于装配制造——对该模型更深入地研究将通过编程继续展开。

3.2 模型类型判断

首先,通过ProMdlCurrentGet()和ProMdlTypeGet()函数可知,“当前”(即图2窗口)模型的类型为“制造”(PRO_MDL_MFG)[2]。接着,调用ProMfgAssemGet()函数获得该制造模型的顶层装配句柄。然后,利用ProMdlMdlnameGet()函数分别读取两个模型对象的名称[3]。最终得到的结果相同,但实际只存在一个使用该名称且后缀名为.ASM的文件。

综上所述,线束制造模型的文件格式确实是.ASM,不过它相比一般装配模型,同时还具备了制造模型的特征。换而言之,针对制造与装配两种不同模型的函数在具体功能开发过程中都可对其生效。

4 模型数据读取

借助ProToolkit不仅能够获取封装在模型内部、无法从“表层”看到的信息,还能访问“不存在”于模型树的特征,并从中采集数据进一步验证线束制造模型特性。此外,鉴于线缆的长度及其电气参数会直接影响到实际线缆的采购、加工,故若能通过程序自动将这些信息导出,亦将对具体工作提供一定帮助。

4.1 平整段尺寸提取

不同于线缆组件,线束零件被引入线束制造模型后,原先的线缆特征转换成了“平整段”,线缆亦不再按“根”划分,而是改由若干“段”组成。

为采集这些平整段的尺寸数据,首先应调用ProMfg-SolidGet()函数获取储存了线束制造模型特征的“实体模型”(ProSolid)句柄,再通过ProSolidFeatVisit()函数遍历其“特征”(ProFeature)对象[4]。接着,调用ProFeatureFilter-Action 类型的回调函数过滤掉类型不为“平整段”(PRO_FEAT_ISEGM)的特征。

至此,针对图2线束制造模型,由程序共获得11个平整段特征——并且均“可见”(visible)(ProFeatureVisibilityGet()函数返回值为PRO_B_TRUE),但模型树下仅能找到9个。初步推测是因为多入口端连接器原先只和一根线缆相连,在执行“散开”(Fan Out)操作后,其余线缆也与相应入口端连接,同时“解除”了平整状态。如图4所示的连接器只有第三根线缆有平整段特征,不过在将其拆除并重新展平线缆后,另外两个平整段特征亦会出现在模型树下。

图4 线束制造模型连接器

虽然通过修改模型成功使得在模型树下显示的平整段特征数量,与利用程序检索到的达成一致,但结论仍不够完善,还需读取每段的尺寸值做进一步验证。

在特征完成过滤后,调用ProFeatureVisitAction类型的回调函数依次访问每个平整段对象。在该函数内,再调用ProFeatureDimensionVisit()函数遍历平整段的尺寸对象。 与ProSolidFeatVisit () 函 数 类 似, 先 调 用ProDimensionFilterAction类型的回调函数筛选出长度(PRODIMTYPE_LINEAR)和角度(PRODIMTYPE_ANGLE)尺寸,再通过ProDimensionVisitAction类型的回调函数进行访问。最后,调用ProDimensionValueGet()函数提取存放在尺寸对象中的具体数值。

综上所述,原线束零件的子线束在制造模型中转换为11个平直段特征,而不是从模型树观察到的9个。使用ProToolkit不仅能检索到无法从用户操作界面看到的特征,还能直接采集其储存的尺寸数据——所有平整段对象的尺寸都保持散开前数值。

4.2 模型参数提取

在线缆组件中,电气参数分别被储存在“线束”(Harness)、“线轴”(Spool)及“连接器”(Connector)中。由于无论是线束制造的顶层装配还是其子装配模型都不含上述元件或特征,因此比起按照“线束/线轴/连接器→线缆→线缆参数”的顺序逐个访问对象,本文优先考虑直接遍历模型全部参数,再从中筛选出电气参数。

首先,调用ProMdlToModelitem()函数将顶层装配或其子装配对象转换为“模型项”(ProModelitem)对象,再使用ProParameterVisit()函数遍历其“参数”(ProParameter)对象(不做任何过滤)。其次,通过ProParameterValueWith-UnitsGet()函数读取得到的“参数数值对象”(ProParamvalue),进而调用ProParamvalueTypeGet()与ProParamvalue-ValueGet()函数按类提取并导出其存放的具体信息。但最终获取的所有数据如图5所示,其中并不含电气参数。

在与三维模型对照后发现,上述“参数”特指图2右侧“线缆制造”(CABLE MFG) 菜单中“设置”(Set Up) 选项下的“参数”(Parameters) 窗口内信息,与线缆组件中的“电气参数”(Electrical Parameters)对话框内容无关。

图5 线束制造模型参数

4.3 电气参数提取

虽然线束零件、线轴及连接器都未显示在线束制造模型的模型树下,但在图2两个窗口的模型中,它们均有所体现。故而,在直接读取电气参数失败的情况下,现参照线缆组件模型从获取它们的对象开始展开进一步研究。

首先,通过ProAssemblyHarnessesCollect()、ProAssemblySpoolsCollect()及ProAssemblyConnectorsGet()三个函数采集顶层装配模型的线束、线轴及连接器对象,同时观察函数的返回值——只有线轴未被找到(返回PRO_TK_E_NOT_FOUND),线束和连接器的函数都成功运行(返回PRO_TK_NO_ERROR)。

接着,使用ProArraySizeGet()函数获取线束和连接器数。但连接器的数量为0,故实际在上一步并未获得连接器对象。而线束的数量为1——在创建线束制造模型时也确实只引用了一个线束零件,且未涉及线轴及连接器。

随后,调用ProHarnessCablesCollect () 和ProArray-SizeGet()函数读取线束中全部“线缆对象”(ProCable)及其总数。不过得到的线缆数量与图2小窗口显示的线束零件相同,多于大窗口的子线束线缆。若只希望采集子线束的电气参数,可利用ProHarnessSubharnessesCollect()和Pro-SubharnessCablesCollect()函数进行区分,本文不再赘述。

然后,以线缆数为循环次数设置循环体,继续提取每个线缆对象储存的信息及子对象,如图6所示。

图6 线缆对象处理代码

鉴于线束制造模型由数个平整段组成,只能从特征对象读取单段线缆的长度。但对于线缆对象,可以使用ProCableLengthGet()函数直接获取线缆总长。而其它参数仍被存放在子对象“线缆参数对象”(ProCableparam)中,需通过线束ProCableParametersCollect()函数采集。

最后,将线缆参数对象传递给自定义函数CableParameter(),再于该函数内调用ProParamvalueTypeGet()与ProParamvalueValueGet()函数按类提取并导出线缆电气参数,如图7所示。

由于从线束制造模型中仅获得了线束对象,因此最终也只能采集每根线缆及其引用线轴和两端连接器的名称,而无法采集线缆颜色、连接器类型(凸形/凹形)等电气参数。

结合4.2节和4.3节可知,尽管“参数数值对象”与“线缆参数对象”储存的数据均可调用ProParamvalueValueGet()函数提取,但这两个对象本身及它们上层对象的获取方式截然不同。此外,线缆的电气参数只存放在线缆参数对象中,无法从其它对象读取。

图7 线束电气参数

5 结 语

本文详细介绍了如何利用ProToolkit工具编写程序对Pro/E的线束制造模型进行研究。最终成功提取了无法直接从用户操作界面看到的信息(如制造模型的层次结构,散开平整段的特征、线缆的总长度等)。通过分析这些数据,不仅可以帮助工程师对模型内部逻辑有更深刻的理解,同时还能以此为基础或与其它应用结合,二次开发出能够提升工作效率及设计正确率的具体功能。

猜你喜欢

线轴调用线缆
放风筝的快乐
核电项目物项调用管理的应用研究
掉落的针
上海福尔欣线缆有限公司
自动甩干机
来做一个气垫飞行器
基于系统调用的恶意软件检测技术研究
弹上线缆布设技术研究
华通线缆:“通”向未来的品牌梦
利用RFC技术实现SAP系统接口通信