什么是命令流?
命令流本质上是一个文本文件,通常以 .mac (Macro) 或 .txt 为扩展名,它由一系列 ANSYS 命令组成,这些命令按顺序执行,可以完成从几何建模、网格划分、求解到后处理的所有分析步骤。

优点:
- 自动化与可重复性: 对于标准化的分析流程,编写一次命令流,可以一键重复执行,避免手动操作的繁琐和错误。
- 参数化分析: 可以定义变量,轻松修改模型的尺寸、材料属性、载荷等,进行参数化研究和优化设计。
- 版本控制: 命令流是纯文本文件,可以使用 Git 等版本控制工具进行管理,方便追溯修改历史和团队协作。
- 高性能计算: 在进行大规模计算时,通常需要通过命令流在后台或集群上提交作业,图形界面无法使用。
- 精细化控制: 可以访问一些在图形界面中隐藏或不易设置的深层参数和选项。
如何获取命令流?
获取命令流主要有以下三种方式:
记录日志文件 (最常用)
这是学习命令流最直接的方法。
- 启动 ANSYS:在开始分析之前,确保你已经启用了日志记录功能。
- 在经典界面中,通常默认开启,如果没有,可以在
Utility Menu > File > Jobname中查看或设置。 - 在 Workbench 中,可以在
Tools > Options > Mechanical中设置日志文件。
- 在经典界面中,通常默认开启,如果没有,可以在
- 执行操作:像平常一样,通过图形界面完成你的所有操作(创建几何、划分网格、施加载荷、求解等)。
- 保存日志:分析完成后,退出 ANSYS,系统会自动生成一个以你的任务名命名的日志文件,
jobname.log。 - 提取命令:用文本编辑器(如 Notepad++, VS Code, ANSYS 自带的文本编辑器)打开这个
.log文件,你会看到所有你操作的记录,你需要清理这个文件,删除一些无关的注释、错误信息和重复的命令,整理成一个可重复执行的宏文件(.mac)。
使用 ANSYS 命令对象
在 ANSYS Mechanical (Workbench) 环境中,每个分析步骤都对应一个“命令对象”。

- 在左侧的“大纲树”中,右键点击任何一个步骤(如“Setup”或“Solution”)。
- 选择
Commands。 - 一个新的
Commands步骤会被添加到大纲树中。 - 点击这个
Commands步骤,下面的“详细设置”窗口会显示该步骤对应的 APDL 命令,你可以直接在这里编辑、添加或修改命令,这些命令会在求解时自动执行。
手动编写
对于有经验的用户,可以直接在文本编辑器中编写命令流,这需要对 APDL 语法非常熟悉。
命令流的基本结构和语法
一个完整的命令流通常包含以下几个部分:
! -------------------------- ! 1. 初始化与预处理 ! -------------------------- /PREP7 ! 进入预处理模块,用于建模和网格划分 ! -------------------------- ! 2. 参数定义 (可选但推荐) ! -------------------------- ! 定义几何参数 length = 100 ! 长度 100mm width = 50 ! 宽度 50mm thickness = 5 ! 厚度 5mm ! 定义材料参数 EX_steel = 2.1e11 ! 弹性模量 210 GPa NUXY_steel = 0.3 ! 泊松比 0.3 ! -------------------------- ! 3. 创建几何模型 ! -------------------------- ! 创建关键点 K, 1, 0, 0, 0 K, 2, length, 0, 0 K, 3, length, width, 0 K, 4, 0, width, 0 ! 创建线 L, 1, 2 L, 2, 3 L, 3, 4 L, 4, 1 ! 创建面 AL, 1, 2, 3, 4 ! -------------------------- ! 4. 定义材料属性 ! -------------------------- ! 创建材料号 1 MP, EX, 1, EX_steel MP, NUXY, 1, NUXY_steel ! -------------------------- ! 5. 网格划分 ! -------------------------- ! 选择面 ASEL, S, AREA,, 1 ! 设置单元类型和实常数 ET, 1, PLANE182 ! 2D实体单元 KEYOPT, 1, 3, 1 ! 平面应力选项 R, 1, thickness ! 厚度实常数 ! 划分网格 AMESH, ALL ! -------------------------- ! 6. 施加载荷和约束 ! -------------------------- ! 约束左边所有节点的X和Y方向自由度 NSEL, S, LOC, X, 0 D, ALL, UX, 0 D, ALL, UY, 0 ALLSEL ! 在右边施加一个Y方向的均布压力 SF, ALL, PRES, 1000 ! 1000 N/m 的压力 ! -------------------------- ! 7. 求解 ! -------------------------- /SOLU ! 进入求解模块 SOLVE ! 执行求解 FINISH ! 退出求解模块 ! -------------------------- ! 8. 后处理 ! -------------------------- /POST1 ! 进入通用后处理模块 SET, LAST ! 读取最后一步的结果 ! 显示 von Mises 应力云图 PLNSOL, S, EQV, 0, 1.0 ! 查询特定节点的结果 NSEL, S, LOC, X, length ! 选择右边的节点 PRNSOL, U, Y ! 打印Y方向位移 PRNSOL, S, X ! 打印X方向应力 ALLSEL FINISH ! 退出后处理模块
关键语法规则:
- :注释符号。 后面的内容为注释,程序不会执行。
- :斜杠命令,用于切换模块或执行特定功能,如
/PREP7,/SOLU,/POST1,它们通常独占一行。 - :赋值符号,用于给参数赋值。
- 命令:由字母、数字和特定符号组成,通常大写(不区分大小写,但大写是惯例)。
- 参数:由字母开头,可以包含字母、数字和下划线,如
length,width。 - :续行符,如果一个命令太长,可以用 符号连接下一行。
- *`
**:宏控制符号,用于创建宏文件(如CREATEEND)和循环(如DOENDDO`)。
一个简单的完整示例:悬臂梁分析
下面是一个完整的 ANSYS APDL 命令流,用于分析一个简单的悬臂梁在端部受力时的变形和应力。
! ========================================== ! 悬臂梁静力学分析 APDL 命令流 ! ========================================== ! --- 1. 初始化 --- /FILNAME, Cantilever_Beam, 0 ! 设置文件名 Static Analysis of a Cantilever Beam ! 设置标题 /PREP7 ! 进入预处理模块 ! --- 2. 定义参数 --- ! 几何参数 (单位: mm) L_beam = 200 ! 梁长度 H_beam = 20 ! 梁高度 W_beam = 10 ! 梁宽度 ! 载荷 (单位: N) F_force = 1000 ! 端部集中力 ! 材料参数 (钢) E_modulus = 2.1e5 ! 弹性模量 (MPa) P_ratio = 0.3 ! 泊松比 ! --- 3. 创建几何 --- ! 创建关键点 K, 1, 0, 0, 0 K, 2, L_beam, 0, 0 K, 3, L_beam, H_beam, 0 K, 4, 0, H_beam, 0 ! 创建线 L, 1, 2 L, 2, 3 L, 3, 4 L, 4, 1 ! 创建面 AL, 1, 2, 3, 4 ! --- 4. 定义材料 --- ! 创建材料号 1 MP, EX, 1, E_modulus MP, PRXY, 1, P_ratio ! --- 5. 网格划分 --- ! 选择面 ASEL, S, AREA,, 1 ! 设置单元类型 (2D平面应力单元) ET, 1, PLANE182 KEYOPT, 1, 3, 3 ! 平面应力 (带厚度) ! 设置厚度 REAL, 1 R, 1, W_beam ! 划分网格 AMESH, ALL ALLSEL ! --- 6. 施加载荷和约束 --- ! 约束左端所有自由度 (固定端) NSEL, S, LOC, X, 0 D, ALL, ALL, 0 ALLSEL ! 在右端中心点施加向下的集中力 NSEL, S, LOC, X, L_beam NSEL, R, LOC, Y, H_beam/2 F, ALL, FY, -F_force ALLSEL ! --- 7. 求解 --- /SOLU SOLVE FINISH ! --- 8. 后处理 --- /POST1 SET, LAST ! 显示变形云图 /DSCALE, AUTO, 1 PLDISP ! 显示 von Mises 应力云图 PLNSOL, S, EQV, 0, 1.0 ! 查询最大变形和最大应力 *GET, MAX_DISP, NODE, 0, U, Y, MAX *GET, MAX_STRESS, NODE, 0, S, EQV, MAX ! 将结果输出到窗口 *status, parm *msg, INFO The maximum displacement is %MAX_DISP% mm. The maximum von Mises stress is %MAX_STRESS% MPa. *endmsg FINISH
如何执行命令流?
-
在 ANSYS 中执行:
(图片来源网络,侵删)- 打开 ANSYS Mechanical APDL (Classic) 界面。
- 在命令输入窗口 (
Input Window) 中,直接输入/INPUT, your_macro_file, mac然后按回车。 - 或者,使用菜单
Utility Menu > File > Read Input from...,选择你的.mac或.txt文件。
-
在 Workbench 中执行:
- 在项目 schematic 中,右键点击
Setup或Solution单元格。 - 选择
Commands。 - 在下面的
Details of Commands窗口中,点击Edit,然后粘贴你的命令流代码,或者使用Import功能导入命令流文件。
- 在项目 schematic 中,右键点击
命令流是 ANSYS 强大功能的基石,虽然初学者会觉得它比图形界面复杂,但一旦掌握,你将拥有无与伦比的分析效率和灵活性,建议的学习路径是:
- 从记录日志开始:先在 GUI 中操作,然后分析日志文件,理解每个命令的作用。
- 尝试修改命令流:尝试在日志文件的基础上修改参数,看看结果如何变化。
- 学习高级功能:逐步学习
*DO循环、*IF条件判断和宏定义,实现更复杂的自动化分析。
希望这份详细的指南能帮助你入门 ANSYS 命令流!
