1 问题描述随着詹姆斯-韦布太空望远镜(JWST)发射升空,新的天文观测时代已经到来。它使人类得以窥见迄今为止最遥远、最清晰的宇宙天体红外图像。这些美轮美奂的图像得益于它的6.6米超大口径主反射镜。由光学定律可知,主反射镜的口径越大,望远镜的分辨率就越高,视野越广阔,图像越清晰。为了提高望远镜的分辨率和成像质量,对更大口径的主反射镜的需求是永无止境的。式中,θ ——反射镜的极限分辨角; D——反射镜的有效口径; λ——波长。然而,反射镜的口径越大,制造难度越大,其重量、体积等急剧增加,超出现有火箭的运载能力!因此需要对反射镜进行轻量化设计,甚至地面折叠在轨展开等。在实现超轻量化结构设计的同时,反射镜需能够在自重、温差、平面度不耦合等情况下满足光学使用要求。红外光学系统对主反射镜面形一般要求RMS≤ λ/20(可见光学系统要求更高),可以理解为镜面的粗糙度需达到30nm以下。显然,反射镜及其支撑结构设计是一个以光学性能指标为约束,以自重、温差、平面度偏差等为载荷,以超轻量化率为目标的多工况、多载荷步优化设计问题。因此反射镜轻量化设计时,需要借助ANSYS等有限元分析软件进行迭代计算。然而,ANSYS求解后,我们需要反复将分析结果以数据形式导出,以便将数据导入专业的数据分析软件(如MATLAB、Mathematica、SPSS、Excel等)中进行后处理操作。如下图所示,通过利用MATLAB强大的数值计算功能,分离反射镜面在自重、温差和平面度不耦合等多重因素影响下的刚体 位移,拟合畸变的反射镜面,从而预估反射镜面的光学性能,如慧差、像散、RMS,PV等。对于单一工况的少量数据,我们可以通过手动操作导出数据。但是对于多工况、多载荷步的大量数据,采用手动操作的方式,显然是费时费力、很不现实的。那么有没有什么方便快捷的方法,不仅可以自动批量的将分析结果导出,而且可以将每个工况、每个载荷步的分析数据分别保存在同一个文件中,以便提高数据处理效率呢?答案是肯定的!本文以实例操作的形式,演示ANSYS命令流自动批量导出结果数据。2 读取结果数据该方法基于ANSYS强大的命令流(ANSYS Workbench常用命令流)实现,因此我们先将ANSYS Workbench的分析结果导入到ANSYS经典界面中。具体操作步骤如下:(1)在ANSYS Workbench的Mechanical界面下,前处理后、Solve求解前,单击Analysis Settings,在下方面板的Analysis Data Management中设置Save MAPDL_db为Yes,如下图所示;(特别重要操作,否则ANSYS经典界面无法打开结果文件)(2)点击Solve求解后,关闭Mechanical界面,返回到ANSYS Workbench主界面,右击项目流程图中的Solution,单击Transfer Data To New,选择Mechanical APDL,将ANSYS Workbench的分析结果数据传递到ANSYS经典界面中,如下图所示;(3)右击项目流程图中的Solution,选择Update,进行结果更新,如下图所示;(4)右击Mechanical APDL下的Analysis,选择Edit in Mechanical APDL,进入ANSYS经典界面,如下图所示;(5)此时,ANSYS经典界面一片漆黑,没有模型显示,说明模型还未成功导入,点击左上角RESUME_DB,如下图所示;(6)展开模型树中的General Postproc,展开Read Results,双击Last Set,读取ANSYS Workbench的分析结果,如下图所示;3 批量导出数据通过上述操作后,我们已将ANSYS Workbench的分析结果成功导入到ANSYS经典界面中,接下来就可以通过命令流实现分析结果的批量导出。具体操作步骤如下: (1)将指定点、线、面等几何体的节点编号保存为文本文件(如nodenum.txt),然后将该文件保存在工作目录\files\dp0\APDL\ANSYS下;(重要操作,否则命令流无法读取节点编号) (2)用记事本编写并保存如下代码:/post1 m=“指定点、线、面的节点总数” !定义一个数组用于存放数据*dim,nudenum_1, array, m, 1 !将保存的文本文件存放到数组 *vread,nodenum_1,nodenum,txt (f15.0) !定义一个保存数据矩阵,shell,m行4列*dim,shell, array, m, 4 *do, i, 1, “工况总数”, 1 set, i *cfopen, surface_%i%, txt *do, j, 1, m, 1 ! 获取x坐标*get, shell (j,1), node, j, loc,x ! 获取y坐标*get, shell (j,2), node, j, loc,y ! 获取z坐标*get, shell (j,3), node, j, loc,z ! 获取欲导出数据*get, shell (j,4), node, j, temp ! 命名数据导出后的文件名称txt_1=shell (j,1) txt_2=shell (j,2) txt_3=shell (j,3) txt_4=shell (j,4) *vwrite, txt_1,txt_2, txt_3,txt_4(3e15.6, 3e15.6, 3e15.6, 3e15.6) *enddo *enddo *cfclos finish (3)将上述代码另存为.inp格式文件,并保存在工作目录\files\dp0\SYS\MECH下; (4)进入ANSYS经典界面,点击File——>Read Input from——>选择保存的.inp文件; (5)计算完成后,在工作目录\files\dp0\APDL\ANSYS下找到生成的数据文件surface_i.txt,此时分析结果数据已批量导出,而且每个工况数据单独保存在一个文件中。最后,我们就可以利用MATLAB强大的数值计算功能对各工况数据进行分析处理了。来源:纵横CAE