首页/文章/ 详情

ANSA二次开发工程实例—白车身扭转刚度快速建模

1年前浏览5816

 《ANSA二次开发从入门到精通》这门课程中从几何检查到网格划分再到常见连接(螺栓、焊点、焊线、胶粘)最后到界面设计给大家全面的讲解了ANSA二次开发中常用的函数及用法,也通过代码+实例的方法逐步带大家学习相关知识。

但是大家有许多同学也是刚开始接触ANSA二次开发,所以我们在课程中的例子还是比较简单的,想在工程实际应用还需要多进行练习,但是也无非是课程中的知识的组合。

作为一名汽车仿真工程师做得最多的就是汽车相关工况的二次开发,这里就用一个最常见的白车身扭转工况来带大家再次领略ANSA二次开发的魅力,后期也会有更多针对工程实例的课程、文章,欢迎大家关注我。本文的代码与模型大家可以加入QQ群的方式领取,576156527,群里大家可以互相讨论学习。

下面正式开始吧

图片.png

首先介绍一下白车身扭转工况的具体加载、约束以及结果读取

加载

扭转顾名思义需要在车身上加载一个扭矩,主流主机厂的仿真方法是在车身减震器安装点位置左右分别施加两个相反的力。如下图所示

图片.png

约束

为了保证在加载过程中车身不会发生刚体 位移,我们需要施加约束。通常是在车身后部减震器安装点位置约束1-3方向自由度,有的主机厂还会在保险杠中部约束一个点的3方向自由度。

结果读取与计算

不同企业的计算方法不同,这里选取一个比较主流的车身扭转刚度计算方法

读取前减震器z向位移Z1,Z2(单位m)。扭矩为T(单位N.m),前左右安装点距离为D(单位m),车身扭转刚度计算公式为:

图片.png

最终计算出来的扭转刚度单位为:N.m/deg

编程思路

图片.png

首先创建一个界面用于和用户进行交互。

图片.png

点击选点按钮后用户选择前后减震器安装点,软件会自动通过位置判断每个选点的位置,然后为其创建对应的SET

点击创建模型按钮后,软件会自动根据模型里面的SET来创建载荷以及约束。这样做的好处就是下次在使用之前已经选点好的模型进行白车身扭转刚度分析,只需要点击“创建模型”按钮就可以直接创建模型,而无需再次选点。

界面很简单,但是已经能够实现基本的功能,大家也可以在此基础上增加组件,实现更加复杂的交互功能。由于篇幅有限这里只进行最基础功能的实现,更加复杂的功能与丰富的工程实例请大家继续关注我后期的课程与文章。

总结下来我们一共要建立三个函数:

1.        搭建GUI界面的函数

2.        允许用户界面中选点的函数

3.        创建载荷、约束、Header的函数

接下来我们开始编写代码

界面搭建

首先导入必要的库

图片.png

接下来创建一个简单的界面,对代码不熟悉的同学请自行查看帮助文档或者跟着《ANSA二次开发从入门到精通》课程系统学习

图片.png

这里面我们先把选点的函数SelectNode以及创建模型的函数CreateHeader创建出来,这样子才能显示出界面

图片.png

用户选点

这里给大家讲解一下具体代码的变成思路

下面这段代码是允许用户选点,并且根据位置来判断选取的点是前后减震器中的哪一个并创建对应的集 合,其中还加了一些逻辑判断。

图片.png

这段代码中由四部分逻辑相同的部分,这里拿出来其中一部分进行讲解

图片.png

1.        PickEntities()是允许用户在界面中选择节点的函数,用户可以选择四个减震器安装点中任意几个。

2.        接下来通过.position的类属性来判断改点所在位置,并进行对应集 合的创建。

3.        然后通过GetEntity来获取集 合,如果存在我们就用已经存在的集 合,并且将集 合中的点通过CollectEntities()搜集起来,再通过RemoveFromSet()将集 合中的点移除SET;不存在我们就使用CreateEntity()创建一个新的集 合。

这样做是为了我们在已经存在SET(之前选取过点)的模型中重新选点时能够使用新选择的点来覆盖旧的点,增加程序的灵活性。当然了我们每个位置点所建立的Set是有固定的ID的,这样子方便索引。

4.        最后就是将这个点通过AddToSet()来储存到几何中

进行位置判断时大家根据自己模型中的全局坐标系进行判断就好,我这里的全局坐标系如下图所示:

图片.png

进行到这里大家可以测试一下程序能否正常运行,效果就是这样的


我们在第一次选择时会创建新的Set来装每个减震器安装点的节点,第二次选择时则会覆盖之前集 合中的节点

创建Header

代码如下:

图片.png

5.        首先通过GetEntity()获取四个减震器安装点储存的集 合

6.        然后我们判断一下集 合是否为空,如果为空我们弹出对话框提示用户“请检查约束点及加载点集 合”

图片.png

7.        集 合不为空,我们搜集集 合中的节点,使用变量储存

8.        使用CreateEntity分别创建Force及SPC

9.        最后使用CreateEntity创建Header,使用SetNastranHeader来设置Header中的内容,进行求解

效果如下:


到这里我们的程序就写完了,其实其中还可以增加很多的逻辑判断来增强我们程序的容错率,不要出现错误就异常退出,比如说判断SET中的节点数是否为1,如果节点数多余1说明这个SE有问题,这时候可以提示用户检查SET。再比如还可以增加在创建完Header后让用户选择路径输出计算文件。这里大家就自由发挥想象。


代码&命令二次开发电子兵器船舶航天航空汽车新能源疲劳振动多体动力学显式动力学瞬态动力学静力学结构基础ANSAHyperMesh
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-01-31
最近编辑:1年前
ANSA攻城狮
硕士 | 仿真工程师 用编程解放双手
获赞 136粉丝 214文章 14课程 7
点赞
收藏
作者推荐
未登录
1条评论
仿真秀29261217792
签名征集中
6月前
请问下,ansa中建立局部坐标系的函数是哪个?
回复
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈