APP下载

悬架零部件运动间隙自动测量程序开发

2022-04-02

汽车实用技术 2022年6期
关键词:刻度矩形间隙

段 维

(威马汽车科技集团有限公司 成都研究院,四川 成都 610100)

在设计汽车底盘悬架时,当性能输出悬架硬点后,工程部门会根据硬点设计相关零部件的具体结构,从而判断该硬点是否可以工程化。其中一个重要步骤便是校核悬架零部件在运动过程中是否存在干涉的可能。以前悬架双叉臂,后悬架五连杆为例,需要判断零部件之间的运动间隙约有70项。需得到每一项运动间隙的变化曲线,并获取每一项的最小空间间隙,形成规范化的报告,作为该硬点和零件结构设计的工程化是否可行的设计过程文档。而且,每一次阶段性更改硬点或者零件结构,都将相应的更新该文档,工作量很大。

CATIA作为一款强大计算机辅助设计软件,在汽车行业被广泛地使用。针对以上的问题,目前普遍的做法是直接采用CATIA数字样机内置的“传感器”功能。即先测量出两个零件在任意状态下的间隙,然后再用命令模拟中激活该测量的传感器,进而在更改驱动命令值时,该测量将随之更新。再用CATIA内置的功能导出一系列测量值或者直接生成曲线,最后找到最小值。该方法完全能满足工作的需求。但是,也有较明显的缺点,一是操作繁琐;二是结果图表信息不友好,较难编辑,且无法显示最小间隙对应的悬架状态。

本文基于程序设计语言(Visual Basic, VB)对CATIA进行二次开发,将上述手动操作过程固化为程序流程,用户仅需要选择测量的零件即可获取零件之间的间隙随悬架运动的变化曲线,以及最小间隙的具体值和对应的悬架状态。这样,简化了人工参与的部分,使犯错率下降,同时,增加了图像的可读性和实用性。可以为设计变更提供较为清晰的方向。

1 程序开发的工具和方法

汽车行业的3D设计软件有很多,如CATIA、UG、Pro-E等。其中CATIA是法国达索公司开发的CAD/CAE/CAM一体化软件,它不仅仅是一款优秀的计算机辅助设计软件,在为用户提供了丰富功能的同时,还为用户提供了多种二次开发的接口。如自动化对象编程(V5 Automation)和开放的基于组件的应用程序编程(CAA)。本文所述程序便是利用 VB,在 CATIA的自动化编程接口基础上进行的二次开发。

在CATIA目录下可以找到用于开发的帮助文件《V5Automation.chm》。该文件提供了二次开发所需的几乎所有的对象、属性和方法,用编程语言调用其中的对象、使用其方法,查看和修改其属性,便可以定制我们想要的功能。《V5Automation.chm》文件提供了一个树状的目录查询结构,我们可以根据该树状的结构依次去查询我们所需要的对象和方法,如图1所示。

图1 CATIA帮助文件目录结构

但由于其内容过于繁杂,有时候无法确定我们所需的对象、方法。这时候可以使用CATIA的“录制宏”功能。将我们的操作录制为宏,然后查看宏代码。宏代码使用的是 VB语言。从中,我们可以找到整个操作使用的对象,以及如何使用该对象的属性和方法。这对于快速获取操作对象非常有帮助。

本文便是利用上述方法,在一个已有的CATIA悬架DMU运动模型基础上,运用VB创建一个自动测量零件与零件之间运动间隙的可视化程序。其输入输出界面如图2所示。

图2 程序输入输出界面

在“悬架及位置信息”框架中选择悬架的位置,确认后,将在“行程信息显示”框架中显示悬架跳动的转向行程和轮跳行程(后悬无转向行程),紧接着,在测量零件信息中选择需要测量的两个零件。点击“选择并生成”按钮后,将自动进行测量并将最终结果显示在输出界面,包含最小间隙和最小间隙对应的悬架状态,以及间隙随悬架运动的图像。

2 使用VB进行程序开发

2.1 开发前准备和开发流程

在进行开发之前,我们需要将悬架的电子样机(Digital Mock-Up, DMU)运动模型搭建好。本文以前悬为例,前悬架包含一个转向齿条驱动和左、右轮跳驱动。因不同场景和使用方法不同,某些情况下可能仅包含左侧轮跳,或者轮跳驱动更改为减震器驱动。

此外,启动VB,创建一个“标准EXE”工程后,需要对CATIA的所有类库进行引用,这样才能在VB中使用CATIA的所有对象的属性和方法。

完成准备后,首先,需要遍历运动模型的所有运动零件和运动副,获取驱动值;然后,通过交互选择得到需要测量的零件;之后,按照一定的规则使机构分步运动起来,并记录每一步测量零件的间隙值,同时比较更新最小间隙值;最后将记录的每一步间隙值绘制成图形。相应的开发流程如图3所示。

图3 程序流程图

2.2 获取DMU对象和相应信息

在打开运动模拟机构后,首先需要用 VB获取当前的CATIA对象。

Set CATIA =GetObject(,"catia.Application")

获取 CATIA对象后,便可以根据《V5Automation.chm》文件提供的目录结构获取运动机构对象。它存在于产品文件对象下的 Technological Object中,相应的代码如下:

我们同时获取了当前运动机构的产品文件对象(oRootproduct)和机构对象(Mec)。我们遍历oRootproduct对象下的子零件,然后将其子零件的名称存入到组合框列表中(combo),相应的代码如下:

运动机构的零部件是通过运动副(joint)来连接彼此的。在本文所述前悬架DMU中,轮跳和齿条的运动副均为“棱形副”,英文名称为“prismatic”。同时,还为轮跳和转向齿条的运动副设置了驱动值,以此来驱动轮胎跳动和进行转向,并带动相应的零部件进行运动。因此,为了获取轮跳的上下极限行程和转向齿条行程,只需要找到含有驱动值的“棱形副”即可,并通过该运动副的属性获取相应的极限值。但是,轮跳和转向均为“棱形副”,我们需要将其区分开。本文采用的方法是:若运动副的上下极限行程绝对值不同,则可以判断为轮跳;反之,若上下极限行程绝对值是相等的,则可判断为转向。笔者目前还没有见到过悬架上下行程精确相同的案例。

获取运动副的驱动上下极限值的方法用Joint.LowerLimit1和Joint. UpperLimit1。相应的代码如下:

2.3 测量运动间隙

2.3.1 定义测量对象

在2.2中,通过遍历DMU运动产品文件的方法获得了所有的运动子零件,并且将子零件的名称全都储存到form中的组合框列表中。因此,用户无需在CATIA中选择需要测量的零件,仅需要在组合框下拉列表中分别选择“零件一”和“零件二”的零件名称即可。

2.3.2 运动方式

本文目的是测量两个零件在随悬架运动的过程中的间隙。我们无法测量所有状态的间隙,也只能测量离散状态的间隙。因此,必须考虑用某种运动方式来尽量精确代表零件间的运动间隙,而且不要错过最小位置。业内主要使用“矩形运动”的方法,如图4所示。

图4 悬架“矩形运动”示意图

矩形的横轴代表转向,纵轴代表轮跳。矩形及矩形内的一个点代表悬架的一个状态。将所有的状态都进行测量是不可能的。我们的做法是仅选取矩形边框上的点,它们代表了悬架所有的极限状态。我们认为,悬架零件在运动过程中的最小的间隙一般都在这些极限位置中。但是,矩形边框上的点也是无穷多的。我们需要将其离散成有限数量的点。

本文中,每一条边等分取了10个点,整个运动共41个点。将悬架分别运动到这些点中,再测量零件的间隙,最终便可以形成曲线,并找到最小值。当然,其中每一条边可以取更多的点以提高精度,视具体情况而定。

用VB执行“矩形运动”的代码如下:

其中,Acc_Num_Sum是采取的总点数,此处为 41;Acc_Num 表示每一条边线采取的点的数量,此处为10;Neg_TurnValue和Pos_Turn_Value分别是转向齿条总行程的一半,前者为负,表示内转向;UpValue和LowValue分别是轮跳的上、下极限值,后者为负值。我们将每一个对应的转向、轮跳行程驱动值赋值到数组dValcmd()中,使用的代码如下:

Mec是获取的运动机构对象。使用它的 Put CommandValues方法将数组dValcmd()中的驱动值传给运动机构,就能使悬架运动到指定的状态下。

2.3.3 在运动中测量

将悬架DMU运动按照“矩形运动”的规则运动到某一个状态后,就需要在该状态下测量对象零件间的间隙值。在日常使用CATIA中,我们直接用测量工具(Measure Between)来测量产品(Product)到产品(Product)的距离。在CATIA提供的《V5Automation.chm》文件中,我们很容易就联想到使用 GetWorkbench方法获取 SPAWorkbench对象,使用其中的 Measurable对象来进行处理。但是,Measurable对象并不支持产品到产品的测量。而应该使用Distance对象。并且,Distance对象也只能在根文件(root product)使用下面方法进行调用:

使用 Distance对象,我们需要先定义元素(Component),即零件对象;然后,将元素添加到组(Group)中;进而给 Distance的 Firstgroup和Secondgroup进行赋值,最后进行计算。也即,Group中可以包含多个零件元素,能达到多产品与多产品之间的间隙测量。值得注意的是,如果零件处于隐藏状态,间隙测量是无法正确计算的,需要将隐藏的零件显示。如下所示代码是测量前的相关初始化工作。

将计算得出的值保存到 DistanceValu()数组中,并和最小间隙值 MinDistance和最大间隙值MaxDistance进行比较。如果过程值比MinDistance小,则用过程值替换掉MinDistance;如果过程值比 MaxDistance大,则用过程值替换掉 Max Distance。同时用另外一个数组Mincmd()储存下最小间隙值对应的驱动值dValcmd()。如此迭代,保证最后运行完成之后能得到最大间隙值和最小间隙值及其对应的驱动值,以便之后输出。

值得注意的是,在完成一个“矩形运动”后,我们获得了两个零件的测量信息。此时,需要将过程信息删除,以便为下一次测量提供足够的内存。此处,删除所有的组和 Distance结果,代码如下:

2.4 结果输出

2.4.1 最小值输出

要将计算的结果输出到窗格中,只需要将对应的 label用 2.3中的 MinDistance和对应的Mincmd()替换输出即可。

此外,本文添加了一个最小值查看功能。即“goto”按钮。点击该按钮,便可以将悬架模型驱动到最小值对应的状态,并显示最小间隙值的位置。由于我们已经存储了最小间隙值对应的驱动值数组Mincmd(),因此只需要将此值赋值给悬架运动模型即可。而要显示最小值,可以将3.3中所述两个零件的测量过程重新运行一次即可,这里不再赘述。

其间需要注意一点的是在程序和CATIA窗口之间的视点切换问题。启动程序时,我们需要将视点固定在CATIA窗口中,以便查看其测量是否正常;完成测量后,视点需要切换到程序界面以查看结果;点击“goto”时,又需要切换回CATIA窗口。

切换到CATIA视点代码:

AppActivate "catia", wait

切换到程序视点代码:

AppActivate "测量悬架杆系运动间隙", wait

2.4.2 图像绘制前准备

VB虽然提供了较为友好的可视化界面、丰富的控件。但是其在图形绘制方面的功能却显得捉襟见肘。VB仅提供了点和线的绘制功能,并没有提供坐标轴的绘制模块。因此,我们需要自己绘制坐标轴。

这里,我们使用“Picture”控件来绘制图形。轴定义为“事件”,即测量的顺次。我们一共测量了41次,因此最大值定义为45,每5次一个刻度;轴定义为间隙值,单位为mm。但是,由于每一对零件和零件的运动间隙最大值均不同,我们的坐标刻度值必须兼容所有的情况。若将刻度最大值定义得过大,对于某一些间隙值较小的情况,图像将显得不协调;反之,若将刻度值定义的较小,某些图像将显示不全。因此,我们的轴必须是动态的,根据每一次操作得到的具体值重新绘制。为了满足需求,我们做了以下三个约定和假设。

(1)零部件之间的动态间隙最大值和最小值不能差异过大,一般<200 mm;

(2)轴的刻度数量最大为10个;

(3)轴刻度从0开始。

从2.3中,我们可以获得零件在运动过程中的最大间隙值 MaxDistance和最小间隙值 MinDistance。对于任何最大间隙值,都可以用科学计数法来表示:

式中,是间隙的最大值;是有效数字,0<<10;Level为指数,为整数。

坐标轴的单位长度也用科学计数法表示:

式中,iStep是轴的单位长度;是其有效数字,0<<10。

为了获取较为合适的单位长度,这里约定:

若/0.25<10,则=0.25;

若/0.5<10,则=0.5;

若/1<10,则=1;

如此,我们便根据最大值求出了较为合适的轴单位长度。进而,我们可以得到轴的最大刻度值,对应代码如下:

2.4.3 绘制坐标轴和曲线

有了、轴的单位长度和最大刻度,便可以通过VB的PictureBox中的line方法绘制坐标轴。

首先需要对控件“Picture”设置画布的坐标范围。采用Picture中的scale方法。scale方法参数是两个点,以此形成一个矩形区域。第一个点是矩形的左上角,第二个点是矩形的右下角。

此处的范围比2.4.3中所述最大值略大,比最小值略小,是需要在多出的空白部分可以添加刻度值和轴标题。

然后在该矩形区域内绘制坐标轴:

要添加文字,首先需要使用 Picture.CurrentX和Picture.CurrentY方法定义文字的坐标点。该坐标点指代的是文本框的左上角的点。然后,使用Picture.Print功能添加具体的文字内容。

绘制曲线的图像,仅需要使用Picture.Line方法依次将各个间隙点连接起来即可。绘制坐标轴、轴标题和曲线的相关代码如下:

至此,便可以获得如图2所示的结果图形输出。

3 结束语

本文使用VB连接CATIA开发接口,用VB程序调用CATIA各个自动化对象,实现了自动对CATIA悬架运动模型中的零部件之间的运动间隙的测量,并根据结果利用 VB自带的控件自动绘制图形。此方法在处理DMU运动间隙校核方面首次被提出,符合业内对悬架运动机构零件的测量方法,图形绘制满足业内需求。

猜你喜欢

刻度矩形间隙
间隙、公共性与能主之人:楠园小记
间隙
矩形面积的特殊求法
剪彩带
给你
苦难的间隙
从矩形内一点说起
谁大谁小
谁大谁小
巧用矩形一性质,妙解一类题