工程师平台
Abaqus 实战2026-09-05

拉伸试验给的那条曲线,不能直接填进 Abaqus

材料报告上那条拉伸曲线是工程应力-工程应变, Abaqus 的 *PLASTIC 要的是应力-真塑性应变。两者不是同一条曲线,也不是差一个系数, 而是差两次非线性换算加一次减法。直接把报告上的数填进去,模型会比真实材料硬。 这篇把整条换算链走一遍,附一个从五个试验点算到成品表格的完整算例。
两次换算,一次减法
σtrue = σeng(1+εeng),εtrue = ln(1+εeng),然后 εpl = εtrue − σtrue/E。 三步缺一不可,最常被省掉的是最后那次减法。
第一行必须正好是 0
表的第一行是屈服点,那里塑性应变按定义就是零。 填 0.002(条件屈服的那个 0.2%)是最常见的一个错 —— 那 0.2% 是规定出来的判据,不是要报给求解器的塑性应变。
颈缩之后整段作废
抗拉强度那一点之后,试样截面不再均匀收缩, 「σ = F/A₀ 再乘 (1+ε)」这个换算的前提就没了。 那之后的点不是「精度差一点」,是根本不成立。

01为什么报告上的曲线不能直接用

拉伸试验记录的是力 F 和标距伸长 ΔL,报告上的两个量是这么算的:

σ_eng = F / A₀        ← 除的是**原始**截面积
ε_eng = ΔL / L₀       ← 除的是**原始**标距

分母全程用初始值,好处是好算、可复现,这是材料标准里统一的报告口径。 但它描述的不是试样在某一刻的真实受力状态 —— 试样拉长的时候截面在变细, 真正承受这个力的面积比 A₀ 小,所以真实应力比报告值高。

有限元求解器在大变形下跟踪的是当前构形,它需要的是当前面积上的应力 和当前长度上的应变增量,也就是真应力和真应变(对数应变)。 拿工程量喂给它,等于告诉它这个材料比实际更软 —— 变形越大,偏差越大。

小变形时差别小,但这不是省略的理由
ε 在 1% 量级时,两者差 1% 左右,确实可以忽略。 问题是塑性段动辄十几个百分点,正是差别最大的地方, 而你填 *PLASTIC 表填的就是塑性段。

02三个公式,以及它们各自的前提

① 真应力

σ_true = σ_eng · (1 + ε_eng)

推导只用一个假设:塑性变形体积不变,即 A·L = A₀·L₀。 于是 A = A₀·L₀/L = A₀/(1+εeng),代进 σ = F/A 就得到上式。 体积不变对金属的塑性段是很好的近似(弹性段严格来说不成立, 但弹性应变本来就小到不影响这里)。

② 真应变(对数应变)

ε_true = ln(1 + ε_eng)

真应变的定义是每一步的伸长都除以当时的长度再累加: dε = dL/L,从 L₀ 积到 L 就是 ln(L/L₀) = ln(1+εeng)。 这也是它叫「对数应变」的原因。

③ 减掉弹性部分

ε_pl = ε_true − σ_true / E

*PLASTIC 表里的第二列是塑性应变,不是总应变。 总应变里那一份 σ/E 的弹性应变,Abaqus 已经从 *ELASTIC 那里知道了, 再算一遍就是重复计入。忘了减这一项,材料在模型里会显得比实际软 —— 同一个应力下多出了一份本不该有的塑性变形。

E 用哪个
这里的 E 必须和你填进 *ELASTIC 的那个弹性模量是同一个数。 用报告里的名义值算换算、却给 Abaqus 填另一个值,会让第一行的塑性应变不等于 0, 直接撞上下一篇讲的那条报错。

03第一行为什么必须是 0

*PLASTIC 表的第一行定义的是屈服点: 应力达到这个值,材料开始产生塑性变形。在这一点上,塑性变形还没发生, 所以塑性应变按定义就是 0。这不是格式要求,是物理定义。

实际操作中,把第一行填成 0.002 的人很多,来源是条件屈服强度 Rp0.2:材料没有明显屈服平台时,规定「残余塑性应变达到 0.2% 时的应力」 为屈服强度。那个 0.2% 是用来定义这个应力值的判据, 不是要交给求解器的数据。Rp0.2 这个应力对应的塑性应变, 在表里仍然记作 0。

写法第一行结果
正确[345, 0]屈服点 345,从这里开始硬化
错(拿 Rp0.2 的判据当数据)[345, 0.002]被拦下:the first plastic strain must be 0
错(把弹性应变也算进去了)[345, 0.00167]同上,且说明第 02 节那次减法漏了
第三种写法的 0.00167 恰好是 345/206000,也就是屈服点的弹性应变 —— 出现这个数就是没减。

04完整算例:五个点算到成品表

下面的输入数据是示意值
这五个点是为了演示换算流程编的,不是任何牌号的材料参数, 请不要抄进你的模型。要用真实数据,请查你手上的材料报告或本站材料参数库(那里每条都标了出处)。

设 E = 206000 MPa(mm 单位制,见上一篇),报告上读到五个点:

#σ_eng (MPa)ε_eng说明
13450.0017屈服点
24100.020
34650.060
45000.120
55100.160抗拉强度,颈缩开始

逐点套三个公式:

#1:  σ_true = 345 × (1 + 0.0017) = 345.6
     塑性应变按定义记 0(应力那一列照样要换算,别原样抄 345)

#2:  σ_true = 410 × (1 + 0.020)  = 418.2
     ε_true = ln(1.020)            = 0.019803
     ε_pl   = 0.019803 − 418.2/206000
            = 0.019803 − 0.002030  = 0.017773

#3:  σ_true = 465 × 1.060          = 492.9
     ε_true = ln(1.060)            = 0.058269
     ε_pl   = 0.058269 − 0.002393  = 0.055876

#4:  σ_true = 500 × 1.120          = 560.0
     ε_true = ln(1.120)            = 0.113329
     ε_pl   = 0.113329 − 0.002718  = 0.110611

第 5 点是颈缩起点,按下一节的规矩不进表。 最终交给 Abaqus 的是:

*PLASTIC
345.6,   0.0
418.2,   0.017773
492.9,   0.055876
560.0,   0.110611

写成插件读的 JSON 库是同一组数:

"plastic": {
  "hardening": "ISOTROPIC",
  "table": [
    [345.6, 0.0],
    [418.2, 0.017773],
    [492.9, 0.055876],
    [560.0, 0.110611]
  ]
}
别过度取整
塑性应变四舍五入到小数点后三位,0.017773 变成 0.018 看着没事,但相邻两点靠得近时(比如 0.0177 和 0.0182)取整后会变成同一个数, 于是撞上「塑性应变必须递增」那条报错。留够四到六位有效数字。

05颈缩之后的数据为什么整段作废

第 02 节那个 σtrue = σeng(1+εeng) 有个隐含前提:试样全长均匀变形。只有均匀变形,标距上测到的 ε 才代表每一处的应变, 截面积才能用 A₀/(1+ε) 反推。

过了抗拉强度点,变形集中到一小段(颈缩区),标距上测到的伸长主要来自那一小段, 而颈缩区的真实截面积比公式算出来的小得多。这时候:

  • 换算出来的真应力偏低(真实截面更小,真应力应该更高);
  • 换算出来的真应变没有物理对应物(它是标距平均值,不是任何一点的应变);
  • 工程曲线在这段是下降的,硬填进去还会违反「塑性应变递增、 应力一般也递增」的常规,直接被拦。
需要颈缩后的数据怎么办
大变形、失效分析确实需要抗拉强度之后的硬化行为, 但那必须靠反算拿到:先用颈缩前的段建模,再用试验的力-位移曲线 反复标定后段,或者引入 Bridgman 修正。 不能直接把报告后半段的数字抄进表 —— 那不是「精度差一点」,是前提不成立。

06交表前六条自查

  1. 单位对上了吗:σ 用 MPa 还是 Pa,要和 *ELASTIC 里的 E 同套。
  2. 第一行塑性应变是 0,不是 0.002,不是 σ/E。
  3. 塑性应变严格递增,没有因为取整撞出相等的两行。
  4. 减弹性应变时用的 E,和填进 *ELASTIC 的是同一个数。
  5. 抗拉强度点之后的数据已经剔除。
  6. 温度相关的话,每个温度自成一组、各自从塑性应变 0 起算 —— 这条属于格式规则,下一篇专门讲。

这六条里前五条插件都会在写进模型之前替你核一遍,第 2、3 条不过就直接报错、 并指出是第几行(报错原文见帮助文档的报错对照表)。第 1 条和第 5 条它管不了 —— 单位是你选的,颈缩点在哪只有你知道。

常见问题

Abaqus 的 *PLASTIC 表要填工程应力还是真应力?

必须填真应力和真塑性应变。材料报告上给的是工程应力-工程应变,需要两次换算加一次减法:真应力 = 工程应力 ×(1+工程应变),真应变 = ln(1+工程应变),塑性应变 = 真应变 − 真应力/E。直接填工程量会让材料在模型里显得偏软,变形越大偏差越大。

真应力真应变的换算公式是什么?

σ_true = σ_eng × (1 + ε_eng),ε_true = ln(1 + ε_eng)。第一式来自塑性变形体积不变的假设 A·L = A₀·L₀,第二式来自真应变的定义 dε = dL/L 从 L₀ 积到 L。填 Abaqus 还要再减去弹性部分:ε_pl = ε_true − σ_true/E,其中 E 必须和填进 *ELASTIC 的弹性模量是同一个数。

塑性表第一行的塑性应变能不能填 0.002?

不能,必须填 0。0.002 来自条件屈服强度 Rp0.2 的定义——残余塑性应变达到 0.2% 时的应力。那个 0.2% 是用来确定这个应力值的判据,不是要交给求解器的数据。表的第一行代表屈服点,那里塑性变形还没发生,塑性应变按定义就是零。填 0.002 会被拦下,报错是 the first plastic strain must be 0。

为什么算出来的第一行塑性应变是 0.00167 而不是 0?

因为漏了减弹性应变那一步。0.00167 正好等于屈服应力除以弹性模量,也就是屈服点的弹性应变。塑性应变 = 真应变 − 真应力/E,减掉之后屈服点自然归零。如果减了还不为零,说明换算用的 E 和填进 *ELASTIC 的 E 不是同一个数。

抗拉强度之后的数据能填进塑性表吗?

不能。真应力换算的前提是试样全长均匀变形,颈缩开始后变形集中在一小段,标距测到的应变不再代表任何一点的真实应变,公式反推出的截面积也偏大。而且工程曲线在这一段是下降的,填进去还会违反塑性应变递增。确实需要颈缩后的硬化行为时,只能用试验的力-位移曲线反算标定,或者做 Bridgman 修正,不能直接抄报告后半段。

塑性应变保留几位小数合适?

至少四到六位有效数字。过度取整会出问题:相邻两个点本来是 0.0177 和 0.0182,四舍五入到三位小数都变成 0.018,于是撞上「塑性应变必须沿表严格递增」这条规则被拦下。应力那一列取整宽松一些无所谓,塑性应变这一列不要压位数。

这一步可以不自己做

换算本身不难,难在每换一种材料就要重做一遍、而且算错了求解器不会拦你。 插件读的是已经算好的真应力-真塑性应变表,导入前还会再核一遍起点和单调性。

在线材料库需要 Abaqus 2023 或更高版本;2022 及更早只能用本地 JSON 材料库。