﻿（本文件是 UTF-8 编码，用记事本或 VS Code 打开均可）

Material Importer 1.5.0   Abaqus/CAE 材料属性一键导入插件
================================================================

一、安装
----------------------------------------------------------------
双击运行  install.bat

它会把插件复制到：
    %USERPROFILE%\abaqus_plugins\materialImporter

不需要管理员权限、不动 Abaqus 安装目录、不依赖任何配置，
以后换 Abaqus 版本也不用重装。已在 Abaqus 2025 上实测验证。

【装错地方会怎样，以及 Abaqus 到底认哪些目录】

装错地方是完全没反应：菜单里不出现，也不报任何错。Abaqus
只在固定的几个目录里找插件，放在别处它根本不会去看。

下面每一个目录 Abaqus 都会加载，不是找到一个就停：

  1  %USERPROFILE%\abaqus_plugins\
     install.bat 用的就是这个，什么都不用配。

  2  环境文件里 plugin_central_dir 指定的目录
     多见于单位统一部署。install.bat 会自动把它找出来。

  3  Abaqus 安装目录内的 abaqus_plugins\
     形如  <安装目录>\code\python3.x\lib\abaqus_plugins\

  4  启动 CAE 时所在工作目录下的 abaqus_plugins\
     换个目录启动就失效，所以不适合用来正式安装。

正因为是"每一个都加载"，同一个插件在两处各留一份时，菜单会
出现两次，而且可能是旧的那份在跑 —— 升级完发现行为没变，多
半就是这个原因。install.bat 会自动扫第 2、3 项，发现旧副本
就列出完整路径、问你要不要删。第 4 项它不查：CAE 是从哪个
目录启动的，安装脚本无从得知，猜错就等于误删你自己的文件夹。

安装完成后：完全关闭 Abaqus/CAE 再重新打开，然后看菜单
    Plug-ins  >  材料库  >  导入材料...

（若界面为英文，菜单为 Plug-ins > Material Library >
  Import materials...；切中文的方法见下文第四节。）

卸载：双击  uninstall.bat

二、版本要求
----------------------------------------------------------------
Abaqus 2023 及以上    全部功能（在线材料库 + 本地 JSON）
Abaqus 2022 及以下    只能用本地 JSON 导入

分界线在这里的原因：Abaqus 从 2023 开始才把 CAE 内置的
Python 换成 Python 3，而联网部分用的 urllib.request 是 Python 3
才有的模块。这不是可以绕过的限制。

三、先试一下（不需要登录）
----------------------------------------------------------------
包里附了一个样例文件：
    materialImporter\materials_sample.json

在插件的“本地文件”页签里选它，可以先看看导入流程。
注意：本地导入也需要已激活（Abaqus 2022 及以下除外，那些
版本根本无法激活，所以不设门槛）。

四、中文界面
----------------------------------------------------------------
插件会自动跟随 Abaqus 本身的语言。如果你的 CAE 现在是英文，
需要给 Abaqus 加一行 locale 别名，具体步骤见帮助文档的
“中文界面”一节（需要写 Abaqus 安装目录，可能要管理员权限）。

不做这一步插件也能用，只是界面保持英文。

五、完整说明书
----------------------------------------------------------------
    help.html

里面包含：JSON 格式完整说明、单位换算表、报错对照表、
授权与席位说明、隐私说明。

说明书里的界面截图放在同目录的 images 文件夹里。如果要把
help.html 移到其它地方，请把 images 文件夹一起移，否则图显示不出来。

六、单位（最容易出错的地方）
----------------------------------------------------------------
插件用 tonne-mm-s 单位制，应力单位就是 MPa，温度用 degC。

自查一条：钢的密度应该是 7.85e-09，不是 7850。差了 10^12。
如果你自己写 JSON，这是第一个要核对的数字。在线材料库的
数据已经换算好了，不用管。

七、版本记录
----------------------------------------------------------------
1.5.0 新增更新推送：版本提醒、网站公告、强制升级拦截。

     插件不会自己下载或替换任何文件。发现新版本时只提示并
     打开下载页，装不装由你决定。Abaqus 插件无论如何都要重启 CAE
     才能生效，自动替换换不来任何方便，却会开一个远程执行入口。

       * 更新检查最多每 24 小时一次，不带授权令牌，失败一律静默，
         不影响导入。失败时不记时间戳 —— 服务器故障一天不应该换来
         插件安静一整天。
       * 公告可关闭，关闭后不再出现（按公告编号记住）。
       * 服务器可标记最低支持版本，低于它时导入被拦。这是为了把
         已知会算错的版本（如 1.4 误读复合材料）挡在门外，不是防破解锁：
         它读的是用户自己目录下的缓存文件。服务器没设置、读不到、或者
         版本号填错时一律放行 —— 后台一个笔误不应该能一次锁死全部用户。

     修复：版本号曾写在四个地方，1.4.1 就因此带着 1.4 的插件注册发了
     出去。现在只有 materialVersion.py 一处，打包脚本和校验脚本都从它读。
     同时修正了一个隐患：插件之前把授权协议号 “2.0” 当作产品版本号
     上报，高于任何真实发行版，会让更新比较永远认为自己是最新的。

       * 导出材料现在也需要授权在有效期内。之前过期会员仍可导出,
         而导出正是在线材料库的数据变成普通 JSON 文件、可以随手转发的
         唯一出口 —— 导入拦住而导出不拦,等于没拦。
         代价说清楚:过期后你自己手工建的材料也一起导不出来了。
         插件还没有记录材料来源,做不到只拦在线库的。模型里的材料
         一个都不会删,续期后立刻能导出。材料健康检查不受影响,
         它不产生任何可以转发的文件。
       * 修正更新状态标签会谎报「已是最新」。之前只要没有可报的消息就
         显示「已是最新」,包括从来没成功连上过服务器的全新安装。
         现在分三种说法:有新版本 / 已是最新(附检查日期) / 尚未检查更新。
         文案从对话框挪进 materialUpdate,这样普通 CPython 测试层能读到 ——
         它当初写错就是因为只有真实 CAE 会话才看得见。

     测试（本次实测，七层全绿）：静态检查 0 / 授权测试 41 过 0 失 /
     选择逻辑 36 过 0 失 / 更新推送 131 过 0 失 / 安装包校验 89 过 0 失 /
     Abaqus 内核 140 过 0 失 / 真实 CAE GUI 冒烟 43 过 0 失。

1.4.1 修复 1.4 的六个缺陷，涵盖生成器、单位制检查、导出、全部五个测试层。

     修复：
       * 单位制检查在导入密度时崩溃（ValueError: not enough values to unpack）。
         1.4 的 specSamples 返回 2 元组但 `verdict()` 期望 3 元组，
         导致 `unitCheck=True`（默认值）下基本上每个导入都会报错。
       * 混凝土按标号生成时，CDP 塑性参数覆盖无效。
         文档 5.12 节示范的覆盖写法不起作用，因为生成器直接丢弃了用户
         的 concreteDamagedPlasticity 块。
       * 混凝土损伤塑性的内核构造器名称错误（CompressionHardening
         而非 ConcreteCompressionHardening），导致 CDP 材料无法建立。
       * 混凝土损伤塑性块在 JSON 中以 `concrete` 注册，而生成器和
         附带的 materials_concrete_gb50010.json 用的都是
         `concreteDamagedPlasticity`，导致 GB 50010 混凝土全部
         以弹性材料导入、CDP 数据被忽略。
       * 导出时混凝土损伤塑性块写为 `concrete` 而非
         `concreteDamagedPlasticity`，导致导出→导入往返丢失 CDP 曲线。
       * 测试报告仅在成功时写入，崩溃时丢失所有结果。

     测试：静态检查 0 / 授权测试 32 过 0 失 / 选择逻辑 36 过 0 失 /
     内核测试 118 过 0 失 / GUI 冒烟 31 过 0 失。

1.4  新增四个功能：单位制冲突检测、材料健康检查、导出材料到 JSON、混凝土生成器。

     单位制冲突检测（A4）
       导入时自动检查模型里已有的材料和待导入的数据是否是同一个单位制。
       发现冲突会直接拒绝整个导入，并给出具体数值说明。
       如果确信是误判，可以勾选「跳过单位制检查」绕过。

     材料健康检查（A3）
       扫描当前模型所有材料，检查弹性模量范围、塑性硬化曲线、
       互斥组合（如弹性+超弹性）、阻尼参数、单位制一致性。
       不需要登录，也不需要会员。
       菜单：Plug-ins > 材料库 > 材料健康检查...
       结果输出到 CAE 消息区，不弹窗。

     导出材料到 JSON（A2）
       把当前模型中的材料导出为标准 JSON 材料库文件。
       导出的文件可以用导入功能读回去，实现无损往返。
       菜单：Plug-ins > 材料库 > 导出材料...
       不需要会员，自己的材料自己导出。

     混凝土损伤塑性生成器（A1）
       按 GB 50010-2010（2015 版）附录 C 生成 C15~C80 全部 14 个
       等级的 CDP 材料数据，包括压缩/拉伸硬化曲线和损伤曲线。
       附赠 materials_concrete_gb50010.json，可直接导入使用。
       用法：在 JSON 材料库中写 {"grade": "C30"} 即可自动展开。

1.3  新增三个本构块，材料列表加了筛选框。

     新增三个本构块：
       hyperelastic  超弹性。橡胶、密封圈、减振垫。可以给已拟合的
                     系数，也可以直接给实测曲线让 Abaqus 自己拟合。
       creep         蠕变。高温长期承载。
       damping       阻尼。Rayleigh 质量/刚度阻尼等。
     写法见说明书 5.7 / 5.8 / 5.9 节，materials_sample.json 里也
     各有一个可以直接导入的例子。

     材料列表加了筛选框。空格分隔多个词表示「且」，不区分大小写。

     勾选的规则是「你看到勾上的，就是你会得到的」：列表刚读进来是
     全勾的（小型 JSON 库一键全导），在你自己动手勾选之前，勾选跟着
     筛选走 —— 筛出 4 种钢就只导这 4 种，不会把看不见的 52 种一起
     带进来。你一旦自己勾了或取消勾了任何一项，勾选就归你了：之后
     改筛选词不再动它，被筛掉、看不见的勾选依然算数，可以筛一次勾
     几个、再筛一次勾几个。

     列表上方显示的始终是真实勾选总数（含当前看不见的）。
     「全选」只勾当前可见的，「清空」清掉全部。

     修掉 1.2.1 的一个误报。从在线材料库导入时，1.2.1 会给每一
     种材料多报一行 WARNING，说 siteTitle、sourceUrl 这两块「本版
     不支持」。那两项是插件自己写进暂存文件的来源记录，本来就
     不是材料属性。如果你用 1.2.1 导过在线库，那些 WARNING 可以无
     视，材料本身是完整的；升到 1.3 就不再出现。

1.2.1  会员到期后，本地 JSON 导入也会停。

     1.2 及更早只拦在线材料库，本地 JSON 过期后仍可导入。现在两条
     路都需要授权在有效期内，点导入会被拦下并提示去 engstudy.top
     页签重新激活。

     不会删你的任何数据：JSON 文件、已经建进 .cae 模型里的材料、
     本机激活记录都在，重新激活也不占新席位，续期后立刻恢复。

     长期离线的用户请注意：授权有效期 30 天，剩 7 天以内联网使用
     会自动续期。出差或进隔离内网超过一个月之前，建议先联网打开
     一次插件，否则回来时要先联网重新激活才能继续导入。

     覆盖同名材料时不再有丢数据的风险。

     以前：勾了「覆盖已存在的同名材料」，插件先删掉模型里那份、
     再原地重建。如果 JSON 里的新数据有问题（比如泊松比手误写成
     0.6），重建就失败了，而旧的那份已经删掉了 —— 你只会得到一行
     failed，材料没了。一个手误的代价是丢掉已经调好的数据。

     现在：新材料先建在一个临时名下，确认无误才改名换上去。新数据
     有问题时，模型里原来那份完好无损。

     遇到本版不支持的属性块，会在消息区明确说出来。

     以前是悄悄跳过。一块只写了密度和超弹性的橡胶，会导成「有质量、
     没刚度」的材料 —— 看起来跟导入成功一模一样，CAE 建材料时也不
     报错，要到求解结果不对才会发现。现在材料照建，但消息区会写明
     少了哪一块、请在求解前检查。

     install.bat 会自动找出装在别处的旧副本了。同一个插件在两个目
     录各留一份时，菜单会出现两次，而且可能是旧的那份在跑；现在它
     会把完整路径列出来，问你要不要删。Abaqus 认哪些目录见第一节。

1.2  修复一个会让 CAE 在导入完成后闪退的问题。

     现象是：材料已经正确建好了，紧接着 CAE 却报
     SEGMENTATION FAULT / ipc_TOO_LITTLE_SENT / WSAENOTSOCK 并退出。

     原因是获取完成后的汇总提示框开在了表单提交事务内部，
     而模态框会开启嵌套事件循环，提交事务不可重入。现在
     属性缺失的说明改为输出到 CAE 的消息区（Message area），
     可滚动、可复制，不再弹框。

     升级方法：直接运行 install.bat 覆盖即可，激活记录不会丢。
