查看原文
其他

强强联合 | 用Python与Aspen Plus通信

Devin 化工研学社 2023-10-08


本文作者Devin,现为加拿大滑铁卢大学在读博士,研究方向为疫苗生产的建模、优化与过程控制。推荐大家去关注学长的知乎专栏:“过程系统工程学习笔记”————https://zhuanlan.zhihu.com/chemicalengineeringnotes

阅读提示:对于Matlab与Aspen Plus的通信干货,请看本期首条推送。



正文


上文写到,用Matlab与Aspen Plus(AP)通信。本文继续前文,用同样的例子三效蒸发器说明如何用Python与AP通信。Matlab虽好,但毕竟是商业软件有运用成本,而且现在很多学校也被美国禁用了,Python作为一种广泛使用的胶水语言、开源语言,有很多独到的优势。

用Python与AP通信的详细步骤和思路,完全和Matlab一模一样,只是在具体的代码上有不同。所以详细细节请参看上文,这里只把代码放上来,代码有详细注释。


# -*- coding: utf-8 -*-
"""
Created on Tue Nov 10 11:36:45 2020

@author: Devin @Zhihu https://www.zhihu.com/people/devins/posts
"""

# 导入需要的库
import os
import win32com.client as win32
import time
import numpy as np

# 创建AP的本地服务器

# AP8.8版替换下面的36.0为34.0; 9.0替换为35.0; 10.0替换为36.0;11.0替换为37.0
Application = win32.Dispatch('Apwn.Document.36.0')

# 获取当前文件夹的地址,三效蒸发器文件和本程序文件需放置在同一个文件夹
address = os.getcwd()

# AP的bkp文件的文件名,即三效蒸发器bkp文件的文件名
SimulationName = 'Triple-Effect Evaporator'

# 打开三效蒸发器文件
Application.InitFromArchive2(os.path.abspath(SimulationName + '.bkp'))

# 设置AP用户界面的可见性,1为可见,0为不可见
Application.Visible = 1

# 压制对话框的弹出,1为压制;0为不压制
Application.SuppressDialogs = 1

# 试运行三效蒸发器模拟
Application.Engine.Run2(1)

# 因为AP运行比较慢,所以用一个循环语句,每两秒钟检查一次是否运行完毕
while Application.Engine.IsRunning == 1:
time.sleep(2)

# 定义输入、输出变量、收敛标签
FeedFlow = [1200,1400]
HeatDuty = []
SimulationConvergency = []


# 程序核心部分

# 用for循环依次改变流量为1200、1400,并运行模拟,然后存储数据,检查历史文件
for ii in range(len(FeedFlow)):
# 设置输入流量
Application.Tree.FindNode("\Data\Streams\BRINE\Input\TOTFLOW\MIXED").Value = FeedFlow[ii]

# 初始化,用于清除之前的数据
Application.Reinit

# 运行程序
Application.Engine.Run2(1)

# 定义本次的输出数据
heatduty = []

# 每两秒钟检查一次是否运行完毕
while Application.Engine.IsRunning == 1:
time.sleep(2)

# 获取三个蒸发器的热负荷
heatduty.append(Application.Tree.FindNode("\Data\Blocks\STAGE-1\Output\QCALC").Value)
heatduty.append(Application.Tree.FindNode("\Data\Blocks\STAGE-2\Output\QCALC").Value)
heatduty.append(Application.Tree.FindNode("\Data\Blocks\STAGE-3\Output\QCALC").Value)

# 存储到HeatDuty中
HeatDuty.append(heatduty)

# 获取运行ID,并以文本格式打开相应的历史文件,搜索文件中是否有关键词
name = Application.Tree.FindNode("\Data\Results Summary\Run-Status\Output\RUNID").Value
Filename = address + '\\' + name + '.his'

# 如果关键词出现,则标记这一次结果为没有收敛
with open(Filename,'r') as f:
isError = np.any(np.array([line.find('SEVERE ERROR') for line in f.readlines()])>=0)
SimulationConvergency.append(not isError)

# 关闭AP
Application.Close
Application.Quit

(可滑动查看)


参考文献

Aspen Plus User Guide




END



(文章已获作者Devin的转载许可,点击下方阅读原文即可关注学长的知乎和过程系统工程专栏哦!)


往期精选(点击即可跳转)


天津大学膜分离技术助力破解“温室效应”!

中国石油大学张霖宙课题组 | 基于结构单元与键电矩阵(SU-BEM)混合框架的分子尺度反应动力学模型构建

中国化工学会重磅推出“侯德榜公益大讲堂”

AspenONE V12来啦:化工+AI?

Aspen Plus:二元/三元相图的绘制

学习Aspen,不会用Help功能是不行的!

2020软科世界大学学术排名,化工类高校表现如何

别只会用MathType了,LaTeX太香了!

ChemDraw用不了,分子绘图软件MarvinSketch才是你的首选!

这些好看的化学化工图形是如何绘制的?
创作:Devin整理:yeti
化工设计Club交流QQ群(群号:881289423)
化工设计微信群请加小编微信:hgsheji,拉你进群

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存