早上试了一下让Codex直接驱动Abaqus建模,思路是Codex通过MCP协议连到Abaqus/CAE的Python API,我只需要用自然语言描述模型几何、材料、载荷,Codex生成完整的CAE脚本然后调`abaqus cae noGUI=`跑掉。核心工具是codex-abaqus这个MCP Server,提供了7个工具接口,覆盖建模、作业提交、ODB读取全流程,`abaqus_run_modeling`负责通过CAE API建模,`abaqus_run_python`执行任意脚本,`abaqus_submit_job`提交分析作业支持多CPU和双精度。
安装没什么特别的,Python 3.10以上,mcp包1.0.0以上,Abaqus 2020以上带Python API就行,`pip install -e .`装好之后在Codex的MCP配置里加一行,command写`py`,args写`["-m", "codex_abaqus"]`。Windows上Abaqus路径一般自动检测到`D:/SIMULIA/Commands/abaqus.bat`,不需要手动设ABAQUS_COMMAND。但第一次跑的时候`check_abaqus_connection`一直返回stopped,查了半天是Abaqus那边的轮询循环没启动,MCP server在客户端显示了,但Abaqus侧没有在监听命令文件,这个在好几个MCP客户端上都是默认行为,得手动跑一下`abaqus cae noGUI=scripts\start_abaqus_mcp_loop.py`把worker拉起来。
那天下午隔壁工位在拆快递,撕胶带的声音一下一下的,我盯着终端里反复出现的`connection timeout`,把MCP配置删了又重建了三遍,还把Codex重启了两次,结果发现是Abaqus console那个窗口被我关了,`mcp_loop()`是阻塞式的,Abaqus控制台窗口一关轮询就断了,重开noGUI worker就好了。后来在Codex里输入“用abaqus_run_modeling创建一个悬臂梁模型:长100mm,截面10x10mm,材料钢,端部100N集中力”,Codex生成了一段完整的Python脚本,从`mdb.Model(name='Cantilever')`开始,建part、画sketch、拉伸、赋材料截面、装配、设分析步、加边界条件和载荷,一口气写下来大概七八十行。不过跑的时候报了`NameError: name 'ANALYSIS' is not defined`,原因是Codex生成的脚本里用了`Job(name='...', type=ANALYSIS)`但没从`abaqusConstants`导入`ANALYSIS`常量。把报错信息喂回Codex,它自己把`from abaqusConstants import *`补上了,重跑通过。

这个写法跟手动在CAE里点鼠标建悬臂梁对比,省掉的不是操作步骤本身,而是每次改参数都要重新点一遍的那部分。比如梁长从100改成150,手动操作要在part模块里改sketch尺寸再重新拉伸,用脚本的话直接改一行参数重新跑就行。如果模型比较复杂,比如带孔板或者多材料叠层,Codex生成的脚本里`session.viewports['Viewport: 1'].setValues(...)`这种视图操作代码有时候会出问题,因为noGUI模式下没有viewport,但建模本身不受影响。abaqus_skills这个库提供了更结构化的技能模板,按分析类型分了static、fatigue、xfem、thermal等目录,每个skill里有SKILL.md和reference模板,装到`~/.agents/skills/abaqus_skills`路径下Codex就能自动加载对应技能。
还有一点,Codex生成的脚本默认单位是N-mm-MPa,abaqus_skills的模板里统一了这个约定,长度mm、力N、应力MPa、密度tonne/mm³,如果模型用的是m-kg-Pa就得手动换。输出ODB的读取可以用`abaqus_read_odb_field`直接拉最后一帧的Mises应力和位移U,也可以在脚本里自己写`odb.steps['Step-1'].frames[-1].fieldOutputs['S']`遍历,后者更灵活但代码长。
后来还试了试text-to-cae那个项目,Codex连上Abaqus MCP之后,脚本跑完导出`result_mesh.json`,浏览器打开`http://127.0.0.1:4178/?case=cantilever`就能看到云图,不过这个对模型复杂度的容忍度还比较低,简单悬臂梁和带孔板没问题,复杂装配体还是老实回CAE里看。下次试试用Codex批量生成`.inp`文件做参数扫描,把几何参数写成列表让脚本循环输出,`abaqus cae noGUI=parametric.py`跑完一批再统一读ODB提取最大应力,参数化模板里好像有个`orchestrator.py`的例子,记不清在哪个目录了
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删