如何通过Matlab调用Aspen?

Aspen作为一款十分强大的流程模拟软件,经常用于大规模工业流程的模拟。在利用流程模拟进行科学研究时,会涉及对整个流程的优化,无论是操作参数还是设计参数的优化,单独利用Aspen时难以完成。这时就需要利用Matlab进行优化算法的编写和运行,那么如何在Matlab中对Aspen进行调用,提取并输入参数呢?

本文使用的软件为Aspen Plus v11以及Matlab2019b。

打开Matlab,新建脚本文件并输入如下代码:

%通过Matlab已经封装好的组件对Aspen的接口(Application)进行连接。
handles.aspen = actxserver('Apwn.Document');
%第一种方式连接需要运行并操作的bkp文件(只支持这类Aspen文件)
%这种方式固定了Matlab寻找bkp文件的路径
handles.filepathname=strcat('C:\Users\28901\Desktop\Example\','simulation.bkp');
handles.aspen.InitFromFile2(handles.filepathname);
%第二种方式连接bkp文件
%这种方式可以手动选择任意路径下的bkp文件
[filename,filepath]=uigetfile('*.bkp');
handles.filepathname=strcat(filepath,filename);
handles.aspen.InitFromFile2(handles.filepathname);
%这两种方式二选一即可

如何通过Matlab调用Aspen?_第1张图片

%连接好Aspen后即可进行运行和提取数据等多种操作
%首先设置全局变量,以便更方便的调用功能
aspen = handles.aspen;
%运行Aspen
aspen.Run2;
%判断Aspen运行结果是否收敛,是否报错,if判断语句为ture即收敛,为false不收敛。这段语句中的Filename为Aspen运行后生成的历史文件的路径,需要进行修改,将'F:\MatlabProgram\SurrogateProgram\First Unit\bkpFile\'语句单引号中的路径改为需要调用的bkp文件路径即可,‘.his’文件默认与bkp文件同一路径。
name = aspen.Tree.FindNode("\Data\Results Summary\Run-Status\Output\RUNID").Value;
Filename = ['F:\MatlabProgram\SurrogateProgram\First Unit\bkpFile\',name,'.his'];
fid = fopen(Filename,'r');
Data = textscan(fid,'%s','delimiter','\n','whitespace',' ');
fclose('all');
contents = Data{1};
SearchingString = 'ERROR';
isStringExist = strfind (contents, SearchingString);
isError = find(~ cellfun ('isempty', isStringExist),1);%检查关键词是否出现
if (isempty(isError))
    disp('Aspen运算结束,流程收敛');

end
%重置Aspen
Reinit(aspen);
%设置Aspen是否可见,1为可见,0为不可见
aspen.Visible = 1;
%关闭Aspen
aspen.Close;
%关闭Aspen,清理内存
%注意,关闭Aspen后重新调用需要从代码最开始重新进行连接!!!
clear handles aspen;
%彻底关闭Aspen进程,如需再次调用需要重新连接!!!
system('taskkill -f -im AspenPlus.exe ');

%提取Aspen中的运算结果
%单引号中的路径为提取数据在Aspen中的存储路径,需要在Aspen中的变量资源管理器进行搜索
bianliangming = aspen.Tree.FindNode('\Data\Blocks\T01\Output\COND_DUTY').value;


如何通过Matlab调用Aspen?_第2张图片

%对Aspen文件进行参数输入
%单引号中的路径为提取数据在Aspen中的存储路径,同样需要在Aspen中的变量资源管理器进行搜索
aspen.Tree.FindNode('\Data\Blocks\T01\Input\NSTAGE').value=5;

上述就是Matlab调用Aspen的部分代码。

你可能感兴趣的:(Scientific,matlab)