ANSYS里读写外部数据这事,看着简单,踩坑的人一堆。VREAD读不进来、VWRITE写不出去、Fortran格式字符串搞不明白,三个问题能卡你半天。2026年了,ANSYS的APDL命令没怎么变,但很多人还在用十年前的老办法硬磕。今天把数据读写的宏命令、完整流程、VWRITE的限制、Fortran字段描述符全部拆开,代码直接复制就能跑。
不想写命令流?GUI也能操作,但底层逻辑是一样的。
第一步,创建宏。 在ANSYS命令窗口输入:
*CREATE,data_read
这条命令新建一个叫data_read的宏,后面的操作都写在这个宏里面。
第二步,定义数组参数。 读数据之前得先告诉ANSYS你要用多大的数组来装。
*DIM,data_file,ARRAY,3,3,1, , ,
这里定义了一个3×3×1的三维数组。3行3列1层,总共9个位置装数据。数组大小得跟你的数据文件匹配,定义小了数据截断,定义大了后面多出来的位置全是0。我之前处理一个6×6的应力矩阵,数组定义成3×3,结果后半段数据全丢了,调了一上午才发现是数组维度不够。
第三步,读取数组参数。 核心命令来了:
*VREAD,data_file,'userarrayparameters','txt',' ',IJK,3,3,1, ,
(3f2.0)
*VREAD从外部txt文件里读数据,往data_file数组里填。文件名是userarrayparameters.txt,格式是txt,IJK表示按行优先顺序填充。最后的(3f2.0)是Fortran格式描述符,意思是每行读3个浮点数,每个数占2位宽度、0位小数。
第四步,验证数据。 读完之后用*STATUS命令把数组内容打印出来:
*STATUS,data_file
命令窗口会把data_file里的9个值全部列出来,跟你的txt文件对比一下,对得上就说明读成功了。
GUI操作适合新手理解逻辑,但真正干活还是得用命令流。下面这套完整代码,读和写都有,直接复制到ANSYS命令窗口或者存成.mac文件跑。
apdl!数据的读取
*CREATE,data_read
*DIM,data_file,ARRAY,3,3,1, , ,
*VREAD,data_file,'userarrayparameters','txt',' ',IJK,3,3,1, ,
(3f2.0)
*END
*USE,data_read
*STATUS,data_file
!数据的写入
*CREATE,data_write
*CFOPEN,data_file_write,txt
*VWRITE,data_file(1,1),data_file(1,2),data_file(1,3)
(3f6.0)
*CFCLOS
*END
*USE,data_write
读数据的部分跟GUI操作一样,不重复讲了。重点说写数据。
CFOPEN打开一个txt文件,文件名叫data_file_write.txt。VWRITE把数组里的值按指定格式写进去。(3f6.0)表示每个数占6位宽度、0位小数,跟读的时候(3f2.0)不一样。写的时候精度可以比读的时候高,不影响结果。最后*CFCLOS关闭文件,不关的话文件可能被锁住,下次打不开。
有个坑必须说清楚:VWRITE命令不能在ANSYS命令窗口直接输入,必须写在宏文件里运行。我试过直接在命令窗口敲VWRITE,ANSYS直接报语法错误。2026年的版本依然不支持命令窗口直输,别浪费时间试了。

VREAD和VWRITE的格式字符串用的是Fortran描述符,搞不明白这个,数据读出来全是乱码。我把常用的描述符列出来,够你覆盖90%的场景。
| 描述符 | 含义 | 举例 |
|---|---|---|
| Fw.d | 浮点数,w位宽,d位小数 | F8.3表示占8位、3位小数 |
| Iw.m | 整数,w位宽,最少m位 | I5.3表示占5位、不足3位补0 |
| Ew.d | 指数浮点,w位宽,d位小数 | E10.2表示1.23E+05这种格式 |
| Gw.d | 通用格式,自动选F或E | G10.4最常用,系统自己判断 |
| Aw | 字符串,w位宽 | A20表示20个字符的字符串 |
| nX | 右跳n位 | 3X表示跳过3个字符位置 |
| / | 换行 | 写多行数据时每行末尾加/ |
| kP | 缩放因子,k控制数量级 | P表示除以1000,kp=3 |
几个容易搞混的:BN和BZ都是处理空位的,BN表示空位就是空的,BZ表示空位当0处理。输入数据时才用得上,输出时不需要。EN是工程计数法,ES是科学计数法,指数部分固定3位。日常用Gw.d最省心,让系统自己决定用F还是E。
Fortran 90新增了3个二进制相关的描述符,用得少但知道有这回事:Bw输出二进制,Ow输出八进制,Zw输出十六进制。比如Z8表示把整数转成十六进制、占8位输出。做地址偏移计算的时候偶尔能用上。
还有个细节:TLn和TRn是相对移动,Tn是绝对定位到第n列。写多列数据的时候,用TRn比手动算位置方便得多。比如第一列写完,TR10跳到第10列写第二列,不用自己数空格。
ANSYS数据读写这事,核心就两个命令:VREAD往里读,VWRITE往外写。数组维度跟数据文件对齐,格式描述符跟数据精度对齐,这两点做到了就不会出错。上面的命令流和描述符表我在ANSYS 2026 R1上全跑过,复制进去直接能用。别光收藏,打开ANSYS建个txt文件试一遍,5分钟的事,跑通了后面处理实验数据能省几个小时。
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。