C# 调用Ansys APDL编写的命令(包括带参和不带参宏文件调用)
前言
APDL的全称是ANSYS Parametric Design Language,也被叫做ANSYS参数化设计语言。APDL不仅是优化设计和自适应网格划分等ANSYS经典特性的实现基础,也为日常分析提供了便利。APDL就是对ANSYS进行二次开发的语言,但是,APDL命令仅仅适用于ANSYS软件本身,不具有外延性。那么如何将APDL命令和常用的开发语言(例如C#)相结合,进而将APDL命令与其他工程相耦合,开发出定制的软件呢?本文介绍如何利用C#调用APDL命令文件。
一、C#执行APDL命令文件
1、APDL命令文件(将数组中的数据写出到data1.txt文件中)如下
finish
/clear
/prep7
*create,dataWrite,mac !创建宏文件
*cfopen,data1,txt !创建写出文件
!自定义数组并填充值
*dim,writeData,,20,5
*do,i,1,20
*do,j,1,5
writeData(i,j)=5*(i-j)+j
*enddo
*enddo
*vwrite,writeData(1,1),writeData(1,2),writeData(1,3),writeData(1,4),writeData(1,5)
(5f8.2) !定义数据格式(每行写5个数据,每个数据共有8位(包括小数点),其中小数点后有2位)
*cfclose
*end
datawrite !运行宏文件
2、C#执行上面的APDL命令文件
if (APDLtoCSharp.RunAPDLFile(@"F:\FluentLearn\APDL\CODE\数据写出.txt ",
@"F:\FluentLearn\APDL\CODE\test\test.out ",
@"F:\FluentLearn\APDL\WorkDir"))
{
MessageBox.Show("命令执行完成!","提示");
}
3、执行得到data1.txt数据如下
4、RunAPDLFile方法代码
/// <summary>
/// APDL转到C#执行类
/// </summary>
public class APDLtoCSharp
{
/// <summary>
/// 执行APDL命令文件
/// </summary>
/// <param name="apdlFilePath">待执行的APDL命令文件路径(绝对路径)</param>
/// <param name="outFilePathName">APDL执行过程的输出文件路径名(路径+文件名.txt)</param>
/// <param name="workingDirectory">工作目录路径(存放宏文件等)</param>
/// <param name="ansysPath">ansys可执行文件路径(默认为C:\Program Files\ANSYS Inc\v191\ansys\bin\winx64\ANSYS.exe)</param>
/// <param name="jobName">工作名(默认为file)</param>
/// <returns></returns>
public static bool RunAPDLFile(string apdlFilePath, string outFilePathName, string workingDirectory, string ansysPath = @"C:\Program Files\ANSYS Inc\v191\ansys\bin\winx64\ANSYS191.exe", string jobName = "file")
{
bool result = false;
try
{
ProcessStartInfo startinfo = new ProcessStartInfo();
string commond = String.Empty;
commond += "-b -p ";
commond += "-j " + jobName;
commond += " -np -db -m";
commond += " -i " + apdlFilePath;
commond += " -o " + outFilePathName;
startinfo.Arguments = commond;
startinfo.WindowStyle = ProcessWindowStyle.Normal;
startinfo.FileName = ansysPath;
startinfo.WorkingDirectory = workingDirectory;
Process ProAnsys = Process.Start(startinfo);
ProAnsys.WaitForExit();
ProAnsys.Close();
result = true;
}
catch(Exception ex)
{
MessageBox.Show("RunAPDLFile函数执行失败!\n "+ex.Message.ToString(),"提示");
}
return result;
}
}
二、C#执行APDL带参宏文件
1、如带参宏文件"dataWrite.mac"命令如下
*cfopen,data1,txt !创建写出文件
!自定义数组并填充值
*dim,writeData,,20,5
*do,i,1,20
*do,j,1,5
writeData(i,j)=arg1*(i-j)+j
*enddo
*enddo
*vwrite,writeData(1,1),writeData(1,2),writeData(1,3),writeData(1,4),writeData(1,5)
(5f8.2) !定义数据格式(每行写5个数据,每个数据共有8位(包括小数点),其中小数点后有2位)
*cfclose
2、正常在ANSYS中调用上面宏文件的命令如下
dataWrite,5 !传入参数为5,调用dataWrite宏文件
3、因此,我们可以利用C#首先创建一个文件,文件中的内容为调用带参宏文件的命令,然后,再利用RunAPDLFile方法调用刚刚C#创建的文件,示例代码如下
int arg1=5;
using (StreamWriter sw = new StreamWriter(@"F:\FluentLearn\APDL\CODE\macroFile.txt"))
{
sw.WriteLineAsync("dataWrite,"+arg1.ToString()); //创建内容为执行APDL带参宏文件命令的文件
}
if (APDLtoCSharp.RunAPDLFile(@"F:\FluentLearn\APDL\CODE\macroFile.txt",
@"F:\FluentLearn\APDL\CODE\test\test.out ",
@"F:\FluentLearn\APDL\WorkDir")) //执行上一步创建的APDL文件
{
MessageBox.Show("命令执行完成!","提示");
}
注意,上述方法执行带参宏文件,必须保证宏文件存放在指定的工作目录文件夹下