01为什么报告上的曲线不能直接用
拉伸试验记录的是力 F 和标距伸长 ΔL,报告上的两个量是这么算的:
σ_eng = F / A₀ ← 除的是**原始**截面积
ε_eng = ΔL / L₀ ← 除的是**原始**标距分母全程用初始值,好处是好算、可复现,这是材料标准里统一的报告口径。 但它描述的不是试样在某一刻的真实受力状态 —— 试样拉长的时候截面在变细, 真正承受这个力的面积比 A₀ 小,所以真实应力比报告值高。
有限元求解器在大变形下跟踪的是当前构形,它需要的是当前面积上的应力 和当前长度上的应变增量,也就是真应力和真应变(对数应变)。 拿工程量喂给它,等于告诉它这个材料比实际更软 —— 变形越大,偏差越大。
*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 那里知道了, 再算一遍就是重复计入。忘了减这一项,材料在模型里会显得比实际软 —— 同一个应力下多出了一份本不该有的塑性变形。
*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 节那次减法漏了 |
04完整算例:五个点算到成品表
设 E = 206000 MPa(mm 单位制,见上一篇),报告上读到五个点:
| # | σ_eng (MPa) | ε_eng | 说明 |
|---|---|---|---|
| 1 | 345 | 0.0017 | 屈服点 |
| 2 | 410 | 0.020 | |
| 3 | 465 | 0.060 | |
| 4 | 500 | 0.120 | |
| 5 | 510 | 0.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+ε) 反推。
过了抗拉强度点,变形集中到一小段(颈缩区),标距上测到的伸长主要来自那一小段, 而颈缩区的真实截面积比公式算出来的小得多。这时候:
- 换算出来的真应力偏低(真实截面更小,真应力应该更高);
- 换算出来的真应变没有物理对应物(它是标距平均值,不是任何一点的应变);
- 工程曲线在这段是下降的,硬填进去还会违反「塑性应变递增、 应力一般也递增」的常规,直接被拦。
06交表前六条自查
- 单位对上了吗:σ 用 MPa 还是 Pa,要和
*ELASTIC里的 E 同套。 - 第一行塑性应变是 0,不是 0.002,不是 σ/E。
- 塑性应变严格递增,没有因为取整撞出相等的两行。
- 减弹性应变时用的 E,和填进
*ELASTIC的是同一个数。 - 抗拉强度点之后的数据已经剔除。
- 温度相关的话,每个温度自成一组、各自从塑性应变 0 起算 —— 这条属于格式规则,下一篇专门讲。
这六条里前五条插件都会在写进模型之前替你核一遍,第 2、3 条不过就直接报错、 并指出是第几行(报错原文见帮助文档的报错对照表)。第 1 条和第 5 条它管不了 —— 单位是你选的,颈缩点在哪只有你知道。