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

材料名不是标签,它要过四关

材料名看起来只是个标签,实际上它同时活在四个地方:JSON 文件、CAE 模型、 导出的 .inp 关键字文件、插件的勾选名单。四个地方的规则不一样 —— 文件里合法的,进了 CAE 可能变问号;CAE 收的,勾选名单可能把它劈成两半。 这篇把插件这一层查什么、Abaqus 那一层拒什么、以及一套不会出事的命名法一次讲清。
字母、数字、下划线,到此为止
连字符 Abaqus 不收;中文不配 locale 全变问号; 逗号会把勾选导入的名单劈断。要记只记这一句。
文件内重名整批拒,模型内重名默认跳过
两种「重名」是两套机制、两条不同的消息, 覆盖已有材料还要先理解暂存名替换。
中文信息写 description,不写 name
说明栏不进材料名、不进 inp,中文随便写, 还能记数据来源和热处理状态。

01一个名字,四种活法

先把「为什么名字会出事」讲清楚。同一个材料名在迁移链路上要过四关:

它出现在谁来解释它错了的样子
JSON 文件里的 name 键插件读入、查重、勾选用空名或库内重名:整份文件被拒
CAE 模型里的 Material 对象Abaqus:model.Material(name=…)非法字符由 Abaqus 拒绝,中文名可能显示成问号
.inp 关键字文件Abaqus 关键字读取器问号名字随文件传下去,多个材料无法区分
插件勾选名单逗号分隔的字符串名字含逗号被劈成两个不存在的名字

插件做的是它能负责的那部分:文件形状、库内重名、勾选一致。 字符集它故意不查 —— 名字是原样传给 model.Material() 的, Abaqus 接受什么由 Abaqus 决定,插件不替它立规矩。 帮助文档 5.1 节因此把字符集写成建议而不是校验规则。

02插件这一层:只查三件事

读 JSON 时,和名字有关的检查一共三条,全在材料开始建之前:

一、名字去掉首尾空白后不能为空

name 缺失、是空串、或只有空格,报的是同一条, 编号按文件里的次序从 1 起:

第 3 个材料缺少 "name" 字段。
material #3 has no "name"

注意是去掉首尾空白之后判空。中间的空格插件不管(见第 4 节)。

二、同一个文件里不能重名

第二条材料与第一条同名,整份文件被拒,消息把名字带出来:

材料名重复:"Steel_Q345"
duplicate material name "Steel_Q345"
  • 查重在 strip 之后进行,所以 "Steel" 和 " Steel " 也算重名。
  • 大小写敏感:Steel 与 steel 是两个材料,插件和 Abaqus 都不折叠大小写。靠大小写区分名字是合法的,但读报告时极易看混,不建议。
  • 这条只管同一个文件内。两个文件各有一个同名材料,分别导入不冲突。

三、勾选导入时,名字要能在文件里找到

勾选若干种导入时,插件内部把名字用逗号拼成一个名单再拆开。 拼好的名单里若有文件中不存在的名字,整次导入停在:

not in the library: <名单里找不到的名字>

正常流程这条消息不该出现(勾选框给的都是真名);它主要在脚本调用时遇到。 但它牵出一个字符集上的硬规则 —— 名字里不能有逗号,第 4 节讲。

03和模型里已有的材料同名:跳过,不是报错

文件内重名是非法的;文件与模型之间同名则完全合法, 因为材料本来就挂在 model 下面,不同模型里有同名材料是常态。 默认行为是跳过不覆盖,报告里点名:

  skipped, already present (2): Steel_Q345, Al_6061_T6   [tick "Overwrite" to replace]

这解释了「我明明重新导了一遍,材料怎么没变」—— 不是没生效,是被跳过了。 勾上覆盖之后也不是先删旧的再建新的:新材料先建在暂存名zzMaterialImporterScratch 下,成功才换名。 这套机制的三种失败结局和报告原话,在材料复用三条路第 5 节逐条列了。这里只补一条与名字有关的: 暂存名故意不根据你的材料名派生 —— Abaqus 对材料名长度有上限,按原名加前缀就要截断, 截断后 Steel_A36_Plate 和 Steel_A36_Pipe 会撞名, 而那恰好是「丢了一个都不容易发现」的情形。

改名在脚本里是 changeKey
插件最后一步改名调的是 model.materials.changeKey(fromName=旧, toName=新)。 自己写脚本批量改名时也用它,不要「新建一个再删旧的」—— 后者在有 Section 引用旧名时会把材料弄没。

04字符集:五个具体结论

  1. 只用字母、数字、下划线。这是帮助文档 5.1 节给的字符集。它不是插件的校验项, 而是按 Abaqus 侧行为总结出来的安全集。
  2. 连字符「-」不要用。帮助文档明确写了 Abaqus 不接受 -。 想表达分段,用下划线:Al_6061_T6,不要写 Al-6061-T6。 名字在这一层被拒时,插件材料照建流程会给这一条留一行 FAILED, 拒你的是 Abaqus,消息以 CAE 返回的为准。
  3. 中文、全角标点:不配 locale 就全是问号。没按帮助文档第 07 节配置中文界面时,CAE 里中文材料名全部显示成???,而且这个问号名会跟着 .inp 文件传下去 —— 交付出去的关键字文件里多个材料都叫问号,谁也对不回谁。 配好 locale 别名之后中文名可以正常显示, 但团队里只要有一个人没配、或 inp 要交给别的单位,问题就回来。 所以建议仍然是:中文写 description,名字保持 ASCII。
  4. 逗号是结构性禁忌。勾选名单是逗号分隔的字符串,名字 "Steel, Q345" 传进去会被拆成 Steel 和 Q345 两个名字, 两个都找不到,整次导入停在 not in the library。 句号、括号、斜杠等标点也一律不用 —— 它们在 inp 关键字行和脚本里都有特殊含义, 下划线足够表达所有层次。
  5. 空格:首尾会被吃掉,中间的别留。插件只 strip 首尾空白,中间空格原样传给 CAE; 帮助文档的建议字符集里没有空格。 Ansys 样例库里材料名带空格(比如「Aluminum Alloy NL」), 迁过来时把空格换成下划线 —— 这正是Ansys 材料迁到 Abaqus算例里 Aluminum_Alloy_NL 的由来。

长度方面,Abaqus 对材料名长度有上限(这是内核里写死了的事实), 但公开文档没有给出具体数字,插件也不去踩这条线。 工程上把名字控制在二三十个字符以内足够:消息区和报告里超长名字会被截断显示, 真正长的信息(牌号全称、状态、出处)放进 description。

05一套不出事的命名法

插件自带示例库里的名字本身就是示范(以下是示例库的演示名):

Steel_Q345
Al_6061_T6
Steel_S355_TempDep
Rubber_NR_Yeoh
CFRP_T300_5208_Lamina

规律很简单,按「材料体系_牌号/代号_状态或变体」用下划线分层:

  • Steel_Q345_Normalized —— 正火态放后缀,不要开一个新材料叫「Q345 正火」。
  • Steel_S355_TempDep —— 温度相关版本用后缀区分,基础名保持一致。
  • Al_6061_T6_JC —— 同一牌号两种本构(简单塑性 / Johnson-Cook)时,本构缩写收尾。
  • 公司库可以加项目前缀:ACME_Bolt_40Cr,跨项目复用一眼能认出来源。
两件不要放进名字的东西
  • 单位。单位是整个模型一致的约定, 不是某个材料的属性。名字里写 _mm 救不了半 SI 半 mm 的库; 单位写在 JSON 顶层的 units 字段和 description 里。
  • 数据来源的完整出处。GB_T_3077_2015_page_12 这种名字三个月后没人看得懂, 还白占长度。description 才是放「40Cr,860℃油淬,E=206GPa,来源 xxx」的地方, 它会进材料的说明栏但不进 inp。

JSON 的字段全集和 description 的写法在帮助文档 JSON 一节;中文界面(locale 别名)配置在第 07 节。

06已经起坏了,怎么改

现状正确做法别做的事
JSON 还没导在文件里直接改名,UTF-8 存盘后重新导入不要先导入再到 CAE 里改,多一道手就多一道不一致
材料已在模型里,名字不合法或不想要CAE 材料管理器里改名(脚本用 model.materials.changeKey),然后按 Section 着色确认指派还在不要删了重建 —— Section 引用会断,排查顺序见「材料建了不生效」
中文名已经显示成问号回 CAE 把每个材料改成 ASCII 名(按参数辨认),重新生成 inp不要在 inp 里把问号替换成名字 —— 多个问号材料无法确认谁是谁
同名材料分不清哪份数据对先改名导入做对比(名字加后缀),确认后再勾覆盖导入正式名不要直接覆盖 —— 覆盖替换的是整个材料定义,手工加过的东西会没
从 Ansys/Excel 迁来的名字带空格、连字符在转换脚本里统一替换成下划线后再落 JSON不要手工一个一个改,十个材料里必然漏一个

改完名别忘了材料到单元之间还隔着 Section 和指派两步; 改名后按 Section 着色扫一眼,是防止「材料对了、链子断了」最便宜的手段。 五个断点的完整排查顺序在材料建好了却不生效;Excel/CSV 批量改名的脚本写法在Excel 材料表怎么进 Abaqus。

常见问题

Abaqus 材料名可以用中文吗?

不建议。没有按帮助文档第 07 节配置中文 locale 别名时,CAE 会把中文材料名全部显示成问号,而且问号名会写进导出的 .inp 文件,多个材料无法区分,文件交给别的单位更没法对。即使本机配好了 locale,团队成员或交付对象没配也会出问题。稳妥做法是材料名只用字母、数字、下划线,中文的牌号说明、热处理状态、数据出处写在 description 字段里,它进材料说明栏但不进 inp。

Abaqus 材料名能用空格和连字符吗?

连字符明确不要用:帮助文档写明 Abaqus 不接受 -。空格方面,插件只去掉名字首尾空白,中间空格会原样传给 CAE,而建议字符集只有字母、数字、下划线。从 Ansys 迁来的名字常带空格(比如 Aluminum Alloy NL),统一在转换脚本里替换成下划线。逗号绝对不能出现在名字里:插件勾选导入的名单是逗号分隔的,名字一含逗号就被劈成两个找不到的名字,导入停在 not in the library。

两个材料重名了会怎么样?

分两种情况。同一个 JSON 文件里重名是非法的,整份文件会被拒,报「材料名重复:"名字"」(英文 duplicate material name),查重在去掉首尾空白之后进行且区分大小写。文件和模型里已有材料同名则不报错,默认跳过不覆盖并在报告里写 skipped, already present,勾上覆盖才会替换,而且替换走暂存名机制:新材料先建成再换名,新数据有问题时旧材料完好。不同模型之间同名完全正常,材料本来就挂在各个 model 下面。

Abaqus 材料名长度限制是多少?

Abaqus 确实对材料名长度有上限,插件内核的暂存名机制就是按这个事实设计的——暂存名不根据原名派生,因为加前缀后截断会让相近名字撞在一起。但这个上限没有公开的具体数值,不建议去试边界。工程上把名字控制在二三十个字符以内即可,消息区和报告对超长名字会截断显示,牌号全称、状态、出处这些长信息放在 description 字段里。

材料已经起错名字了,在 CAE 里改名会影响 Section 吗?

在材料管理器里改名(脚本里是 model.materials.changeKey)只是改键名,Section 引用的是材料对象,改完按 Section 着色扫一眼确认即可。不要用「删掉旧材料再建同名的」方式改名:删除的瞬间引用就断了,新材料是另一个对象。如果中文名已经变成问号,要回 CAE 按参数逐个辨认改成 ASCII 名再重新生成 inp,不要直接在 inp 里替换问号——多个问号材料无法确认谁是谁。

这一步可以不自己做

空名、库内重名、勾选名单这三关插件在写进模型之前就拦, 消息直接指出是第几个材料。字符集那一层由 Abaqus 说了算 —— 与其试边界,不如名字只留字母数字下划线,中文信息写进 description。

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