适用版本 1.5.0。这份文档按你实际会遇到的顺序排:装 → 激活 → 用 → 出错怎么办。 如果你只想解决一个报错,直接跳到 第 8 节 · 报错原因对照表。
MaterialImporter-1.5.0.zip,解压到任意临时目录。里面有
install.bat、uninstall.bat、README.txt、
help.html(就是本文档)和一个 materialImporter 文件夹install.bat它会把 materialImporter 复制到
%USERPROFILE%\abaqus_plugins\materialImporter
也就是你的用户目录下,形如
C:\Users\你的用户名\abaqus_plugins\materialImporter。
这是 Abaqus 默认会扫描的个人插件目录,不需要管理员权限,也不用去改 Abaqus 安装目录。
脚本会顺手清掉上一版残留的 __pycache__,屏幕上打印复制了哪些文件Plug-ins 菜单下会多出
材料库 → 导入材料... 一项(没配中文 locale 时显示为
Material Library → Import materials...,两者是同一个插件,见第 7 节)装错目录不会报错,是完全没反应:菜单里不出现,也没有任何提示。 Abaqus 只在固定的几个目录里找插件,放在别处它根本不会去看。而且它不是「找到一个就停」—— 下面每一个它都会加载:
%USERPROFILE%\abaqus_plugins\ ——
install.bat 用的就是这个,什么都不用配plugin_central_dir 指定的目录(形如
D:\SIMULIA\CAE\plugins\2025),多见于单位统一部署abaqus_plugins\,形如
<安装目录>\code\python3.x\lib\abaqus_plugins\abaqus_plugins\ ——
换个目录启动就失效,所以不适合用来正式安装正因为是「每一个都加载」,同一个插件在两处各留一份时,菜单会出现两个「材料库」, 而且可能是旧的那份在跑 —— 升级完发现行为没变化,多半就是这个原因。
1.2.1 起 install.bat 会自动扫上面第 2、3 项,
发现旧副本就把完整路径列出来、问你要不要删,不用你自己去找。
第 4 项它不查:CAE 是从哪个目录启动的,安装脚本无从得知,猜错就等于误删你自己的文件夹。
想自己确认第 2 项在哪,在 CAE 命令行区执行:
print(session.pluginCentralDir)
两个常见安装问题:
菜单里没出现。如果是手工复制安装的,90% 是层级放错了 ——
materialImporter_plugin.py 必须正好在
<插件目录>\materialImporter\ 下面,
不能多套一层文件夹(比如解压出来的
materialImporter\materialImporter\),也不能直接平铺在插件目录里。
正确的结构是:
<插件目录>\materialImporter\materialImporter_plugin.py
\materialImporterDB.py
\materialImporterKernel.py
... 共 14 个 .py 文件 + 2 个 .json 数据文件
不要改动 .py 文件的后缀或编码。
Abaqus 是靠文件名以 _plugin.py 结尾来发现插件的。
插件是会员制付费工具,用手机号 + 短信验证码激活,没有账号密码。
第一次打开插件时会自动停在 engstudy.top 页签上。
开通会员 按钮,会打开网站的会员页。
建议先确认会员再发验证码 —— 服务器要在验证码校验之后才能知道你的会员状态,
非会员的话那条短信就白花了激活之后基本不用再管。授权保存在本机,有效期 30 天, 插件会在到期前 7 天自动续期(打开插件时静默完成,不需要再收短信)。 只要你保持联网使用,就不会遇到过期。
需要留意的只有一种情况:连续一个多月不联网使用。 授权过期后在线库和本地 JSON 导入都会停(见第 9 节), 所以长期出差或进隔离内网之前,建议先联网打开一次插件让它自动续期。
这些版本自带 Python 2.7,插件的联网模块无法运行,没有激活途径。 因此插件在这些版本上不设激活门槛,本地 JSON 导入直接可用, 在线材料库页签不会出现。
Plug-ins → 材料库 下有三个菜单项:
| 菜单项 | 用途 |
|---|---|
导入材料... |
打开主对话框,从在线库或本地 JSON 导入材料。以下介绍的都是这个 |
导出材料... |
将当前模型中的材料导出为 JSON 库文件,方便在其他模型或电脑上复用。 1.5.0 起需要授权在有效期内,原因见 第 9 节 |
材料健康检查... |
扫描当前模型全部材料的弹性模量范围、塑性硬化曲线、互斥组合及单位制一致性, 结果打印在 CAE 消息区。不需要激活即可使用 |
主对话框打开后,上半部分是两个页签:
| 页签 | 用途 |
|---|---|
engstudy.top |
激活、续期,以及从在线材料库拉取材料。Abaqus 2023+ 才有 |
本地 JSON 文件 |
选择一个 JSON 材料库文件并读取。所有版本都有 |
本地 JSON 文件 页签)。
从上到下三段:页签区、要导入的材料 列表、导入目标。
此图摄于 1.2,1.3 在列表上方多了一行 筛选 输入框,见下。
engstudy.top 页签就是激活界面:最上面一行是会员提示和
开通会员 按钮,下面是手机号、短信验证码,以及
发送验证码 / 激活 / 解除激活。
未激活时插件打开就停在这一页。下半部分是材料列表和 导入目标,两个页签共用:
| 选项 | 含义 |
|---|---|
| 覆盖已存在的同名材料 | 勾选时,模型里已存在的同名材料会被替换。不勾选时遇到同名会跳过并在消息区说明。
1.2.1 起:替换失败不会损坏原有材料 —— 新材料先在临时名下建好、确认无误才换上去, 所以 JSON 里一个手误不会让你丢掉模型里已经调好的那份 |
| 模型 | 材料建在哪个模型里。默认是当前模型 |
| 跳过单位制检查(1.4 新增) | 勾选时跳过单位制冲突检测。默认不勾选,即插件会自动比较模型已有材料和 JSON 数据在哪个单位制下,发现不一致就拒绝导入并说明原因。如果你有意混用不同单位制的数据,勾上这个跳过阻拦 |
在线库有五十多种材料,一屏放不下。列表上方的 筛选 输入框可以边打边过滤:
steel 和 Steel 一样steel 316 只留下名字里同时含 steel 和
316 的材料,词的先后顺序不影响结果列表上方的状态文字始终显示真实的已勾选总数,包括当前看不见的。 所以「我明明只选了 3 个,怎么导入了 56 个」不会发生 —— 导入前扫一眼那个数字就够了。
勾选和筛选的关系分两个阶段,这样安排是为了让你看到的勾选就是你会得到的:
两个按钮在这件事上不对称,也是刻意的(它们都算"你自己动手勾选"):
全选 只勾当前可见的(否则筛选就白做了 —— 你筛出来正是为了只要这些)清空 清掉全部勾选,包括看不见的(「清空」要是留下暗处的勾选,
那它就没做到它名字承诺的事)列表上方有一行状态文字,会显示读到了多少种材料、当前授权状态。
1.2 起:导入结果打印在 CAE 的消息区,不再弹窗。
点「导入」之后不会有对话框,界面直接关闭。结果在 CAE 下方 消息区(Message area)逐行打印,形如:
--- Material Importer -> model "Model-1" ---
created (56): Metal_Steel_A36, Metal_Al_6061_T6, ...
skipped (2): ...
failed (1): ...
紧跟在后面的是网站对缺失属性的逐条说明 —— 哪个材料的哪个本构块没有建立、为什么没有。这些句子是网站原文,插件不改写、不过滤、不去重。
放在消息区而不是弹窗,有两个实际好处:几十种材料的说明可以往上滚着看, 而且能直接选中复制。导入完后请往下看一眼消息区, 尤其是当你导入的材料要用于强度分析时 —— 见下面这条。
--- Material Importer -> model ... ---
这一行之后就是 created / skipped / failed 的名单。
这块区域在 CAE 窗口下方,可以拖高、可以滚动、可以选中复制。缺弹性属性的材料,导入后是「热学专用」的。
Abaqus 的各向同性 *ELASTIC 必须同时有弹性模量和泊松比,
缺一个插件就不建这个块(不猜、不补 0)。这种材料只有密度和热学属性,
拿去做任何应力分析都会在求解阶段报错。消息区会写明是哪些材料,别跳过。
engstudy.top 页签确认状态显示已激活
获取材料列表,在线库的材料就读进下方
要导入的材料 列表;列表上方那行状态文字会写读到了多少种。
关于在线库的数据范围,说清楚一点: 在线库目前提供的是室温标量 —— 密度、弹性模量、泊松比、屈服强度、 抗拉强度、热导率、比热、热膨胀系数。
因此导入后的塑性是理想弹塑性:屈服之后应力不再上升, 承载能力偏保守,塑性应变偏大。做压溃、冲压成形、极限承载、螺栓过载这类分析时, 请用第 5 节的方式提供真实的硬化曲线。
插件不会拿抗拉强度去凑一条硬化曲线 —— 凑曲线需要颈缩时的应变,那个数在线库没有。 缺数据时插件的做法是告诉你缺,而不是编一个。
插件的全部能力都在这条路上:多点硬化曲线、每个属性的温度相关表、 Johnson-Cook、应变率相关、四种损伤准则加演化、超弹性(系数或实测曲线)、蠕变、阻尼。
UTF-8 编码,顶层是 {"materials": [...]} 或者直接一个数组
[...]。(Excel 导出带的 BOM 会被自动忽略。)
{"materials": [
{"name": "Steel_45", ... },
{"name": "Al_6061_T6", ... }
]}
| 键 | 必需 | 说明 |
|---|---|---|
name | 必需 | Abaqus 材料名。只能用字母、数字、下划线 —— Abaqus 不接受
-,也不建议用中文(见下方提示) |
description | 可选 | 写进材料的说明栏,建议记数据来源、热处理状态、单位制 |
density | 可选 | 见 5.2 |
elastic | 可选 | 见 5.3 |
hyperelastic | 可选 | 见 5.7 —— 橡胶等大变形材料,和 elastic 互斥 |
plastic | 可选 | 见 5.4 |
creep | 可选 | 见 5.8 |
damping | 可选 | 见 5.9 |
thermal | 可选 | 见 5.5 |
damage | 可选 | 见 5.6 |
不要写中文材料名。
除非你按第 7 节改过 Abaqus 的语言配置,否则 Abaqus 会把中文字符
全部显示成 ?,材料名会变成一串问号 ——
而且这个问题会跟着 .inp 文件传下去。
中文信息请写在 description 里。
缺数据就不要写这个键。 不要用 0 补齐。泊松比 0、密度 0 在 Abaqus 里都是合法输入, 会被当成真数据算下去,不会有任何警告。
density单值,可以直接写一个数:
"density": 7.85e-9
等价于 "density": {"value": 7.85e-9}。温度相关时用表格(见 5.10)。
elastic"elastic": {"youngsModulus": 210000, "poissonsRatio": 0.3}
校验:E > 0,−1 < ν < 0.5(两端都不含)。 不满足会直接报错并指出是哪个材料。
各向异性 / 复合材料用 type + 显式表格,详见
5.13 复合材料与各向异性弹性。
plastic"plastic": {"table": [[355, 0.000],
[420, 0.020],
[480, 0.050],
[540, 0.120]]}
每行 [真应力, 等效塑性应变]。hardening 可选
"ISOTROPIC"(默认)或 "KINEMATIC"。
三条硬性要求,不满足会报错:
另外:应变是无量纲小数,0.02 表示 2%,不要写成 2。
必须是真应力 + 对数塑性应变。 手册和拉伸报告给的几乎都是工程应力应变,直接填进去不会报错, 只会让结果偏小。换算:
σ_true = σ_eng × (1 + ε_eng)
ε_true = ln(1 + ε_eng)
ε_pl = ε_true − σ_true / E
并且只在抗拉强度点之前有效 —— 过了抗拉强度,工程曲线反映的是试样颈缩这个几何失稳,不再是材料行为,那一段不能用。
Abaqus 怎么处理曲线之外的区间: 超过最后一个数据点之后,应力保持最后一个值不变(完全水平), 不做斜率延伸。所以如果曲线只给到 5% 应变、而模型里某处实际到了 30%, 那 25% 的区间里材料是理想塑性的、承载被低估 —— Abaqus 不会提示你。 尽量把曲线给到你预期的最大塑性应变。
"plastic": {"hardening": "JOHNSON_COOK",
"A": 355, "B": 480, "n": 0.28, "m": 1.0,
"meltingTemperature": 1500, "transitionTemperature": 20}
"plastic": {"table": [[355, 0.0], [480, 0.05]],
"rateDependent": {"type": "JOHNSON_COOK",
"C": 0.014, "epsilonDot0": 1.0}}
幂律形式:{"type": "POWER_LAW", "multiplier": ..., "exponent": ...}
thermal"thermal": {
"conductivity": 48,
"specificHeat": 4.8e8,
"expansion": {"alpha": 1.16e-5, "zeroTemperature": 20}
}
三个子块都可以直接写一个数。conductivity 和 expansion
支持 type(默认 ISOTROPIC)。
zeroTemperature 是最容易出事的一个参数。
它是热膨胀的参考温度(对应 *EXPANSION, ZERO=),
单位是摄氏度。Abaqus 没有单位制概念,这里就是一个裸数字。
如果你把它当成开尔文、又把初始温度场设成 293,就会凭空多出 273 度的温差 和一堆假的热应力,而且不会有任何警告。 (膨胀系数 α 本身不受影响:1/K 和 1/°C 数值相同,因为两者都是"每温度区间"。 会错的只有参考点,所以这个坑特别容易漏。)
damage四种损伤起始准则,每种都可以带一个 evolution:
| 子块 | 列(按顺序) |
|---|---|
ductile |
fractureStrain, stressTriaxiality, strainRate |
shear |
fractureStrain, shearStressRatio, strainRate
(另可加 ks) |
johnsonCook |
d1…d5, meltingTemperature,
transitionTemperature, referenceStrainRate |
fld |
minorStrain, majorStrain |
"damage": {
"ductile": {
"table": [[0.35, -0.33, 0.0],
[0.21, 0.00, 0.0],
[0.15, 0.33, 0.0]],
"evolution": {"type": "DISPLACEMENT", "value": 0.1}
}
}
evolution 的 type 取 DISPLACEMENT(默认,
用 value 或 displacementAtFailure)或
ENERGY(用 fractureEnergy);
可选 softening(默认 LINEAR)、
degradation(默认 MAXIMUM)。
不要用延伸率当断裂应变。 延伸率(A、A50)是工程量,依赖标距长度,5d 和 10d 试样测出来的数不一样。 它不是韧性损伤要的等效塑性断裂应变(后者依赖应力三轴度)。
把延伸率填进 fractureStrain 会得到一个能跑完、
但失效位置和失效载荷都错的模型。
没有真实的三轴度-断裂应变数据,就不要写 damage 块 ——
缺这块只是不做失效判断,填错了则整个分析结论是错的。
hyperelastic(1.3 新增)
橡胶、密封圈、减振垫这类大变形、近似不可压缩的材料,用
elastic 描述是不对的 —— Abaqus 会照算,只是算出来的刚度在大应变下完全不对。
这类材料要用 hyperelastic。
一个材料不能同时有 elastic 和 hyperelastic。
它们是同一件事(弹性响应)的两种互斥写法,插件会直接拒绝并说明,
而不是挑一个建、悄悄丢掉另一个。
"hyperelastic": {"type": "YEOH",
"C10": 0.35, "C20": -0.012, "C30": 0.0008,
"D1": 0, "D2": 0, "D3": 0}
下面这些型式的列名插件认识,直接按名字写就行:
type | 需要的键(按顺序) |
|---|---|
NEO_HOOKE | C10, D1 |
MOONEY_RIVLIN | C10, C01, D1 |
YEOH |
C10, C20, C30,
D1, D2, D3 |
ARRUDA_BOYCE |
mu, lambdaM, D1 |
VAN_DER_WAALS |
mu, lambdaM, a,
beta, D1 |
OGDEN、POLYNOMIAL、REDUCED_POLYNOMIAL
这些阶数可变的型式,列数取决于 n,所以要自己写 table,
并把 n 一起给出(阶数顺序按 Abaqus 材料编辑器里的顺序):
"hyperelastic": {"type": "OGDEN", "n": 2,
"table": [[0.7, 1.8, -0.05, -2.0, 0, 0]]}
这一块的系数插件不做正负和非零检查,是故意的。
负数是正常的:一条合格的 Ogden 拟合结果里出现负的 mu 或
alpha 是家常便饭,Yeoh 的 C20 通常也是负的。
D1 = 0 也是正常的:这就是"当作完全不可压缩"的标准写法,
不是漏填。而同样一个 0 填在弹性模量上就一定是手误。
所以这里不套用别处的"必须大于 0"规则 —— 那样会拒绝正确的数据, 比放一个手误过去更糟。代价是这一块的数值请你自己核对。
手上是拉伸/等双轴/平面剪切的实测曲线而不是系数时,
用 testData。此时不要写系数,Abaqus 会做拟合:
"hyperelastic": {
"type": "OGDEN", "n": 3,
"testData": {
"uniaxial": [[0.0, 0.0], [0.54, 0.25], [0.94, 0.50], [1.62, 1.00]],
"biaxial": [[0.0, 0.0], [0.90, 0.25]],
"planar": [[0.0, 0.0], [0.75, 0.25]],
"volumetric": [[0.0, 1.0], [20.0, 0.9905]]
}
}
| 子块 | 两列的含义 |
|---|---|
uniaxial / biaxial / planar |
名义应力, 名义应变(工程量,不是真应力应变) |
volumetric |
压力, 体积比 J |
四个子块都是可选的,但至少要有一个。给的曲线种类越多、拟合越可靠 ——
只有单轴数据时,拟合结果在双轴受力状态下可能偏得很远。
拟合质量请在 Abaqus 的材料编辑器里点 Evaluate 核对。
creep(1.3 新增)
高温长期承载下随时间累积的不可恢复变形(*CREEP)。
必须和 elastic 一起用,幂律形式通常还要有 plastic。
"creep": {"law": "TIME", "A": 1.2e-14, "n": 4.5, "m": -0.35}
law | 需要的键(按顺序) |
|---|---|
STRAIN(默认,应变硬化) |
A, n, m |
TIME(时间硬化) |
A, n, m |
HYPERBOLIC_SINE |
A, B, n,
deltaH, R |
其它蠕变律自己写 table。和别的块一样,行末多一列就是温度相关。
A 对单位制极其敏感,这是这一块最常见的错误来源。
蠕变律里的 A 量纲含应力的 -n 次方和时间的负次方,
文献里给的往往是 MPa+小时 或 psi+小时 制。
直接搬进 mm 制(MPa + 秒)会让蠕变速率差 3600 倍甚至更多,
而且不会报错 —— 只会得到一条看起来"就是有点慢/有点快"的曲线。
换算完再填,并且用一个已知的单轴蠕变试验数据核对一遍。
A 必须 > 0:这是蠕变速率的系数,填 0 意味着"没有蠕变",
那应该做的是删掉整个 creep 块,而不是把系数写成 0,所以插件把 0 当作手误拒绝。
damping(1.3 新增)动力学分析用的 Rayleigh 阻尼等(*DAMPING):
"damping": {"alpha": 0, "beta": 0.002}
| 键 | 含义 |
|---|---|
alpha | 质量比例阻尼系数(单位 1/时间) |
beta | 刚度比例阻尼系数(单位 时间) |
composite | 模态分析用的复合阻尼比 |
structural | 结构阻尼(虚刚度)系数 |
四个都是可选的,至少要有一个;都是单个数字,不支持温度相关(Abaqus 本身就不支持)。 只能是 0 或正数。
这里的 0 和"没写"是两件不同的事,插件会区分。
"beta": 0 是明确表达"只对质量加阻尼、不对刚度加",
是一个有意义的取值,插件会照原样建立;
而不写 beta 则是让 Abaqus 用它自己的默认。
所以想表达"不要刚度阻尼"就明确写 0,别靠省略。
把该属性写成 table,并在每行末尾多加一列温度,
插件会自动打开 temperatureDependency:
"density": {"table": [[7.85e-9, 20],
[7.78e-9, 400]]},
"elastic": {"table": [[210000, 0.30, 20],
[201000, 0.31, 200],
[186000, 0.32, 400]]},
"thermal": {"conductivity": {"table": [[48, 20],
[45, 200],
[39, 400]]}}
温度相关的硬化曲线:按温度分组,每组内部塑性应变从 0 开始递增:
"plastic": {"table": [[355, 0.00, 20],
[480, 0.05, 20],
[280, 0.00, 400],
[390, 0.05, 400]]}
温度必须递增排列。也可以用 "temperatureDependency": true/false 显式指定。
{"materials": [{
"name": "Steel_45_Normalized",
"description": "GB/T 699-2015 45 normalized, bar d25, tonne-mm-s, degC",
"density": 7.85e-9,
"elastic": {"youngsModulus": 210000, "poissonsRatio": 0.3},
"plastic": {"table": [[355, 0.000], [420, 0.020],
[480, 0.050], [540, 0.120]]},
"thermal": {"conductivity": 48,
"specificHeat": 4.8e8,
"expansion": {"alpha": 1.16e-5, "zeroTemperature": 20}}
}]}
对 GB 50010-2010(2015 版)附录 C 的混凝土,
不需要自己写 elastic 和 concreteDamagedPlasticity,
只要写一个 grade 字段:
{"name": "C30_GB50010",
"description": "C30 混凝土,按 GB 50010-2010 附录 C",
"grade": "C30"}
插件会按标号自动生成:密度、弹性模量、泊松比(0.2),以及完整的 混凝土损伤塑性(CDP)参数 —— 压缩硬化、拉伸硬化、压缩损伤、拉伸损伤四条曲线, 来自 GB 50010-2010 附录 C 的公式 C.2.3-1 至 C.2.4-5。 支持 C15~C80 共 14 个标号。
C15 不在 2010 版标准的适用范围内(该标准覆盖 C20~C80), 数据来自 GB 50010-2002。C15 的压缩损伤曲线需要特别关注 —— 如果用于损伤分析,建议做一组对照验证。
CDP 塑性参数默认值:
dilationAngle=30、eccentricity=0.1、
fb0/fc0=1.16、K=0.6667、
viscosityParameter=0.0005。
可以在 JSON 中用 concreteDamagedPlasticity 覆盖:
{"grade": "C30",
"concreteDamagedPlasticity": {
"dilationAngle": 35,
"viscosityParameter": 0.0
}}
只写要覆盖的项,其余保持默认。
插件附带了一个 materials_concrete_gb50010.json 文件,
内含全部 14 个标号的展开数据,可以直接用 本地 JSON 文件 导入。
各向异性弹性用 type 指定类型,再用 table 按该类型规定的
顺序给出弹性常数。常数个数是固定的,写错个数插件会直接拒绝这个材料,
并告诉你该类型要几个。
type | 常数个数 | 列的顺序 | 配什么 Section |
|---|---|---|---|
LAMINA | 6 | E1, E2, Nu12, G12, G13, G23 |
Composite Shell(铺层) |
ENGINEERING_CONSTANTS | 9 | E1, E2, E3, Nu12, Nu13, Nu23, G12, G13, G23 |
Solid / Shell |
ORTHOTROPIC | 9 | D1111, D1122, D2222, D1133, D2233, D3333, D1212, D1313, D2323 |
Solid(直接给刚度矩阵) |
ANISOTROPIC | 21 | 完整刚度矩阵下三角,按 Abaqus 手册顺序 | Solid |
TRACTION | 3 | Enn, Ess, Ett | Cohesive |
单向带(铺层用),配 Composite Shell Section:
"elastic": {"type": "LAMINA",
"table": [[181000, 10300, 0.28, 7170, 7170, 4000]]}
三维正交异性(实体单元用):
"elastic": {"type": "ENGINEERING_CONSTANTS",
"table": [[45000, 12000, 12000,
0.3, 0.3, 0.42,
5500, 5500, 4200]]}
Nu12 是「大」泊松比,不是小的那个。
Abaqus 要的是 Nu12 = −ε₂/ε₁,即沿纤维方向(1)拉伸时横向(2)的收缩比,
典型值 0.25~0.35。手册里有时给的是 Nu21(典型值 0.01~0.03),
两者关系是 Nu21 = Nu12 × E2 / E1。
填错这一项插件和 Abaqus 都不会报错 —— 0.02 和 0.3 都在合法范围内,只是横向刚度整体偏软, 要到结果对不上才会发现。这是复合材料建模最常见的一个错。
温度相关:多写一列温度即可,插件自己认。
因为每种 type 的常数个数是定死的,插件可以分清
「6 个常数」和「5 个常数 + 1 个温度」:
也可以用 "temperatureDependency": true/false 明确指定;
指定了就按你说的算,个数不对同样报错。
"elastic": {"type": "LAMINA",
"temperatureDependency": true,
"table": [[161000, 11380, 0.32, 5170, 5170, 3980, 20],
[152000, 9800, 0.32, 4400, 4400, 3400, 120]]}
1.4 及更早版本这里有一个会静默改数据的缺陷。 1.4 把所有各向异性弹性都当成温度相关,于是 最后一个弹性常数被当成温度读掉了 —— 上面那个 LAMINA 会变成「5 个常数 + 温度 3980 度」, 而且导入成功、不报任何错。
如果你用 1.4 或更早版本导入过复合材料, 请在 CAE 里打开材料的 Elasticity 页检查 Use temperature-dependent data 是否被误勾上, 或者直接用 1.4.1 以上版本重新导入一次。各向同性材料不受影响。
材料建好只是第一步。复合材料必须有材料方向,否则 1 方向默认就是全局 X,等于整块板的纤维都朝一个方向:
Composite Shell Section 逐层给
厚度和角度;ENGINEERING_CONSTANTS 用普通 Solid SectionAssign Material Orientation,
用 Datum CSYS 或 Discrete orientation(曲面必须用后者)刚度矩阵不满足稳定性条件时,Abaqus 在建 Section 时才报错,不是导入时。
条件是 |Nu12| < √(E1/E2) 等一组不等式。
导入成功但建 Section 报
material is not positive definite,
基本都是泊松比填大了或者 E1/E2 弄反了。
materials_sample.json 里有三个可以直接导入的例子:
CFRP_T300_5208_Lamina、GFRP_EGlass_Ortho3D、
CFRP_IM7_8552_Lamina_TempDep。
插件用的是 tonne-mm-s 单位制(也就是 mm 制,应力单位为 MPa)。 在线库的数据由服务端换算好;自己写 JSON 时需要自己换算,对照下表。
| 物理量 | 插件里的单位 | 手册常用单位 | 换算 |
|---|---|---|---|
| 长度 | mm | m | ×1000 |
| 力 | N | N | ×1 |
| 应力 / 模量 | MPa | GPa | ×1000 |
| 密度 | t/mm³ | kg/m³ | ×1e-12 |
| 能量 | mJ | J | ×1000 |
| 热导率 | mW/(mm·K) | W/(m·K) | ×1(数值相同) |
| 比热 | mJ/(t·K) | J/(kg·K) | ×1e6 |
| 热膨胀系数 | 1/°C | 10⁻⁶/K | ×1e-6 |
| 温度 | °C(摄氏度) | °C | ×1 |
| 应变 | 无量纲小数 | % | ÷100 |
几个常见值,可以用来自查:
7.85e-9,E 210000,ν 0.32.7e-9,E 70000,ν 0.334.8e8自查窍门:密度那一栏如果不是 e-9 这个量级,
就一定错了。金属的密度在 mm 制下都是 1e-9 ~ 2e-8 之间。
插件界面已经中文化,但 Abaqus 默认会把非 ASCII 字符显示成 ?。
这不是字体问题,是 Abaqus 的语言配置里缺一行别名。
不做这一步也没关系 —— 插件会检测到并自动回落到英文界面,功能完全不受影响, 不会出现一屏问号。
编辑 Abaqus 安装目录下的语言配置文件:
<Abaqus 安装目录>\SMA\Configuration\locale.txt
在 [Alias] 段里加一行:
[Alias]
Chinese (Simplified)_China.936 = zh_CN
保存后重启 CAE,插件界面即为中文。
两点说明:
1. 这一步只影响插件界面。[Default] 段里的 zh_CN
保持 0 不要改 —— 改了会把整个 CAE 切成中文,
而 CAE 的中文翻译覆盖并不完整,反而更难用。
2. 改前请备份 locale.txt。这是 Abaqus 的安装文件,
不是插件的文件,插件不会自动去改客户的 Abaqus。
| 看到的现象 | 原因与处理 |
|---|---|
| 菜单里没有「材料库」 | 目录层级错了,见第 1 节的提示框。
materialImporter_plugin.py 必须正好在
<插件目录>\materialImporter\ 下 |
界面全是 ? 或方框 |
locale.txt 缺 [Alias] 行,见第 7 节。
不是字体问题,装字体没有用 |
| 请先激活插件:在 engstudy.top 页签填入手机号… | 本机从未激活过。按第 2 节激活一次即可,之后在有效期内可以离线用 |
| 授权已过期,导入已停止。请到 engstudy.top 页签重新激活以续期… | 授权超过 30 天没有续期(通常是长期没联网打开过插件)。 1.2.1 起在线库和本地 JSON 导入都会停,重新激活一次即可恢复。 你的 JSON 文件、模型里已建好的材料、本机激活记录都没有被删除, 重新激活也不占新席位 |
| engstudy.top 在线材料库需要 Abaqus 2023 或更高版本 | 当前 Abaqus 自带 Python 2.7,联网模块无法运行。 请用本地 JSON(第 5 节),功能一个不少 |
| 提示需要会员 | 手机号验证通过了但没有有效会员。点页签上的 开通会员 按钮。
注意:服务器只能在验证码校验之后才知道会员状态,
所以建议先确认会员再发验证码 |
| 提示设备数已达上限,并列出设备 | 授权按设备绑定,席位用满了。列表里有每台设备的最后使用时间, 选一台释放即可。超过 30 天未使用的设备会自动释放 |
| 提示稍后再试 / 倒计时 | 验证码发送太频繁。等倒计时结束再点, 插件不会自动重发(短信是真金白银,不做自动重试) |
| xxx 不是合法的 JSON:… | JSON 语法错。最常见的是多余的逗号(最后一项后面不能有逗号) 和中文标点(全角引号、全角逗号)。 把文件粘到任意 JSON 校验工具里一眼就能看到位置 |
| plastic: needs a "table" of [yieldStress, plasticStrain] rows | 塑性块没给表格。多点硬化曲线必须用 table,
不能只给一个屈服强度标量 |
| plastic: 第一行塑性应变必须为 0 / 应变必须递增 | 见 5.4 的三条硬性要求。温度相关时是每个温度分组内部 从 0 开始递增 |
| elastic: 泊松比超出范围 | 必须严格落在 −1 和 0.5 之间。填 0.5 也不行(不可压缩, 该用超弹或杂交单元) |
| all rows must have the same length | 表格里某一行少写或多写了一个数。常见于加了温度列但漏了某一行 |
| elastic: type LAMINA needs 6 values per row, or 7 with a trailing temperature column, got 5 | 各向异性弹性的常数个数是定死的,见 5.13 的表。
LAMINA 要 6 个,ENGINEERING_CONSTANTS 要 9 个。
少一个通常是漏了 G23,多一个通常是把温度混进去了 |
| elastic: type LAMINA with temperatureDependency false needs 6 values per row (6 constants), got 7 | 你明确写了 "temperatureDependency": false,但每行多了一个数。
要么把它删掉,要么把这个标志改成 true,见 5.13 |
| elastic: type XXX requires an explicit "table" | 除 ISOTROPIC 以外的类型不能用
youngsModulus/poissonsRatio 这种写法,
必须给 table |
| unknown Abaqus constant "XXX" | type、hardening 这类字段的取值拼错了。
必须是 Abaqus 的常量名,全大写加下划线,
例如 ENGINEERING_CONSTANTS 而不是
Engineering Constants |
| elastic and hyperelastic are two alternatives for the same property | 一个材料同时写了 elastic 和 hyperelastic。
它们互斥,删掉不适用的那个,见 5.7 |
| hyperelastic: type OGDEN needs either an explicit "table" of coefficients or a "testData" block | 阶数可变的型式(OGDEN / POLYNOMIAL /
REDUCED_POLYNOMIAL)列数不固定,不能按名字给系数,
必须自己写 table,或者改用 testData,见 5.7 |
| hyperelastic.testData: none of uniaxial/biaxial/planar/volumetric is present | testData 是个空块,或者子块名拼错了。这四个名字必须至少有一个 |
| creep: law STRAIN 的 A 必须 > 0 | A 是蠕变速率系数,0 表示"不蠕变"——
那应该删掉整个 creep 块。另请核对 A 的单位制,见 5.8 |
| damping: needs at least one of alpha, beta, composite, structural | damping 块是空的,或者键名拼错了。注意写
"beta": 0 是合法且有意义的,不算空,见 5.9 |
| 橡胶件在大变形下刚度明显不对 | 用 elastic 描述橡胶了。线弹性在大应变下不成立,
Abaqus 不会报错,只会算错。改用 hyperelastic,见 5.7 |
| 蠕变量差几千倍 | A 的单位制没换算。文献常用 MPa+小时,
插件用 MPa+秒,差 3600 倍且不会报错,见 5.8 |
| 模态频率或波速差很多 | 先查密度。mm 制下金属密度是 e-9 量级,
填了 7850 会差 1012 倍,
而 Abaqus 不会报错。见第 6 节 |
| 承载明显偏低、塑性区偏大 | 两个可能:(1) 用的是在线库的室温标量,塑性是理想弹塑性(第 4 节); (2) 硬化曲线填的是工程应力应变而不是真应力(5.4) |
| 凭空出现热应力 | zeroTemperature 和初始温度场的单位不一致。
两边都必须是摄氏度,见 5.5 |
| 某个材料的某块没建立 | 这是正常行为,不是 bug。看消息区 —— 它会逐条说明哪块没建、为什么。缺数据时插件不会补 0 |
| WARNING xxx: this release does not build plastics, so the material was created without it | JSON 里有一个本版认不出来的属性块名。材料本身仍然建好了,
只是少了这一块。绝大多数情况是键名写错了 ——
例句里的 plastics 应该是 plastic,
写错一个字母,整条硬化曲线就没进去,材料变成纯弹性,
Abaqus 不会报错,只是永远不屈服。
对照 5.1 的键名表核一遍。另一种可能是这份 JSON
是给更新的版本写的,那就升级插件 |
模型里出现了名字像 zzMaterialImporterScratch0 的材料 |
覆盖导入时插件先用这个临时名把新材料建好,确认无误再改名换上去, 这样替换失败也不会毁掉原有材料(1.2.1 起)。正常情况下你看不到它; 它留下来说明最后一步改名失败了 —— 里面是建好的新数据, 你可以手工改成想要的名字,也可以直接删掉,原材料没有被动过 |
| 筛选后点「全选」,只勾上了看得见的几个 | 就是这样设计的。全选 只管当前可见的,
清空 则清掉全部(含被筛掉的)。
列表上方的状态文字显示的始终是真实勾选总数,见 3.1 |
| 改了筛选词,之前勾的怎么变了 / 没变 | 看你有没有自己动手勾过。没勾过之前勾选跟着筛选走 (刚读进来是全勾的,筛出 4 种就只导这 4 种); 你自己勾过一次之后勾选就固定归你,改筛选词不再动它。见 3.1 |
| 点了导入,什么都没弹出来 | 1.2 起就是这样设计的,导入结果不再弹窗。看 CAE 下方消息区, 见第 3 节。1.1 及更早会弹一个汇总框 |
| 菜单里出现两个「材料库」 | 装了两份。install.bat 装到用户目录,
但旧版手工复制到 plugin_central_dir 的那份还在。
删掉旧的,见第 1 节的升级提示框 |
CAE 闪退 / SEGMENTATION FAULT in ABQcaeG /
ipc_TOO_LITTLE_SENT |
1.1 的已知缺陷,1.2 已修:导入完成时那个汇总弹窗开在了 Abaqus 提交事务内部,
事务不可重入,退栈时崩溃。材料其实已经成功建好了,所以重开 CAE 打开
.cae 文件材料都在。请升级到 1.2,并按第 1 节确认没有残留的旧副本 |
| 导入被拒绝,提示单位制不一致 | 1.4 新增的单位制冲突检测:JSON 里的数据(密度、弹性模量、比热) 数值上落在和模型已有材料不同的单位制区间。常见于你用的 JSON 是 SI 制(kg-m-s), 而模型是 tonne-mm-s 制。勾选对话框里的 跳过单位制检查 即可绕过, 或者把 JSON 里的数据换算成当前模型的单位制。见第 3 节 |
| 如何用 GB 50010 混凝土标号生成材料 | JSON 里写 {"grade": "C30"} 即可,插件自动生成
密度、弹性模量和完整的 CDP 参数。支持 C15~C80 共 14 个标号,见第 5.12 节。
插件附带的 materials_concrete_gb50010.json 可以直接导入 |
| 导出材料时有些属性没导出来 | 导出功能会尽量读取当前模型里每个材料的已定义属性。如果某个属性块 插件不认识或者读取出错,会在消息区列出问题,材料本身仍然导出。 已导出的内容可以放心用 —— 插件只读它认识的块,不会编造数据 |
| 材料健康检查结果怎么看 | 点 材料库 → 材料健康检查 后,结果直接打印在 CAE 消息区。
它会检查每项材料的弹性模量范围、塑性硬化曲线是否合理、是否同时有互斥的属性
(如弹性+超弹性),以及模型整体的单位制一致性。
这个功能不需要激活,可以随时用 |
| 项目 | 说明 |
|---|---|
| 激活方式 | 手机号 + 短信验证码,需有效会员。没有账号密码 |
| 有效期 | 30 天,到期前 7 天打开插件时自动续期,不需要再收短信 |
| 离线使用 | 在授权有效期内,本地 JSON 导入和导出都完全离线可用。 在线库需要联网。过期后三者都停,见下方说明 |
| 设备绑定 | 按设备绑定,有席位上限。超限时会列出已绑定设备及各自最后使用时间, 由你选择释放哪一台 |
| 自动释放 | 超过 30 天未使用的设备自动释放席位, 所以换电脑、重装系统不会把自己锁在门外 |
| 主动释放 | 插件里可以主动释放本机席位(换机前建议先释放) |
| 服务器故障 | 服务器出问题时本地授权不会被删除, 故障期间照常可用。这是刻意的设计 |
授权过期后,导入和导出都会停。
在线材料库、你自己的本地 JSON 导入,以及
导出材料(1.5.0 起)都需要授权在有效期内。
点「导入」或「导出」会被拦下并提示去 engstudy.top 页签重新激活。
为什么导出也要授权?因为导出是在线材料库的数据变成一个普通 JSON 文件、 可以随手转发出去的唯一出口。导入拦住了而导出不拦,等于没拦。
这一条对你有代价,说清楚:过期后你自己手工建的材料也一起导不出来了 —— 那是你的数据,不是我们的。插件目前没有记录每种材料的来源, 所以做不到「只拦在线库的、放行你自己的」。等能区分了,这个限制应该收窄而不是维持原样。 在此期间,模型里的材料一个都不会被删,CAE 材料编辑器里照样能看能改, 续期后立刻能导出。
材料健康检查不受影响,过期后照常能用:它只读你的模型并打印到消息区, 不产生任何可以转发的文件。
你的数据一个字节都不会少:过期不删你的 JSON 文件、不删已经建进
.cae 模型里的材料、也不删本机的激活记录(重新激活不占新席位)。
续期后立刻恢复。
历史行为不同,按那时的说明做过计划的请注意:1.2 及更早,过期只影响在线库, 本地 JSON 仍可导入;1.2.1 到 1.4.1,过期停两条导入路径但导出仍可用。
长期离线的用户请注意这条。 授权有效期 30 天,剩 7 天以内联网使用会自动续期。 如果你要出差或进入隔离内网超过一个月, 请在出发前联网打开一次插件(会自动续期),否则回来时需要先联网重新激活才能继续导入。
1.5.0 起,插件的 engstudy.top 页签底部多一行更新状态。
它的作用只有一个:告诉你有没有新版本。
插件不会自己下载、不会自己替换任何文件。 它只会显示「有新版本」并给出下载页地址,装不装、什么时候装由你决定。 这是刻意的:自动下载并执行代码等于在你的机器上开一个远程执行入口, 而且 Abaqus 插件无论如何都要重启 CAE 才能生效,偷偷替换文件也换不来任何方便。
| 显示 | 含义 / 按钮 |
|---|---|
| 当前版本 1.5.0(尚未检查更新) | 还没成功问到过服务器 —— 全新安装、离线、或服务器暂时不可达。 这不代表你的版本旧,只代表插件没法替你确认 |
| 当前版本 1.5.0(已是最新,检查于 2026-09-06) | 问到了,没有新版本。带日期是故意的:三周前的「已是最新」和今天的 不是一回事,标签不该把两者说成一样 |
| 发现新版本 1.6.0 | 按钮变成「下载新版本」,点它用系统浏览器打开下载页 |
| (一条公告文字) | 网站发布的通知,例如维护时间、新材料库上线。可以关掉,关掉后不再出现 |
| 暂时无法连接服务器 | 断网或服务器故障。不影响导入,下次打开插件会自动再试 |
MaterialImporter-x.y.z.zip,解压。install.bat,不需要先卸载旧版,它会覆盖。
升级不影响授权:license.json 不在插件目录里,覆盖安装碰不到它。
你不需要重新激活,也不会因此多占一个设备席位。
已经建进 .cae 模型里的材料同样不受影响。
服务器可以标记一个最低支持版本。如果你的插件低于它,点「导入」会被拦下, 提示先升级。这不是为了催你付费 —— 它是给已知会算错的版本准备的开关。 例如 1.4 会把复合材料的最后一个弹性常数当温度读掉(见 5.13),那个版本导出来的模型是错的, 让它继续静默出错比拦住它更糟。
这不是防破解锁,我们也不打算把它说成防破解锁。 它读的是你自己目录下的一个缓存文件,拔掉网线就能让旧版本继续跑。 它的价值在于让绝大多数正常联网的用户不会拿着一个已知算错的版本做项目, 不在于拦住有意绕过的人。真正的授权校验是第 9 节那一套。
另外:服务器读不到、没设置、或者版本号填错时,插件一律放行。 后台一个笔误不应该有能力一次性锁死所有用户。
插件在本机只写三个文件,都在 %LOCALAPPDATA% 下的插件目录里:
| 文件 | 内容 |
|---|---|
install.json | 一个随机安装标识,用于生成设备指纹 |
license.json | 授权令牌、到期时间 |
update.json | 上次检查更新的时间、服务器返回的版本号和公告文字(1.5.0 起) |
abaqus.rpy 里
—— 登录和下载都在 GUI 进程内完成,交给内核的只有一个临时 JSON 文件的路径
卸载:双击插件包里的 uninstall.bat,它删掉
%USERPROFILE%\abaqus_plugins\materialImporter;手工删这个文件夹是一样的效果。
uninstall.bat 不动本地授权文件 —— 想同时清掉授权,把上面三个文件也删掉。
换机器前建议先在插件里释放本机席位,比等 30 天自动释放快。