做拓扑优化或者参数化扫描,离不开MATLAB与ANSYS联合仿真。单纯靠APDL手写循环太慢,用Matlab控制流程才是王道。最近在用R2014a配ANSYS14.5,也试过R2017a配17.0,踩过不少坑,今天把打通这两个软件的野路子分享出来。
别想着直接内存共享,老版本ANSYS不支持。最稳的办法是用TXT文本做中转站。
思路很简单。Matlab把设计变量(比如截面尺寸、材料属性)写成shuju.txt。然后Matlab后台调用ANSYS,读取这个TXT文件进行计算。算完后,ANSYS把结果(比如应力、位移)写成jieguo.txt。最后Matlab再回来读这个结果文件,进行下一轮迭代。
这就好比两个人合作干活,一个负责设计图纸,一个负责加工零件,中间靠一张纸条传递信息。
在Matlab里写数据,要用到fprintf。格式控制一定要严。比如你有14个变量,就得写14个%20.12f。20.12的意思是总共20个字符宽度,小数点后保留12位。为什么这么精确?因为ANSYS对浮点数精度要求极高,少一位都可能导致计算发散。
fid=fopen('c:\shuju.txt','wt');
fprintf(fid,'%20.12f%20.12f%20.12f%20.12f%20.12f%20.12f%20.12f%20.12f%20.12f%20.12f%20.20.12f%20.20.12f%20.20.12f%20.20.12f\n',aa');
fclose(fid);这是最核心的一步。要在Matlab里“唤醒”ANSYS,还得让它乖乖干活。
用系统命令!(感叹号在Matlab里代表调用系统shell)。代码如下:
!"D:\Ansys\ANSYS Inc\v160\ansys\bin\winx64\ANSYS160.exe" -b -p -ane3fl* -i C:\TenBar.txt -o "C:\guocheng.txt"
拆解一下这行咒语:ANSYS160.exe:这是ANSYS主程序路径。 -b:Batch模式,后台运行,不弹出GUI界面。没这个,你的屏幕会被ANSYS窗口刷爆。 -p -ane3fl*:指定许可证,一般用ane3fl(ANSYS Multiphysics)。 -i C:\TenBar.txt:Input file,也就是你的APDL命令流文件。 -o C:\guocheng.txt:Output file,ANSYS计算过程的日志。 ANSYS这边怎么接招?靠两个神命令:*VREAD读入,*VWRITE写出。
假设你Matlab传过来一个10x10的矩阵。在APDL里,你得先定义一个数组,然后用宏命令包裹*vread。
mm=10
nn=10
*create,my_read_load,mac
*dim,w_load1,array,mm,nn
*vread,w_load1(1,1),shuju,txt,,IJK,1,10
(10F20.12)
*end
my_read_load
*status,w_load1
注意那个(10F20.12)。这行必须顶格写,且不能写在*vread同一行。这是ANSYS的老古董语法,稍微不对就报错。算完应力后,把结果写回TXT。
*cfopen,jieguo,txt
uyn=uy(4)
*vwrite,uyn
(f20.16)
*cfclose
finish
*cfopen是创建文件,*vwrite是写数据。这里把节点4的Y方向位移输出,精度给到16位小数。
致命细节。 *vread和*vwrite不能直接在ANSYS命令行里敲。必须把它们放进一个*create创建的宏文件里,或者用/input命令读入。直接粘贴运行?ANSYS会假装没看见。举个栗子。我要优化一个十杆桁架(Ten-Bar Truss)的重量,同时满足应力约束。
Matlab端:随机生成10个杆件的截面积(设计变量),写入shuju.txt。 APDL端:*vread读取这10个面积,赋值给A1到A10。建立有限元模型,加载荷,求解。 APDL端:提取最大应力,用*vwrite写入jieguo.txt。 Matlab端:t=load('jieguo.txt')。判断应力是否超标。如果超标,惩罚重量;如果合格,记录当前最优解。 
跑联合仿真,报错是常态。
错误1:License checkout failed。 说明-p参数错了。试试-p ansys。
错误2:VREAD end-of-file error。* 说明TXT文件格式不对。检查Matlab写的fprintf里的%20.12f和APDL里的(10F20.12)是否匹配。列数对不上,必死无疑。
错误3:Matlab卡死。 ANSYS在后台算,Matlab在等待。如果ANSYS陷入死循环(比如不收敛),Matlab会一直挂着。建议在APDL里设置NEQIT,100(最大迭代次数),强制跳出。
调试建议。 先单独跑通APDL。确保TenBar.txt在ANSYS GUI里能手动跑出结果,再去搞Matlab调用。别两头一起调,你会疯掉的。
最后提醒一句,Matlab调用ANSYS时,杀毒软件可能会拦截ANSYS160.exe的启动。关掉实时防护,能省去一半的麻烦。搞定这套流程,你的优化效率至少提升10倍。
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。