ANSYS 疲劳分析
疲劳是指结构在低于静态极限强度载荷的重复载荷作用下,出现断裂破坏的
现象。例如一根能够承受 300 KN 拉力作用的钢杆,在 200 KN 循环载荷作用
下,经历 1,000,000 次循环后亦会破坏。导致疲劳破坏的主要因素如下:
载荷的循环次数;
每一个循环的应力幅;
每一个循环的平均应力;
存在局部应力集中现象。
真正的疲劳计算要考虑所有这些因素,因为在预测其生命周期时,它计算“消
耗”的某个部件是如何形成的。
1. ANSYS 程序处理疲劳问题的过程
ANSYS 疲劳计算以 ASME 锅炉和压力容器规范(ASME Boiler and Pressure
Vessel Code)作为计算的依据,采用简化了的弹塑性假设和 Mimer 累积疲劳准则。
除了根据 ASME 规范所建立的规则进行疲劳计算外,用户也可编写自己的宏指
令,或选用合适的第三方程序,利用 ANSYS 计算的结果进行疲劳计算。《ANSYS
APDL Programmer’s Guide》讨论了上述二种功能。ANSYS 程序的疲劳计算能力
如下:
(1) 对现有的应力结果进行后处理,以确定体单元或壳单元模型的疲劳寿命耗用
系数(fatigue usage factors)(用于疲劳计算的线单元模型的应力必须人工输
入);
(2) 可以在一系列预先选定的位置上,确定一定数目的事件及组成这些事件的载
荷,然后把这些位置上的应力储存起来;
(3) 可以在每一个位置上定义应力集中系数和给每一个事件定义比例系数。
2. 基本术语
位置(Location):在模型上储存疲劳应力的节点。这些节点是结构上某些容易产
生疲劳破坏的位置。
事件(Event):是在特定的应力循环过程中,在不同时刻的一系列应力状态。
载荷(Loading):是事件的一部分,是其中一个应力状态。
应力幅:两个载荷之间应力状态之差的度量。程序不考虑应力平均值对结果的影
响。
3. 疲劳计算
完成了应力计算后,就可以在通用后处理器 POST1 中进行疲劳计算。一般
有五个主要步骤:
(1) 进入后处理 POST1,恢复数据库;
(2) 建立位置、事件和载荷的数目,定义材料疲劳性质,确定应力位置和定
义应力集中系数;
(3) 存储不同事件和不同载荷下关心位置的应力,并指定事件的重复次数和
比例系数;
(4) 激活疲劳计算;
(5) 查看结果。
3.1 进入 POST1 和恢复数据库
依照下列步骤进行疲劳计算:
(1) 进入 POST1
命令:POST1
GUI:Main Menu>General Postproc
(2) 把数据库文件(Jobname.DB)读入到在内存中(如果所要做的疲劳计算是正在
进行的 ANSYS 计算过程的继续,则 Jobname.DB 文件已在内存中)。结果文
件(Jobname.RST)必须已经存在并将其读入内存。
命令:RESUME
GUI:Utility Menu>File>Resume from
3.2 建立疲劳计算的规模、材料疲劳性质和疲劳计算的位置
(1) 定义位置、事件和载荷的最大数目
缺省情况下,疲劳计算最多包括 5 个节点位置,10 个事件,每个事件中 3
个载荷。如果需要,可以通过下面的命令来设置较大的规模(即较多的位置、事
件和载荷)。
命令:FTSIZE
GUI:Main Menu>General Postproc>Fatigue>Size Settings
(2) 定义材料的疲劳性质
为了计算各种耗用系数,以及为了包含简化弹塑性效应,必须定义材料的疲
劳性质。在疲劳计算中,感兴趣的材料性质有:
S-N 曲线:应力幅[(Smax-Smin)/2]-疲劳循环次数的关系曲线。ASME S-N 曲线考
虑了最大平均应力的影响。如果需要,应把输入的 S-N 曲线进行调节以便考虑
平均应力强度效应。如果不输入 S-N 曲线,那么对于各种可能的应力状态的组
合,应力幅将降序排列,但不计算耗用系数。
命令:FP
GUI:Main Menu>General Postproc>Fatigue>S-N Table
Sm-T 曲线:设计应力强度值-温度曲线。如要考虑检查应力范围是否进入塑性,
就必须定义该曲线。
命令:FP
GUI:Main Menu>General Postproc>Fatigue>Sm_T Table
弹塑性材料参数 M 和 N(应变强化指数):只在需要使用简化的弹塑性准则时,
才输入 M、N。这些参数可以从 ASME 规范中获得。
命令:FP
GUI:Main Menu>General Postproc>Fatigue>Elas-plas Par
下述例子说明了用于输入疲劳材料性质的 FP 命令的使用方法:
! Define the S-N table:
FP,1,10,30,100,300,1000,10000 ! Allowable Cycles, N
FP,7,100000,1000000 ! "
FP,21,650,390,240,161,109,59 ! Alternating Stress-
FP,27,37,26 ! Intensity Range, S, ksi
! Define the Sm-T table:
FP,41,100,200,300,400,500,600 ! Temperature, deg F
FP,47,650,700,750,800 ! "
FP,51,20,20,20,18.7,17.4,16.4 ! "Design Stress-Intensity
FP,57,16.1,15.9.15.5,15.1 ! Value", Sm (=2/3*Sy or 1/3 *Su), ksi
! Define the elastic-plastic material parameters:
FP,61,1.7,.3 ! M and N
(3) 定义应力位置和应力集中系数
下面的选项允许用户显式地定义疲劳计算中关心的节点位置、该位置的应力
集中系数,以及在该位置的一个短的标题(可用 20 个字母)。
命令:FL
GUI:Main Menu>General Postproc>Fatigue>Stress Locations
注意--不是所有的疲劳分析都需要使用 FL 命令。如果使用 FS、FSNODE 或
FSSECT 等命令(见下),则疲劳节点位置是自动定义的。假使在建模时包含有足
够细的网格,则所计算的应力是准确的,因此不必指定应力集中系数 SCFs (但是
如果考虑表面影响、尺寸影响和腐蚀影响,则仍然需要指定 SCFs )。在计算疲劳
时如果只需要考察一个位置,则可以省略标题。假使定位明确,或是不需要应力
集中系数和标题,则可完全不使用 FL 命令。
这里给出了在一个圆柱筒分析中应用 FL 命令的例子。整体坐标 Y 轴为旋
转轴。在不同壁厚交界处的外壁给出了应力集中系数 SCFs (针对轴向线性化应
力)。
FL,1,281,,,,Line 1 at inside
FL,2,285,,1.85,,Line 1 at outside
FL,3,311,,,,Line 2 at inside
FL,4,315,,2.11,,Line 2 at outside
3.3 储存应力、指定事件循环次数和比例因子
(1) 储存应力
为了进行疲劳计算,程序必须知道每一个位置上不同事件和载荷时的应力,
以及每一个事件的循环次数。可采用下列选项来存储每一个位置、事件和载荷组
合情况下的应力:
人工储存应力;
从(Jobname.RST)文件中取得节点应力;
横截面应力。
[警告]:程序从不假定存在 0 应力条件。如果一定要考虑零应力条件,就必须在
每一个事件中明确地输入何处产生零应力。
下面的命令序列,说明如何存储应力。在某些情况下,用户也可以用 LCASE
命令代替 SET 命令。
人工储存应力: FS
从 Jobname.RST 中取出节点应力: SET,FSNODE
横截面应力: PATH,PPATH,SET,FSSECT
(横截面计算也需从 Jobname.RST 的数据中取得)
可以用不同的方法在一个事件中储存应力。下面说明各种不同的方法。
人工储存应力
可以人工存储应力和温度(不是直接从 Jobname.RST 的结果文件取得)。在
这种情况下,实际并没有将 POST1 的疲劳模块作为后处理器,而是仅仅作为疲
劳计算器使用。线单元(如梁单元)的应力必须人工输入,因为疲劳模块不能如体
元或壳元那样从结果文件中读取数据。
命令:FS
GUI:Main Menu>General Postproc>Fatigue>-Store Stresses-Specified Val
下面的例子说明用上述命令输入的方式:
FS,201,1,2,1,-2.0,21.6,15.2,4.5,0.0,0.0
FS,201,1,2,7,450.3
在这个例子中,只输入了全应力(1~6 项)和温度。如果还要输入线性化应力,
它们将紧随在温度后面,即 8~13 项。
注意--对只有轴向应力的梁单元,只需输入一个应力分量(SX),其余各项空白。
从结果文件中提取应力
该方法把包含有 6 个分量的节点应力向量直接储存在结果的数据库内。随后
可以用 FS 命令修正存入的应力分量。
注意--在执行 FSNODE 命令之前,必须使用 SET 命令,可能还有 SHELL 命
令。SET 命令从数据库的 Jobname.RST 文件中读取某一特殊载荷子步下的结
果,SHELL 命令可选择从壳单元的顶面、中面或底面读取结果(缺省是从顶面
读取结果)。
命令:FSNODE
GUI:Main Menu>General Postproc>Fatigue>-Store Stresses-From rst File
下面给出用 FSNODE 命令在一个事件的一个节点位置输入应力结果的例
子:
SET,1 ! Define data set for load step 1
FSNODE,123,1,1 ! Stress vector at node 123 assigned to event 1, loading 1.
SET,2 ! Define data set for load step 2
FSNODE,123,1,2 ! ...event 1, loading 2
SET,3 ! ...load step 3
FSNODE,123,1,3 ! ...event 1, loading 3
图 1. 一个事件中的三个荷载
横截面应力
本选项计算和存储截面路径(它是由以前的 PATH 和 PPATH 命令定义的)
端点的线性化应力。因为通常线性化应力计算是在能代表两个表面的最短距离的
线段上进行的,因此,只需在两个表面上各取一个点来描述 PPATH 命令中的路
径。这一步骤将从计算结果的数据库中获得应力;因此必须在 SET 命令之前使
用 FSSECT 命令。用 FSSECT 命令储存的应力分量可用 FS 命令修正。
命令:FSSECT
GUI:Main Menu>General Postproc>Fatigue> -Store Stresses - At Cross Sect
使用 FSSECT 命令的方法可用下述例子说明。如果节点位置没有在 FL 命
令中指定,则在该例子中命令 FSSECT 将自动给两个路径节点 391 和 395 设
定位置编号。
图 2. 在执行 FSSECT 命令之前由 PPATH 命令识别的表面节点
(2) 列表、显示或删除储存的应力
用下列选项对储存的应力进行列表、绘图或删除。
[1] 列出每一个位置、每一个事件、每一种载荷或每一种应力状态下的储存应力:
命令:FSLIST
GUI:Main Menu>General Postproc>Fatigue>-Store Stresses-
List Stresses
[2] 对某一位置和事件,以载荷号的函数来显示应力项:
命令:FSPLOT
GUI:Main Menu>General Postproc>Fatigue>-Store Stresses-
Plot Stresses
[3] 删除储存在某一位置、事件和载荷下的应力状态:
命令:FSDELE
GUI:Main Menu>General Postproc>Fatigue>-Store Stresses-
Dele Stresses
[4] 删除某一位置上的所有应力:
命令:FL
GUI:Main Menu>General Postproc>Fatigue>Stress Locations
[5] 删除在某一事件中各种载荷下的所有应力:
命令:FE
GUI:Main Menu>General Postproc>Fatigue>Erase Event Data
(3) 设定事件重复次数和比例系数
本选项确定事件重复次数(对该事件的所有荷载和所有位置)。也可对该事件
中构成载荷的所有应力施加比例系数。
命令:FE
GUI:Main Menu>General Postproc>Fatigue>Assign Events
下面给出该步骤的一个例子:
FE,1,-1 ! Erase all parameters and fatigue stresses formerly used for event 1.
FE,2,100,1.2 !Assign 100 occurrences to events 2, 3 and 4,
*REPEAT,3,1 ! and scale by 1.2.
FE,5,500 ! Assign 500 occurrences to event 5.
3.4 获得准确的耗用系数
结构常常承受各种最大和最小应力,它们发生的顺序是未知的(甚至是随机
的)。因此就必须小心地考虑如何在各种可能的应力范围内,得到正确的重复循
环次数,以获得有效的疲劳寿命耗用系数。
ANSYS 程序自动计算所有可能的应力范围,同时采用我们通常所知道的
“雨流”法记数,跟踪这些应力发生的次数。在选定的节点位置,对所有事件进
行搜索,以寻找产生最大应力幅的载荷对(应力矢量)。记录这些应力幅的重复次
数,同时包含这些载荷的事件的剩余重复次数随之减少。最终至少有一个事件在
某一位置被“用光”,而属于这一事件的其它应力状态,在随后的过程中将被忽
略。这一过程一直进行着,直到所有的应力幅及重复次数都被计及后结束。
[警告]通常容易误用疲劳模块的记数功能。如果需要使疲劳计算得到正确的耗用
系数,就必须小心地设计好事件。
设计事件时遵循下列规则:
(1) 了解 ANSYS 的内部逻辑记数算法,参见《ANSYS Theory Reference》
§19.5,详细地讲述 ANSYS 程序如何记数。
(2) 由于在三维应力状态,很难预测哪一个载荷步具有极值应力,因此可以
对每一个事件采用多个载荷群,以便成功获得极值应力(如图 1)。
(3) 如果在某一给定的事件中,只包含一个极值应力,则将获得一个较保守
的结果。如果在一个事件中,引入不止一个极值应力,则有时将产生不
保守的结果。如下例所示:
考察一个加载历程,由两个稍有不同的循环构成:
载荷循环 1:做 500 次循环,Sx = +50.0 ~ -50.1 ksi。
载荷循环 2:做 1000 次循环,Sx = +50.1 ~ -50.0 ksi。
显然这是应力幅为 50 Ksi 的 1500 次循环。然而,如果不小心把这些载荷
划分成两个事件,则将导致不正确的记数结果。请看该结果如何:
事件 1 载荷 1: Sx = 50.0 500 次循环
载荷 2: Sx = -50.1
事件 2 载荷 1: Sx = 50.1 1000 次循环
载荷 2: Sx = -50.0
可能的应力幅是:
a、从 E1,L1 到 E1,L2: 50.05 ksi
b、从 E1,L1 到 E2,L1: 0.05 ksi
c、从 E1,L1 到 E2,L2: 50.00 ksi
d、从 E1,L2 到 E2,L1: 50.10 ksi
e、从 E1,L2 到 E2,L2: 0.05 ksi
f、从 E2,L1 到 E2,L2: 50.05 ksi
把这些应力幅从大到小排列:
d、从 E1,L2 到 E2,L1: 50.10 ksi
a、从 E1,L1 到 E1,L2: 50.05 ksi
f、从 E2,L1 到 E2,L2: 50.05 ksi
c、从 E1,L1 到 E2,L2: 50.00 ksi
b、从 E1,L1 到 E2,L1: 0.05 ksi
e、从 E1,L2 到 E2,L2: 0.05 ksi
则记数将如此:
d、从 E1,L2 到 E2,L1 500 次循环 - E1 和 E2 用去 500 次循环
a、从 E1,L1 到 E1,L2 0 次循环 - E1 已用光
f、从 E2,L1 到 E2,L2 500 次循环 - E2 又用去 500 次循环
c、从 E1,L1 到 E2,L2 0 次循环 - 两个事件都用光
b、从 E1,L1 到 E2,L1 0 次循环 - 两个事件都用光
e、从 E1,L2 到 E2,L2 0 次循环 - 两个事件都用光
上面记录了 50 ksi 应力幅的 1000 次循环,而不是已知的 1500 次循环。
这个错误的结果是由于不恰当的事件组合导致的。
假使载荷被描述为各自分离的事件(如 E1,L1 => E1; E1,L2 => E2; E2,L1 =>
E3; E2,L2 => E4),则将得到下列的记数范围:
d、从 E2 到 E3 的 500 次循环,用去 500 次 循环
a、从 E1 到 E2 的 0 次循环,因为 E2“用光”了
f、从 E3 到 E4 的 500 次循环,E3 又用去 500 次循环,E4 用去 500 次循
环
c、从 E1 到 E4 的 500 次循环,E4 又用去 500 次循环