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

塑性表报错,翻来覆去就是这三种

塑性表被拦下来的原因,翻来覆去就是三类:起点不是 0应变不递增各行列数不一致。 这三条不是软件的挑剔,每一条背后都对应一个求解器没法处理的情况。 这篇给出每类报错的原文、触发它的表长什么样、改完长什么样, 以及温度相关材料为什么会同时踩中前两条。
三条规则,逐组校验
首行塑性应变为 0、塑性应变严格递增、所有行列数一致。 有温度列时,前两条是按温度分组各自校验的,不是全表一遍。
「递增」是严格递增
相等也不行。取整把 0.0177 和 0.0182 都压成 0.018,就会撞上这条。 报错会把两个数一起打出来:got 0.018 after 0.018
多出来的那一列是温度
[345, 0] 是两列,[345, 0, 20] 是三列。 只给一部分行加温度列,剩下的行不会「默认室温」,而是整表被判非法。

01第一类:第一行塑性应变不是 0

报错原文
plastic: the first plastic strain must be 0, got 0.002
有温度列时会带上温度:the first plastic strain at temperature 400 must be 0

表的第一行是屈服点,塑性变形还没开始,塑性应变按定义就是零。 这一条被触发通常只有两个来源:

第一行填成来源怎么改
0.002条件屈服强度 Rp0.2 里那个 0.2%那 0.2% 是判据不是数据,改成 0
0.00167换算时忘了减弹性应变(正好等于 σ/E)回去补一次 εpl = εtrue − σtrue/E
-1e-8减出来的极小负数,浮点误差直接写 0,不要留一个「几乎是 0」

第二种情况值得多说一句:如果减了弹性应变第一行还不是 0, 说明换算用的 E 和填给 *ELASTIC 的 E 不是同一个数。 这两处必须一致,上一篇有完整推导。

02第二类:塑性应变不递增

报错原文
plastic: plasticStrain must increase down the table, got 0.018 after 0.018

硬化曲线是「塑性应变 → 屈服应力」的一个函数关系, 求解器要在两点之间做插值。横坐标出现相等或倒退的两点, 这个关系就不是函数了 —— 同一个应变对应两个应力,插值无从谈起。

三个常见来源

  • 取整压平。 最常见。0.0177 和 0.0182 保留三位小数都成了 0.018。 解决办法是塑性应变留四到六位有效数字,不要图好看压位数。
  • 行顺序被打乱。 从 Excel 复制时按应力排了序、 或者温度相关表里把不同温度的行交叉着写(见下一节)。
  • 把工程应变直接抄进来了。 颈缩之后工程应变还在涨但应力在跌, 有人手工「修正」时会去动应变列,一动就乱。正确做法是整段剔除。
应力列可以不递增,应变列必须
软化材料的屈服应力是可以往下走的,插件不拦。 它只要求屈服应力为正plastic: yieldStress must be positive, got 0。 真正必须单调的是塑性应变那一列。

03第三类:各行列数不一致

报错原文
plastic: all rows must have the same length

塑性表的列数决定了它是不是温度相关的:

列数含义
2 列[屈服应力, 塑性应变],不随温度变[345, 0]
3 列[屈服应力, 塑性应变, 温度],温度相关[345, 0, 20]
插件的判断规则很直白:行比属性本身需要的列数多出来一列,那一列就是温度(materialImporterKernel.py 的 _rows())。

所以下面这张表是非法的 —— 前两行说「我是温度相关的」,后两行说「我不是」:

"table": [
  [345, 0,        20],
  [450, 0.05,     20],
  [300, 0],            ← 少一列
  [380, 0.05]          ← 少一列
]

缺的那两行不会被当成「默认室温」,也不会被跳过,整块直接判非法。 这是故意的:静默地替你猜一个温度,比报错危险得多。

04温度相关表:前两条规则是按组算的

温度相关的塑性表,本质上是好几条硬化曲线摞在一起, 每个温度一条。所以「首行为 0」和「严格递增」这两条规则, 是在每一组内部各自成立,而不是整张表从头到尾成立。

正确的排法是按温度分块,块内从 0 起算:

"table": [
  [355, 0.00,  20],     ┐
  [420, 0.02,  20],     │ 20 °C 这条曲线
  [450, 0.05,  20],     ┘

  [300, 0.00,  400],    ┐
  [340, 0.02,  400],    │ 400 °C 这条曲线,塑性应变重新从 0 起
  [380, 0.05,  400]     ┘
]

注意第四行的塑性应变又回到了 0。 如果按「整表必须递增」去理解,这里看着像是倒退了 —— 但它是新一组的第一行,正是必须为 0 的那一行。

交叉着写会同时踩中两条

[355, 0.00,  20],
[300, 0.00,  400],    ← 温度跳了
[420, 0.02,  20],     ← 又跳回来
[340, 0.02,  400]

插件按出现顺序分组:第一次见到 20 建一组, 第一次见到 400 再建一组,之后同温度的行追加到各自组里。 上面这种写法虽然分完组之后每组内部是对的, 但它极其容易在人工编辑时错行,而且 Abaqus 关键字文件本身也要求按温度块书写。同一个温度的行连着写,是唯一不会出事的排法。

温度用摄氏还是开氏
这一列只要和模型里其他地方的温度同一个标度就行。 只涉及温差的分析两者等价;出现绝对温度(辐射、Johnson-Cook)时必须统一到开氏。 见第一篇的第 05 节

05顺带会撞上的几条邻近报错

塑性表改对了,紧接着常见的是这几条。它们不属于塑性,但出现在同一次导入里:

报错含义改法
plastic: needs a "table" of [yieldStress, plasticStrain] rows塑性块写成了标量或缺了 table 键塑性至少两列,不能像密度那样写成 "plastic": 345
plastic: "table" is empty有 table 键但里面是空数组要么补数据,要么整块删掉——不需要塑性的材料可以只写弹性
plastic: row [345, "0"] is not a list of numbers某个值是字符串去掉引号。从 Excel 导出的 JSON 最容易带引号
elastic: poissonsRatio must be between -1 and 0.5 (exclusive), got 0.5泊松比取了 0.50.5 是不可压缩极限,等向弹性用不了。橡胶一类要走超弹
报错全表见帮助文档第 08 节,共 22 条。

JSON 材料库的字段全集(哪些块可选、每块要几列、温度列怎么加)在帮助文档第 05 节,报错对照表在第 08 节

06为什么值得在写进模型之前就拦

这三条规则 Abaqus 自己也会查,区别在于什么时候查、说得多清楚。 手工在 CAE 的材料编辑器里敲表,错误往往要到点确定甚至提交作业时才暴露, 而且提示只告诉你「有问题」,不会告诉你是第几行、在哪个温度上、哪个数比哪个数小。

更麻烦的是部分成功:十种材料导到第七种出错, 前六种已经建进模型了,你得先搞清楚哪些建了哪些没建。 插件的做法是每种材料独立处理 —— 一条数据有问题就报出来并跳过它, 不影响其余材料,最后给一份「哪几种成功、哪几种因为什么跳过」的清单。

  1. 三条规则在写进模型前逐行核,报错带行号、温度、具体数值;
  2. 坏的那一条跳过,其余照建,不会半途而废留下一个半成品模型;
  3. 单位换算同时完成 —— 表格格式对了但单位错了照样白搭, 这一层见第一篇

常见问题

Abaqus 报 the first plastic strain must be 0 是什么意思?

塑性表的第一行代表屈服点,那里塑性变形还没发生,塑性应变必须正好是 0。填成 0.002 通常是把条件屈服强度 Rp0.2 里的 0.2% 判据当成了数据;填成 0.00167 这类值通常是换算时忘了减弹性应变,那个数正好等于屈服应力除以弹性模量。温度相关的表里,每个温度那一组的第一行都要各自为 0,报错会带上是哪个温度。

plasticStrain must increase down the table 怎么解决?

塑性应变必须严格递增,相等也不行。最常见的原因是取整:0.0177 和 0.0182 保留三位小数都变成 0.018,报错会打印成 got 0.018 after 0.018。把塑性应变保留四到六位有效数字即可。另两个来源是从 Excel 复制时按应力排了序打乱行顺序,以及把颈缩之后的数据也填了进来——那一段应该整段剔除。

Abaqus 材料表报 all rows must have the same length 怎么办?

塑性表的列数决定它是不是温度相关:两列是 [屈服应力, 塑性应变],三列是 [屈服应力, 塑性应变, 温度]。多出来的那一列一律解释为温度。只给一部分行加温度列,缺列的行不会被当成默认室温,整块会直接判为非法。把所有行补齐到同样的列数即可。

温度相关的塑性表怎么排?

按温度分块,同一个温度的行连着写,每一块内部的塑性应变从 0 重新起算。比如 20 °C 那组写完 0、0.02、0.05 三行,再写 400 °C 那组,第一行的塑性应变仍然是 0。规则是按组校验的,不是整表从头到尾递增,所以第二组第一行回到 0 是正确的,不是倒退。不同温度的行交叉着写虽然分组后可能仍然合法,但极易在人工编辑时错行。

屈服应力可以填 0 或者负数吗?

不行,屈服应力必须为正,报错是 yieldStress must be positive。但屈服应力这一列不要求递增——软化材料的应力沿表下降是允许的。必须单调递增的是塑性应变那一列,因为求解器要在相邻两点之间对硬化曲线做插值,横坐标相等或倒退时这个插值就不成立了。

为什么泊松比不能填 0.5?

0.5 是不可压缩极限,等向线弹性的体积模量在这里发散,数值上无法处理。允许范围是 -1 到 0.5 之间且不含端点,报错原文是 poissonsRatio must be between -1 and 0.5 (exclusive)。橡胶这类接近不可压缩的材料不能靠把泊松比顶到 0.4999 来近似,应该改用超弹本构。

这一步可以不自己做

这三条规则插件在写进模型之前就逐行核过,报错会直接告诉你是第几行、在哪个温度上、 哪个数比哪个数小。不用等 CAE 弹一句英文再回头翻表。

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