Python调用Aspen_Plus接口实现化工过程模拟

文章目录

  • 前言
  • 调用方法
    • 简单调用方式
    • 对应Aspen节点调用查看方式
  • 异常处理方式
  • 总结


前言

Python是一种广泛使用的胶水语言,也容易实现与各种软件之间的相互通信。以Aspen Plus为例,可以通过Python编写优化算法后调用Aspen对结果进行模拟与检验。

调用方法

简单调用方式

在使用Python与Aspen进行通信时,要保证版本号对应,以下提供一种简单的调用方式仅供参考。

import win32com.client as win32
import time

file_bkp = '\T0204.bkp'
# 初始化Aspen,目标bkp文件与本程序文件为同一根目录文件
Aspen = win32.Dispatch('Apwn.Document.37.0')
'''
Aspen版本: 调用对应版本号
* 11.0: 37.0,
* 10.0: 36.0,
* 9.0: 35.0,
* 8.8: 34.0
'''
Aspen.InitFromArchive2(file_bkp)
Aspen.Visible = 0 # 设置用户界面可见性,设置为不可见,0为不可见,1为可见
Aspen.SuppressDialogs = 1 # 压制对话框的弹出,1为压制;0为不压制

# 对Aspen内参数进行设置
Aspen.Tree.FindNode('\Data\Blocks\T0204\Input\BASIS_RR').value = X[i][0] # 主塔摩尔回流比
Aspen.Tree.FindNode("\Data\Blocks\T0205\Input\BASIS_RR").value = X[i][1] # 副塔质量回流比
Aspen.Tree.FindNode("\Data\Streams\S0225\Input\TOTFLOW\#0").value = X[i][2] # 萃取剂补充进料量
Aspen.Tree.FindNode("\Data\Blocks\T0204\Input\PROD_FLOW\S0220").value = X[i][3] # 主塔侧线采出摩尔流量
Aspen.Tree.FindNode(r"\Data\Blocks\T0204\Input\NSTAGE").value = X[i][4] # 主塔理论塔板数
Aspen.Tree.FindNode("\Data\Blocks\T0204\Input\PROD_STAGE\S0220").value = X[i][5] # 主塔侧线采出级
Aspen.Tree.FindNode("\Data\Blocks\T0204\Input\FEED_STAGE\S0221").value = X[i][5] # 主塔侧线进料级

Aspen.Reinit() # 运行初始化
Aspen.Engine.Run2(1) # 运行当前模拟文件
# 判断当前是否正在运行Aspen
while Aspen.Engine.IsRunning == 1: # 每秒检查一次是否运行完成
    time.sleep(1)
# 检查Aspen模拟是否报错或含有警告
IsError = Aspen.Tree.FindNode('\Data\Results Summary\Run-Status\Output\PER_ERROR').value
SimulationConvergency = '未收敛' if IsError else '收敛'
Aspen.Quit() # 关闭Aspen
Aspen.Close()

对应Aspen节点调用查看方式

以上述萃取剂补充进料量节点为例。
1、找到该流股。单击鼠标左键进料流股S0225的对话框,在总流量一栏,选定这个变量,单击右键复制这个变量。
2、复制变量后,选择自定义(Customize)的标签页。在设置(Settings)下,找到变量浏览器(Variable Explorer)。
3、进入变量浏览器,在空白处鼠标单击右键,选择“去节点(Go to Node)”。
4、弹出一个对话框,点击确定(OK)。
5、找到该节点的Call和Value属性,Call为调用地址(例如:"\Data\Streams\S0225\Input\TOTFLOW#0"),Value为当前变量的值,可以用Aspen.Tree.FindNode(Call).value进行修改(例如:Aspen.Tree.FindNode("\Data\Streams\S0225\Input\TOTFLOW#0").value = X[i][2] )

异常处理方式

在编写Python脚本并进行测试时,容易抛出如下错误:
ModuleNotFoundError: No module named ‘win32api’
安装所需要的依赖包即可

pip install pypiwin32

总结

本文仅提供一个简单的Python与Aspen通信的基础操作,使用python3.8与Aspen Plus V11亲测有效,并编写了PSO算法,优化效果较好。

你可能感兴趣的:(python)