目 录




【 !!!】提前总结:在一番探索过后,我并没有实现在不使用CEL模型的情况下提取到受力数据,这是一次失败的尝试,大家可千万别照着做!!!
当然大佬们如果有什么指导意见希望不吝赐教!!!


这部分内容是我自己探索的部分,和之前的内容不太一样,之前都是学习别人的案例同时总结经验,这里要在前面的基础上增加一些我需要的功能,所以就拆分开了。


说起来,我做这个仿真模型的目的是为了仿真出搅拌摩擦焊焊接过程中的受力,所以复现仿真模型只是第一步,后面要怎么做我还不清楚,只能摸着石头过河了。


2023.2.27


ABAQUS CEL模型受力情况分析

因为在设置材料属性时使用了放大质量的方法缩短仿真时间,所以不太确定是不是可以还原真实的焊接过程受力情况,在这里先尝试一下在CEL模型中提取搅拌头受力情况数据。


△ 提取搅拌头受力情况数据

好了,现在基本解决了CEL模型仿真的问题,那么下一步就是提取搅拌头的受力数据了。

关于提取的方法,我大概有一些思路,基本上就是在“ 分析步 ”这个步骤设置要输出的量,然后分析完成之后在可视化里面选择该量绘制曲线。


○ 减小模型规模

为了测试提取受力数据的方法,要缩短每次仿真的时间

这里将practiceCEL3mm20230219 model2工程复制而来,将过程时间缩短,输出帧率降低

仿真过程时间修改为:下压1s,停留1s,焊接3s,输出帧率为每秒10帧。

测试一下仿真时间

没有问题,仿真时间1小时多一点(HP15核)

【job1:getforce20230221 model1】



○ 提取受力数据

第一次仿真,我的历程输出全选,范围是整个模型。

看来是不能选择整个模型,我找不到我需要的搅拌头的受力数据。

【job2:getforce20230223 model1】


于是我自己瞎捣鼓了一番,在历程输出里选择了“ _作用力/反作用力_ ”,作用域选择了搅拌头模型所在的集

仿真的过程尤其的慢,而且伴随各种报错

5s的仿真居然跑了24个多小时。。。

奇怪的是,总时间的增量逐渐减少,但是cpu的占用率也变得非常小,为什么呢。。。

但是看到输出的结果我大概知道怎么回事了。。。


由此可见,结果输出的时每个节点的历程数据,怪不得用了这么久而且结果文件特别大。


我想了想,我之前想错了,我觉得可以把搅拌头当做一个整体来计算受力情况,但是作为有限元软件,在他的眼里(眼里?)这些都是一个个的单元和节点,是运算的最小单位也是输出的最小单位,我只能通过某一个节点或者一些节点的数据来分析整体的受力情况。

打开一个数据发现全是0

看来配置还是有问题的。

【job3:getforce20230223 model1】


然后我找了一下关于历程输出的教程,基本都是输出应力和应变数据的,拿来参考一下


→→→【Abaqus】第四十八讲:通过场输出和历史输出获取应力和应变时间历程曲线

→→→【Abaqus】第四十九讲:应力应变关系曲线的输出方法


也就是说,我没有办法得到整个搅拌头的受力数据,只能得到某个节点的数据,那么就得选一个最有代表性的节点了。

我先试一试场输出

〇 删除之前工程的历程变量输出

〇 给钢材料添加一个塑性属性

〇 按照视频,单元类型这里选择“ _三维应力_ ”

在视频里up选择了“_standard_” 我这里先和之前保持一致选择“_explicit_”,其实我并不知道他们有什么区别。

〇 编辑场变量输出,up选的是“ _MISES(应力),PE(应变),U(位移)_ ”不过我看了下默认值里面几乎都包含了


然后提交

〇 可视化及结果分析


感觉母材完全没有流动起来,而且应力分布完全混乱

温度也低得离谱


【job4:getforce20230228 model1】


什么情况?我把参数改回去试试。。。。

首先,我怀疑是搅拌头的网格属性的问题

我把“_三维应力_”改回“_温度-位移耦合_”试试

果然,只改了搅拌头的网格属性之后,仿真结果就没有问题了,可以说不愧是我么。。。

【job5:getforce20230228 model1】


不过没有问题也只局限在焊接的结果没有问题,我想得到的结果还是没有,也就是说搅拌头的应力场显示不出来,这是什么原因呢?


后来我问了那个up主,他好像也没有处理过类似的问题,而且搅拌头是作为刚体进行约束的,本不应该存在应力变化,如果把搅拌头修改为变形体,这个仿真可能会变得很复杂,而且搅拌头是高速旋转的,没有办法通过某一个单元来提取到受力数据。我看的那篇论文虽然提到他是通过分析搅拌头的刚体受力情况得到的受力数据,但是却没有说明是怎么得到的。。。

我想了想。如果说把搅拌头配置为变形体,因为他的高速旋转里面的单元会受到高频的交变应力变化从而大大增加模型复杂度和运算量,那我可不可以将搅拌头配置为刚体,但是给搅拌头设置一个固定支座,支座配置为变形体,让搅拌头在支座上旋转呢?

这听起来就好像是螺旋桨叶片在轴上旋转,同时这也和我一开始的设想相符,就是通过改变支座的刚度控制搅拌针的振动。

于是我用相关关键字找到了这个教程


→→→【Abaqus】第五十二讲:螺旋桨叶片旋转过程模拟


总之先按照教程的内容学习一下


※ 螺旋桨叶片旋转过程模拟

· 创建零部件

〇 创建风扇

创建这样一个可变形的壳体

〇 创建轴

可变形的实体

半径1,长度25


· 配置材料属性

〇 创建材料

〇 轴

创建截面,实体


并分配

〇 叶片

创建截面,为壳

厚度选择0.5

○ 装配


· 划分网格

叶片

全局种子1


这网格。。。好丑。。。

网格属性改为四边形

重新布一下。。。还是这么丑。。。

全局种子0.5

装配体长这样


· 分析步

创建_静力学通用_分析步

打开几何非线性

增量0.1

关闭历史变量输出(视频里说错了)

场变量输出,均匀时间间隔,间隔为10
输出变量选择S,U

![](https://guyueju.oss-cn-beijing.aliyuncs.com/Uploads/Editor/202310/20231024_66632.png)</p

· 相互作用

〇 创建参考点

〇 创建刚体约束

轴:

叶片:

〇 创建线条特征

点击加号,依次选择 RP-shaft和RP_blade

〇 创建连接截面


这里选择“铰”连接,上面提示除了UR1之外的自由度都将被约束,UR1就是X轴的转动自由度,但是我们的模型的转动轴为Z轴,所以这里要新建一个局部坐标系

〇 新建局部坐标系

首先抑制掉这个旧的坐标系

创建一个新的局部坐标系

基准为0,0,0,回车

X轴指向全局坐标系的Z轴,0,0,1,回车

Y轴指向0,1,0,创建基准

〇 创建连接指派

选择这根线

截面为刚刚创建的连接器截面,方向1选择刚刚建立的局部坐标系2


· 载荷

〇 创建固定


选择RP_shaft,完全固定

〇 创建旋转

初始步,位移/转角

选择RP-Blade,全部固定

编辑step-1

在UR3方向(也就是Z方向施加6.28弧度,也就是360度的转角。


· 提交作业与可视化

就还。。。挺好看的。。。


· 螺旋桨总结

这个人讲的是有问题的,他不止弄错了概念,而且在建立铰链连接之后依然选择用参考点耦合的方式施加边界条件。

我在自己探索了很久无果之后找到了这个教程,讲的更清楚一些


→→→Abaqus经典案例合集
的P20和P21讲的很清楚


在看了上面讲的参考点与部件的“耦合”约束方式之后,我想到了之前把搅拌头约束为刚体,那如果我只耦合搅拌头的上表面,那么会不会就能得到搅拌头的受力情况呢?

于是我试了一下,结果。。。。

好家伙!搅拌头直接被干碎了。。。

我想了一下,因为我把材料密度调大了,但是之前添加的塑型变化还是按照正常的材料属性填写的,我把它去掉试试。。。



○ 失败总结

总的来说我认为直接在CEL模型中提取受力数据可行性不是很高。第一CEL模型计算时间久,如果只为得到受力情况不需要这么大量的计算,第二CEL模型使用了手动的质量缩放的方法,虽然不知道会对受力情况产生什么样的影响,但是从上面的仿真结果来看,把搅拌头的刚体属性换成耦合连接之后直接被干碎了,说明影响还是很大的。
综上所述,我打算使用其他简单一些的模型来实现搅拌摩擦焊的受力仿真并提取受力数据。

2023.4.23


Abaqus支反力数据提取

之前我一直有个思维上的误区,我总是把有限元仿真里面的一个模型当做是整体,来提取他的受力。但是在这么多年(实际上是短短两三个月)的使用过程中,我知道了有限元运算的单位应该是单元和节点,输出的数据也是以单元和节点为基础的。所以没有办法一次性输出某一部分模型的仿真结果。这也加深了我对那篇论文的结果的质疑,他说直接用输出刚体受力的方法输出了搅拌头的受力情况,至少现在以我的知识储备我觉得是做不到的,当然也可能是用了我还不知道的方法。

不过呢,B站真是个好东西,真不知道以前的人没有B站是怎么学习的(就像我做本科毕业设计的时候感慨的,过去的人没有百度是怎么写论文的一样),我找了如何从仿真结果中提取某个模型的受力数据的方法。


→→→【ABAQUS后处理-支反力的提取】
→→→【ABAQUS支反力输出】


说起提取模型的受力数据,其实原理很简单,力的作用是相互的,模型的受力最终会反映到其约束位置上,那么只要提取他的约束位置的受力情况,也就是支反力,就可以得到模型的受力情况了。
其中,第一个视频使用的是普通的约束方法,也就是约束一个面,然后将整个面的单元的受力相加,得到整体的受力。

第二个视频中的方法更巧妙一些,他使用耦合约束的方法,将面耦合到一个参考点上,然后对参考点进行约束,这样整个面的受力数据就会完全集中在这个点中,只要提取该点的受力情况就可以知道整个模型的受力了。

对比来说第一种方法比较直观,但是第二种方法虽然需要额外的操作,但是对于我后面要做的联合仿真来说更加方便,所以很有参考价值。

但是在此之前我先根据之前的教程做一个模型。

首先从最普通的简化模型开始吧。

所谓热源模型就是通过仿真搅拌头与板材的摩擦生热情况,来实现焊接过程的仿真。

教程来源还是这个up主的这个视频


→→→【(详细教程)基于Abaqus的搅拌摩擦焊(FSW)模拟】


△ 在原简化模型上提取受力数据


【首先这部分是在下面的尝试之后加进来的,从逻辑上来说应该排在前面,就放这里了】


我找到了最开始做的模型,直接在上面做一些改动:

将参考点改到搅拌头的顶端,设置支反力历程输出
修正了场变量输出的时间间隔
将搅拌头运动的参考点设置为新的参考点

仿真结果如下

仿真看起来和之前是一模一样的,但是输出的支反力。。。。

这和实际情况差的也太多了吧!!


△ 建立新搅拌摩擦焊简化模型

在之前模型的基础上,我对整个过程做一些自己的改动。


○ 建立模型

先修改温度零点

up的模型用的参数是米制的,但是根据我多年的经验,这里改为mm为单位。
尺寸300_150_5

搅拌头为了保持一致,或者说偷懒,就用之前工程的直接导出

并在搅拌头上表面中心设置参考点RP-0


○ 配置材料属性

材料属性参照之前的模型材料,由于之前CEL模型修改了密度和比热容,这里把他改回来,使其与实际相符。并创建界面及指派截面。

○ 装配

关于模型的装配,我有一点点自己的想法。。。

之前做的仿真,包括看别人的论文,过程中都没有包括焊接倾角,但是我觉得倾角是个挺关键的东西,在仿真过程中实现起来应该不太难(应该吧。。。),所以在这个仿真里我尝试加入倾角的仿真。

也就是,在装配时使搅拌头倾斜一个角度,搅拌头的旋转是以搅拌头自身的坐标系为基准的,而搅拌头的平移是以模型的坐标系为基准的。

于是我建立搅拌头的参考坐标系

奖搅拌头中心点移动到距离板材1mm高度,并绕搅拌头的x轴旋转2°

现在看起来就是这样的



○ 分析步

分析步选这个

这里视频里是固定时间增量,我选择自动时间增量试试

质量缩放按照视频的设置,但是频率改为每1个时间增量(主要是我不太会改这个值。。。)

下压时间3s,停留时间5s,焊接时间10s


场输出改为每秒10个帧,历程输出一会儿再说


○ 划分网格

按照软件的流程,划分网格应该在后面,但是根据后面相互作用设置的需要,这里先为模型划分网格。

这里选择全局尺寸2,先试一试

效果如下,33750个网格

厚度方向只有3层,emmm。。。。应该够了吧。。。。

网格属性为 _显式_, _温度-位移耦合_ , _缩减积分_

这些是什么意思呢?我也不清楚。。。

搅拌头同样尺寸为2

四面体网格,温度-位移耦合


○ 相互作用

视频里选择的是面与面接触,但是为了能够更准确的体现搅拌头和材料的相互作用,我这里选择使用通用接触。

关于通用接触的一些讲解:


→→→【Abaqus进阶篇18—接触进阶-通用接触详解】


这个视频关于通用接触的一些设置,相关的含义,注意的事项讲的很详细,值得一看!

〇 设置相互作用属性

相互作用属性视频里设置了和温度相关的量,这里我先按照CEL模型的参数设置。


〇 建立接触面的集

根据上面那个讲通用接触的视频里所说,通用接触作用的是模型的外表面,如果只是用通用接触的默认设置,那么搅拌头只会和板材的外表面发生作用,不会与内部的单元发生作用,(那么CEL模型是怎么做到的呢。。。)。

所以需要将板材内部的单元的所有表面设置为一个集,然后通过通用接触里的相关设置实现搅拌头与板材内部单元的相互作用。

首先切换到网格界面

创建表面

类型是网格

点击这个按钮

选择第一个,从所有实体中选择

全选板材,完成

网格的所有面都被选中了

选择,both side

然后是搅拌头的外表面

〇 建立通用接触

选择 _所选的成对面_

点 编辑

选择刚刚建立的两个表面

如果板材变形较大,他的表面可能会和自身接触,所以可以定义一个所有的外表面和自身的接触,以及板材的内外表面和自身的接触

好了,接触设置完毕


〇 设置对流换热

参数参考之前的模型

搅拌头部分就不散热了


〇 创建搅拌头的约束

因为之前创建了参考点了,这里直接创建约束

选刚体,我之前像用耦合的方法来实现,但是今天测试了直接读取参考点的受力,发现刚体也是可以的!


○ 载荷及约束

〇 约束板材XYZ

之前CEL模型是约束不同方向的面对应的自由度,不过那个约束的是欧拉域,不影响上表面的材料流动,这里我还是用视频的方法把除了上表面的其他三个面都固定了吧。


〇 设置搅拌头的运动

这里参考之前的模型参数,但是由于这里增加了倾角,所以旋转运动是绕自身的Y轴,下压及焊接则是沿基坐标的方向

搅拌头旋转

参考点为RP-0,坐标系为搅拌头的坐标系

设置转速(暂定为104r/s)

搅拌头移动

参考点相同,坐标系为全局坐标系

下压时间为3s,考虑到搅拌针的长度和搅拌针与板材的距离,这里暂时设置为-1.93mm/s

焊接速度 3mm/s

大概就是这样


〇 预定义温度场

视频里up是把温度场设定给了每个节点,但是我觉得没有必要吧,直接把板材设定一个温度场应该是一样的,毕竟CEL模型里面也是这样设定的

24℃,因为之前设定了绝对零度为-273.15℃,所以这里是摄氏度。


○ 设置历程变量输出

这个模型最重要的目的就是得到搅拌头的受力,这里选择搅拌头的参考点RP-0的支反力作为输出


【 !】这里的Element output position的选取不知道会不会影响输出,这里先选择默认的 _积分点_


○ 提交作业与错误修改

提交,报错。。。

难道这个方法不行么。。。


· 错误修改1

分析一下,因为我在约束条件里选择了同一个点集作为参考点,那我试一试不同的参考点。

首先我在载荷界面以RP-0为参考点新建一个参考点RP-111(为什么要111呢,因为这样名字比较长容易选中。。。)

然后新建约束条件将参考点设置为RP-111

然后重新设置下压以及焊接。

这里我稍稍修改了一下,move这里只约束了移动自由度,旋转那里只约束了搅拌头自身的y方向旋转自由度。

再次提交。。

又报错了。。。

我把这个点集删除重新定义一下

还是不行,我又试了集中方法还是不行。。。

看来只能先屈服了。。。我在搅拌头的坐标中用三角函数计算一下吧。。。

焊接过程如下,下压过程由于影响很小,所以直接在y方向定义了(偷懒。。。)

【↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓】


【!!!】重要提示(2023.5.2)


后来想了一下,我在这里犯了一个错误,因为我的局部坐标系是建在“部件”里面的,所以是和部件绑定在一起的,于是当部件(搅拌头)围绕y轴自转时,坐标系也会跟随旋转!!!
因此可以预期的是,如果仿真进行到焊接阶段时,搅拌头会程一个螺旋运动,或者在原地打转,总之不会沿着焊接方向做直线运动!!!
但是!好在仿真并没有进行到那个阶段(。。。这是好在么?),所以这个设置对已经进行的仿真结果并没有造成影响。。。



至于修改方法。。。我还没有更好的方案,等到想到了我再补充



【!!!】重要提示(2023.5.4)
在进一步实验之后,我才知道无论是建立在部件上还是在装配体上的坐标系,在计算过程中abaqus都是当做相对基坐标系的变换,也就是说不会随部件的运动而运动。
虽然在装配体中,部件上的坐标系会随部件的移动而变化,但是仿真计算的时候并不会。
也就是说我这一步的操作并没有问题。。。。而且是能够按照我的预期运动的。。。。
晕。。。



那么新的问题来了,既然局部坐标系不能运动,那么怎么实现搅拌头的自转运动不受搅拌头的姿态影响呢?
这部分内容我也是探索了好几天,最终的结论在这里《Abaqus有限元分析学习笔记(2)——耦合运动/复合运动/局部坐标系随动运动实现方法》


【↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑】

提交。。。


· 错误修改2

出了点小问题。。。

好吧。。。因为没有限制那两个方向的转动自由度,于是他动了。。。

重新限制一下

再提交。。。

这次仿真了2.5s左右,然后报错了。。。

大概意思就是网格变形太大了,查看模型

好家伙!非常“炸裂”,物理意义上的


【job1:ForceAnalysis20230424 Model-1】


网格都扭曲成这样了


· 错误修改3

其实我的设想是,网格不变形,只计算受力情况,但是这可能和通用接触的设置相冲突。所以我打算先对接触类型进行调整。

同时增加网格密度,根据上次得到的部分受力数据,受力波动非常大,怀疑是网格过于稀疏造成的。

在此之前,我感觉板材尺寸过大了,按照我的想法,这个模型不需要太大的尺寸,所以只保留CEL模型中间的部分的尺寸,也就是30mm(不过按照计划,可能CEL模型中间的部分的尺寸是需要加宽的)

不过这个尺寸一改,需要修正的部分还是挺多的

先是装配

然后是网格

这次的全局尺寸改为1mm

然后是载荷

载荷部分居然震惊的不需要改

然后就是关键的相互作用了

首先我用普通的通用接触试一下,看看视频里老师说的只会作用在表面是什么情况。

提交。。。

还是报错,网格又裂开了


【job2:ForceAnalysis20230424 Model-2】



· 错误修改4

接下来我又试了面与面接触

我在选择面的时候选择的是面与节点,罚函数

依然裂开。。。

可是为什么,之前的视频里,up设置的罚函数接触,他的网格就不会裂开呢???


【job3:ForceAnalysis20230424 Model-2】



下面再试一试运动接触

还是不行,看来要换一下思路了


【job4:ForceAnalysis20230424 Model-2】



听说沙漏控制能防止网格大变形,我来试试

增加沙漏控制和扭曲控制

提交!

。。。继续扑该

这次多坚持了2s


【job5:ForceAnalysis20230424 Model-2】


而且这个受力吧。。。就感觉。。。和我预期的。。。稍微。。。有点不那么一样。。。。。

等等。。。

这个形状。。。。

层岩巨渊!是你么!!


看来沙漏和扭曲控制虽然可以一定程度抑制网格变形,但是并不能阻止网格的变形

我想的是模仿铣削的过程,但是其实和铣削最大的不同是铣削有材料的去除而我没有
所以我的网格会变形过大
但是如果我把变形过大的网格去除掉,好像并不太会影响受力!

试一试!

这次去掉“扭曲控制”勾选“单元删除”

依然不行呀,看来也不能单纯地只修改单一的属性,毕竟铣削过程的材料设置是用的JC损失函数


【job6:ForceAnalysis20230424 Model-2】


为材料添加jc damage参数,
参数来源


《Numerical Simulation of Damage on Warm Deep Drawing of Al 6061-T6 Aluminium Alloy》


不过根据这个视频,这个参数有一些不一样(其实这个是从油管搬过来的视频)


→→→【基于ABAQUS的铣削加工仿真模拟】


视频里的参数是这样的

主要区别是,他给出了子选项的参数,而且他的D5是0!

另外这篇文章里也给出了6061铝合金的材料属性


→→→【ABAQUS振动切削】


我先按照论文里的参数,然后子选项按照视频里来设置试一试

网格属性打开“单元删除”关闭“沙漏控制”

提交。。。

虽然没报错,但是。。。这是什么鬼


【job7:ForceAnalysis20230424 Model-2】



好吧我决定打开扭曲控制和沙漏控制。。。

啊这。。。。

虽然没报错,但是还是崩坏了。。。。


【job8:ForceAnalysis20230424 Model-2】


而且这个受力也不是我想要的。。。

好吧我放弃了。。。

可是。。。为什么会这样呢???


· 错误修改5

放弃了之前采用类似铣削的方法,我决定再用最原始的方法试一试,就是用视频里演示的定义面与面接触。

复制model-1为model-3重新开始了

修改尺寸,把板材由一个改为2个


接触属性先保持之前的设置

将搅拌针和轴肩的表面分别定义成集

分别定义:
搅拌针——上表面
搅拌针——焊缝(分别和左右板材)
轴肩——上表面(分别和左右板材)

的面接触

约束公式 罚接触

施加约束

除上表面和焊缝以外的面完全固定

划分网格,先用种子为2试试水

提交

这不对吧。。。是我哪里设置的不对呢?


【job9:ForceAnalysis20230424 Model-3】



难道是接触属性?

我把“法向行为”改成和视频中一样的线性

啊。。。放弃了。。。


【job10:ForceAnalysis20230424 Model-3】


2023.4.30


△ 失败总结

总之就是尝试了各种方法还是没有成功提取到受力情况。。。

在不使用CEL模型的情况下无法复现搅拌头在材料内部的运动。因为搅拌摩擦焊大变形的特性,基本都会在短时间内出现网格变形过大仿真中断的结果。

虽然没有能够达到我想要的结果,但是对接触类型和网格属性有了更进一步的了解,但是好像并没有什么用。。。。

暂时先这样吧,以后有机会再来探索。