当前位置:首页>python>Python与Aspen联动的一些技巧总结

Python与Aspen联动的一些技巧总结

  • 2026-08-28 18:18:54
Python与Aspen联动的一些技巧总结
各位好,这个文档主要来说明Python与Aspen联动的时候一些问题和答疑,之前第一章和第二章用到了一个叫做AspenPy的模块,不是原生态的(但是原理几乎一样),同时,在我做能量衡算的时候遇到了一些问题,这些问题网上几乎都没有侧重来讲,比如如何控制单位一样,以及Aspen与可迭代器的关系。而今天的内容是直接用原生态wincom32接口来实现用Python和Aspen通过COM接口的一些转化。
本文档开源,可以进行分享!

第一部分 之前内容复习及其快速浏览

0-变量浏览器

1-Aspen怎么启动:

aspen = win32.Dispatch('Apwn.Document')时间:13.560933828353882
两点
1.这个程序只是启动aspen,并不是aspen的某一个特定文件
2.版本其实无所谓
或者
aspen = win32.gencache.EnsureDispatch('Apwn.Document')

2.启动哪个文件?

aspen.InitFromArchive2(os.path.abspath('BkpDir/FlashTest.bkp'))
os.path.abspath是相对路径转换成绝对路径
这个aspen.InitFromArchive2括号里面要求的是绝对路径,而你假设只有相对路径,则可以这么填,如果你有绝对路径,则
aspen.InitFromArchive2(r'D:\python pa chong\pythonwithaspen\bkpdir\FlashTest.bkp')

3.Aspen是否可视化

aspen.Visible=1 or aspen.Visible=0
注意:不管是0还是1,你这个Aspen都是有后台进程

4.关闭:

aspen.Close()

5.如何获取一个bkp的物质名字

concent=Aspen.Tree.FindNode("\Data\Components\Specifications\Input\CASN")Concent_all=[j.Name for j in concent.Elements]
同理,如果是想获得CAS号就直接
concent=Aspen.Tree.FindNode("\Data\Components\Specifications\Input\CASN")Concent_all=[j.Value for j in concent.Elements]

第二部分 一些比较偏的问题及其解决方法

这次主要是讲解三个问题

一.Aspen不同文件有不同的单位集,怎么切换单位

方法:
1.找到合适单位集,然后进行转化
2.运行,如果不运行的话不行
aspen.Tree.Elements('Data').Elements("Setup").Elements("Global").Elements("Input").Elements("INSET").Value="MET"aspen.Run()

二.怎么获取流股数据

1.获取流股名字(使用Name)

两个方式:
(1).通过FindNode直接获取
Name_Block_All=aspen.Tree.FindNode("\Data\Streams")Name_Block_List=[i.Name for i in Name_Block_All.Elements]
这个是Python的语法糖,相当于
Name_Block_All=aspen.Tree.FindNode("\Data\Streams")Name_Block_List=[]for i in Name_Block_All.Elements:  Name_Block_List.append(i.Name)
这个可以当作使用了For循环的迭代思想
(2)可以用elements
Name_Block_All=aspen.Tree.Elements("Data").Elements("Stream")Name_Block_List=[i.Name for i in Name_Block_All.Elements]
(3)通过Item列表
Name_Block_List=[]streams_node=aspen.Tree.Elements("Data").Elements("Stream")for i in range(1,streams_node.Elements.Count+1):  Name_Block_List.append(streams_node.Elements.Item(i).Name)
这个等同于
Name_Block_List=[]i=0while i<streams_node.Elements.Count:  Name_Block_List.append(streams_node.Elements.Item(i).Name)  i+=1
或者由于列表的思想,我们可以再转化
elements = list(Name_Block_All.Elements)   一次性固化for i in range(len(elements)):    print(elements[i].Name)
或者,迭代器思想
it = iter(Name_Block_All.Elements)while True:    try:        elem = next(it)    except StopIteration:        break    print(elem.Name)

2.获取流股的的输入数据

Volumn_Flow=Aspen.Tree.Elements("Data").Elements("Streams").Elements(Stream_Name).Elements("input").Elements("VOLFLMX2").Value

3.获取流股的输出数据

Volumn_Flow=Aspen.Tree.Elements("Data").Elements("Streams").Elements(Stream_Name).Elements("Output").Elements("VOLFLMX2").Value

4.修改流股的输入数据

Aspen.Tree.Elements("Data").Elements("Streams").Elements(Stream_Name).Elements("input").Elements("VOLFLMX2").Value=0.06

5.修改流股的输出数据

Aspen.Tree.Elements("Data").Elements("Streams").Elements(Stream_Name).Elements("Output").Elements("VOLFLMX2").Value=0.06

三.怎么获取模块的输出数据

1.获取模块的输入数据

首先,这里的大小写都一样,都不影响结果
两种方式,第一种是Elements形式:
Aspen.Tree.Elements("Data").Elements("Blocks")
第二种是FindNote形式
Aspen.Tree.FindNode("\Data\Streams")

2.获取模块的输出数据

四.怎么创建和删除流股,模块,流股和模块之间怎么连接起来

1.模块

创建模块:Add()
BlockName="0101"EquipmentType=["RCSTR", "RPlug", "DSTWU", "Flash2", "Mixer", "Heater", "Radfrac", "Splitter", "RYield]#从中选一个All=BlockName+"!"+"RPlug"Aspen.Tree.Elements("Data").Elements("Blocks").Elements.Add(All)
这是设备类型的选项,可以对这个进行查看
删除模块:Remove()
Aspen.Tree.Elements("Data").Elements("Blocks").Elements.Remove("Blockname")

2.流股

创建流股:Add()
StreamName="0101"EquipmentType=["MATERIAL", "HEAT", "WORK","POWER"]#从中选一个All=StreamName+"!"+"MATERIAL"Aspen.Tree.Elements("Data").Elements("Streams").Elements.Add(All)
删除流股:Remove()
Aspen.Tree.Elements("Data").Elements("Streams").Elements.Remove("StreamName")
连接流股:Add()这里虽然看似是连接流股,实际上用到的和模块有关
Aspen.Tree.Elements("Data").Elements("Blocks").Elements("Ports").Elements(Portname).Elements.Add(Streamname)port_Name="D(OUT)" , "B(OUT)", "F(IN)"
断开流股:
Aspen.Tree.Elements("Data").Elements("blocks").Elements(Blockname).Elements("Ports").Elements(Portname).Elements.Remove(Streamname)
重要的点
大小写并不影响

第三部分:可能用到的方法及其保存方法

杂项指令:

1.显示Aspen的文件地址

Aspen.FullName
#D:\aspenruanjian\Aspen Plus V14.0\GUI\Xeq\aspenplus.exe

2.抑制窗口

Aspen.SuppressDialogs = 1 or 0
#1表示抑制,0表示不抑制

3.运行模拟

Aspen.Run2()

4.停止模拟

Aspen.Stop()

5.重置模块

Aspen.Reinit()

6.模块重置#已经删除

Aspen.Tree.Elements("Data").Elements("Blocks").Elements(Blockname).Reinit()

7.流股重置#已经删除

Aspen.Tree.Elements("Data").Elements("Streams").Elements(StreamName).Reinit()

保存:

8.保存成apw,有所有的输入及其输出

Aspen.Save()

9.保存当前 Aspen 模拟(.apw)为新名称,而不覆盖原文件。 参数: Filename:指定文件名的字符串。 overwrite:当文件已存在时是否覆盖?True 或 False,默认值为 True

Aspen.SaveAs(Filename, overwrite)

10.保存成bkp文件

Aspen.Export(1, filename)

11.保存成.rep或者.txt文件

Aspen.Export(2, filename)

12,保存成.sum

Aspen.Export(4, filename)

13.保存成.inp

Aspen.Export(5, filename)

14.保存每次模拟的信息,错误和警告:

Aspen.Export(6, filename)

15.导出仿真报告

Aspen.Export(9, filename)

16.导出压力驱动的模拟报告

Aspen.Export(10, filename)

17.导出流程图的绘图

Aspen.Export(11,filename)
各位可以加入这个交流群一起交流!
一些比较好的化工链接:
1.CEPD化工社区:
2.我的公众号:MrsJone的破站(会分享关于Aspen和Python的一些文章)
3.世示其up主的化工设计大赛管道选型,这个exe文件可以找up主三连获取
4.能量衡算系统-可以用于化工设计大赛:
进我那个群自领
5.AspenPy模块的github链接-我一开始用的Aspen和Python连接的库,可以给原作者star
最后我想给大家说一下心里话
这块内容我从去年打化工设计大赛的时候就准备筹备了,但是因为打化设没有时间,上学期的时候也是因为自己的一些私事导致自己并没有关注这块内容,我在弄这个的时候遇到了一些很好很好的人,遇到了一些很好的老师。
我可能之后这几天不再更新关于aspen和python联动了,因为我把该讲的都讲了,如果听进去的话应该都学会了,后面我可能会发几个我自己开发的程序或者软件,比如我现在正在做的自动化物料衡算,自动化塔选型,把这些做完,然后发到b站上,当然,也是开源的。
前几天有人问我,我为什么坚持开源?耗费那么多时间给别人免费用,胡闹呢,我说,因为有很多人在坚持和我一样的想法,今年刚开年,我帮一位同学解决了关于Aspen吸附的疑问,然后他给我发了个88块钱的红包
说不感激那是假的,我当时热泪盈眶的发朋友圈了,然后花了点时间想,如果我把这些钱弄到我自己的话,那其实还是帮别人有偿,思索了一下,最后决定把这份钱捐出去了
这件事真的深深触动了我,那一刻我便笃定了一个想法:往后无论深耕哪个领域,能开源的内容我定会尽数分享。我在化工领域的积淀尚浅,就连化工原理也只考了 61 分,算不上合格;编程能力也平平,蓝桥杯也只拿了个不起眼的奖项。但我总想着,若某天有和我一样怀揣着相同困惑的人,能因我的分享解开心中的疑团,那我所做的这一切,便都有了意义。
最后,我希望以一个学姐曾对我说的话来作为结束语

终有一天,你会来到洗墨江,来到夜空之下。你会目睹无数不可攀爬之山相继倾覆,不可逾越之海干涸成田,你要记得,你的命运悬在刀尖上,而刀尖须得永远向前。

最新文章

随机文章