以梦为马,不负韶华

搜索
查看: 4979|回复: 23
收起左侧

[原创] 实现自编程序与Aspen Plus互联的三种方式

[复制链接]
发表于 1970-1-1 08:00:00 显示全部楼层 |阅读模式
最近项目组有位新人需要通过自己的程序访问Aspen Plus,所以请教到我。考虑到应该有不少人也会遇到这类问题,所以把我综合使用自编程序与Aspen Plus互联的个人经验分享一下。


在我看来,自编程序与Aspen Plus互联可分为三种情况:


(一)        通过Aspen Plus的自动控制(ActiveX)接口。


(1)互联的方法:
这是三种互联方式中最为初级的方式,Aspen Plus用户手册提供了详尽的方式,在《使用ASPEN PLUS的ActiveX自动控制服务器》章节中提供了详细的示例代码;也有不少人发表了相关的论文,如孔祥冰的《Aspen Plus服务器在软件集成中的应用》就通过实际Aspen Plus流程和代码的形式演示了大体操作方式。


Aspen Plus官网以及大部分论文都是以Visual Basic 6.0语言的形式进行演示的。实际上,大部分编程语言都可以实现以上功能。如可以在Excel中通过VBA宏代码实现访问和控制Aspen Plus流程,在MatLab中同样可以访问和控制Aspen Plus流程。浙大有人搞了一个MatLab访问Aspen Plus的工具箱,还发表了一篇论文,虽然这个工具箱没有广为流传,实际上也就是这个原理。


(2)使用范围和局限性:


我见识过招聘会上不少自吹自擂说自己成功后台调用Aspen Plus的毕业生,他们绝大多数都是通过这种方式。很粗陋,直接照着示例代码抄一遍就能实现,没什么真本事。


这种方式是真的有用处的,只是大部分人不知道怎么用。在我的项目经历里,有两处是印象深刻的:一种是通过自己的程序控制一个或者多个Aspen Plus流程,进行最优化求解;另一种是直接从已经运算好的Aspen Plus bkp文件中读取精馏塔水力学数据(粘度、表面张力等),再用自己编写的模型计算漏液、雾沫夹带、液泛等数据。


缺点嘛,更多的还是使用Aspen Plus表皮的东西,比如Aspen Plus算好的流程或者数据;还有一个缺点,那就是可能调用过程速度不理想,稳定性也不是十分的理想。当然,Aspen Plus能开放接口已经很不错了,我还是深表钦佩的。


(二)        通过Aspen Plus的热力学接口。


(1)        互联的方法:


这里所谓的热力学接口其实是一种名为CAPE-OPEN的国际标准化接口,具体可参考www.colan.org,当然,你一时半会也看不懂。因为Aspen Plus将整个模拟软件大体分为设备模块、热力学、模拟器几大部分,它允许你直接访问热力学部分。


这个热力学部分允许访问是不得了的,你可以直接传入温度、压力、组成请求闪蒸,或者直接得到这种情况下的热量、粘度、密度等等数据。这样,比如你在MatLab、Fluid、Excel中正在进行某个方程的计算,但是这个方程需要组分准确的物性数据,就不用自己去查找了,直接扔给Aspen Plus就给你计算出来了。是不是觉得很牛逼,借助Aspen Plus丰富的物性模型和数据库,应该比你自己算的准确的多。


Aspen Plus用户手册并没有提供这种方法的实现代码,因为这属于CAPE-OPEN标准的范畴而不是Aspen Plus的范畴。除此之外,Hysys也支持访问热力学部分的功能,而且比Aspen Plus还优秀。


这个接口大体实现代码如下:
Aspen Plus热力学分 -> GetOverallProperty(“焓”,“摩尔基准”,结果);
当然,实际操作比这复杂的多。


(2)        适用范围和局限性。


适合有自己的数学模型,但是计算中需要用到组分的基础物性或者混合物物性。比如Fluid流体力学计算中就需要混合物的物性。


但是,这个接口标准理解起来和实现起来还是非常非常复杂的,如果一个本科毕业生能够完美的实现这部分功能,找工作的时候说自己的后台调过Aspen Plus还是比较有技术含量的。


同时,Aspen Plus虽然支持热力学接口,但是刚开始的连接速度实在是太慢太慢了,哎呀,慢的让人难受,希望Aspen 公司能够改进一下。


(三)        通过Aspen Plus的设备模块接口。


(1)互联的方法:


假如你雄心壮志学完化工原理想开发一个精馏塔模块,或者自己所从事的项目需要一个计算模型,这个模型又需要用到Aspen Plus的物性数据,除了(二)这种从外界调用Aspen Plus热力学的方法,还可以直接镶嵌到Aspen Plus的内部去。


Aspen Plus用户手册提供了相关示例代码,分为两种方式(1)用Fortran代码的形式,我相信你看的头几遍都是一脸懵逼,因为Aspen Plus Fortran代码形式的接口实在是太乱太乱了,如果你硬着头皮还是可以看懂的;(2)另一种又是CAPE-OPEN接口,Aspen Plus并没有详细描述,还好网上有家叫AmsterChem的公司提供了一个已经用C++和VB做好的实例,如果你的编程功底足够,且对接口标准有了不错的理解,直接在人家版本的基础上改进就行了。


这种方式的互联也是很有技术含量的。之前有个好友在参与项目中需要开发一个计算模块,这个计算模块有他们自己的数学关联式和模型,但是需要用到组分的基础数据和混合物数据,就是开发成独立的模块镶嵌到Aspen Plus中实现的。


(3)        适用范围和局限性。


局限性嘛,需要对编程和接口标准有深入的理解,入门比较困难。


以上可能是访问Aspen Plus互联的三种方式了,希望对于需要的人有所帮助。本人水平有限,难免有纰漏之处,敬请指正。


评分

参与人数 1韶华币 +10 收起 理由
ASYCGO + 10 谢谢帮助

查看全部评分

发表于 1970-1-1 08:00:00 显示全部楼层
总结的很好。
用第一种,可以直接用ASW替代。
第二种,热力学部分,学cape-open等等,难度还是挺大的。如果单纯需要热力学计算的话,可以使用property excel add-in吧。学起来比较简单。
第三个,学fortran和了解结构有难度。如果要学的话多看aspen plus user models吧。
个人意见,仅供参考。

评分

参与人数 1韶华币 +10 收起 理由
ASYCGO + 10 谢谢帮助

查看全部评分

回复 支持 2 反对 0

使用道具 举报

发表于 1970-1-1 08:00:00 显示全部楼层
厉害,可以看看学习下
回复 支持 反对

使用道具 举报

发表于 1970-1-1 08:00:00 显示全部楼层
不错,看了以后终于有个大概了解了,之前看的也是一头雾水
回复 支持 反对

使用道具 举报

发表于 1970-1-1 08:00:00 显示全部楼层
总结的太好了,不知道现在已经2021年了,有没有更新的办法了呢?
回复 支持 反对

使用道具 举报

发表于 1970-1-1 08:00:00 显示全部楼层
bshao_sh 发表于 2016-12-12 20:09
总结的很好。
用第一种,可以直接用ASW替代。
第二种,热力学部分,学cape-open等等,难度还是挺大的。如 ...

大哥,帅呆了,不知道2021年有没有最新的方法了呢
回复 支持 反对

使用道具 举报

 成长值: 54085

发表于 1970-1-1 08:00:00 显示全部楼层
一起探讨多种方式,其实除了ASPEN PLUS,其他通用流程模拟软件,如HYSYS,PROII等都有相关用法。多多探讨,不同的软件,都是有他的特定工艺所擅长的模拟方面的。
[发帖际遇]: spacejun 捡到一块切糕,卖给了小马,赚了 4 个 韶华币. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

 成长值: 5035

发表于 1970-1-1 08:00:00 显示全部楼层
学习的越来越深入了,原来16年都有这方面内容了, 楼主从事这方面时间够久了。
回复 支持 反对

使用道具 举报

发表于 1970-1-1 08:00:00 显示全部楼层
谢谢你的分享
[发帖际遇]: qyf 发帖时在路边捡到 5 个 韶华币,偷偷放进了口袋. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

发表于 1970-1-1 08:00:00 显示全部楼层
第一种方法也不是万能的,万一计算中有弹窗啥的,就不好弄了

点评

一般调用过程都有人看着。 你说的是国内有些做RTO的公司,后面挂的Aspen,无人值守。这种情况可以通过自动遍历窗口的方式,把窗口干掉。这个我实现过  详情 回复 发表于 2022-10-20 17:35
[发帖际遇]: 王烨 在端午节继续加班,获得加班工资 1 个 韶华币. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

 楼主| 发表于 1970-1-1 08:00:00 显示全部楼层
王烨 发表于 2022-10-20 15:43
第一种方法也不是万能的,万一计算中有弹窗啥的,就不好弄了

一般调用过程都有人看着。
你说的是国内有些做RTO的公司,后面挂的Aspen,无人值守。这种情况可以通过自动遍历窗口的方式,把窗口干掉。这个我实现过

点评

请问您是实现关闭窗口,还是点击弹窗上的控件(按钮)干掉窗口的?后者感觉有难度。  详情 回复 发表于 2022-10-20 20:49
回复 支持 反对

使用道具 举报

发表于 1970-1-1 08:00:00 显示全部楼层
bcbooo 发表于 2022-10-20 17:35
一般调用过程都有人看着。
你说的是国内有些做RTO的公司,后面挂的Aspen,无人值守。这种情况可以通过自 ...

请问您是实现关闭窗口,还是点击弹窗上的控件(按钮)干掉窗口的?后者感觉有难度。

点评

GetWindow(GW_CHILD);\r","marks":[]}]}],"state":{}},{"type":"block","id":"QvxD-1666272672441","name":"paragraph","data":{"version":1},"nodes"  详情 回复 发表于 2022-10-20 21:32
都可以实现,没什么难的。Visual C++ MFC可以轻易地获取窗口句柄,然后模拟人工发送点击按钮或者关闭窗口的命令。其他语言也都可以。  详情 回复 发表于 2022-10-20 21:27
[发帖际遇]: 王烨 在端午节继续加班,获得加班工资 3 个 韶华币. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

 楼主| 发表于 1970-1-1 08:00:00 显示全部楼层
王烨 发表于 2022-10-20 20:49
请问您是实现关闭窗口,还是点击弹窗上的控件(按钮)干掉窗口的?后者感觉有难度。

都可以实现,没什么难的。Visual C++ MFC可以轻易地获取窗口句柄,然后模拟人工发送点击按钮或者关闭窗口的命令。其他语言也都可以。
[发帖际遇]: bcbooo 乐于助人,帮助不愿意过马路的老奶奶过马路,奖励 2 个 韶华币. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

 楼主| 发表于 1970-1-1 08:00:00 显示全部楼层
王烨 发表于 2022-10-20 20:49
请问您是实现关闭窗口,还是点击弹窗上的控件(按钮)干掉窗口的?后者感觉有难度。

编程语言:C++ MFC

CWnd* GetHysysDialog()
{
        CWnd* pDesktopWnd = CWnd::GetDesktopWindow();
        CWnd* pWnd = pDesktopWnd->GetWindow(GW_CHILD);
        while(pWnd != NULL)
        {
                CString strWindowText = _T("");
                ::GetWindowText(pWnd->GetSafeHwnd(),strWindowText.GetBuffer(256),256);
                if(strWindowText.Find(_T("Warning"))>0) return pWnd;//这里自行修改
                pWnd = pWnd->GetWindow(GW_HWNDNEXT);
        }
        return NULL;
}

void KillHysysWarningDialog()
{
        while(true)
        {
                CWnd* pWnd=GetHysysDialog();
                if(pWnd) pWnd->CloseWindow();
                Sleep(100);
        }
}

点评

大神级别啊  详情 回复 发表于 2024-12-6 14:17
这段代码在Aspen Plus V11中测试过没有问题。可以继续扩充添加其他命令  详情 回复 发表于 2022-10-20 21:33
回复 支持 反对

使用道具 举报

 楼主| 发表于 1970-1-1 08:00:00 显示全部楼层
bcbooo 发表于 2022-10-20 21:32
编程语言:C++ MFC

CWnd* GetHysysDialog()

这段代码在Aspen Hysys V11中测试过没有问题。可以继续扩充添加其他命令

点评

多谢您的指导  详情 回复 发表于 2022-10-21 10:43
[发帖际遇]: bcbooo 捡到一块切糕,卖给了小马,赚了 7 个 韶华币. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

发表于 1970-1-1 08:00:00 显示全部楼层
bcbooo 发表于 2022-10-20 21:33
这段代码在Aspen Hysys V11中测试过没有问题。可以继续扩充添加其他命令

多谢您的指导
[发帖际遇]: 王烨 成功加入五毛党,回帖一个奖励 5 个 韶华币. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

发表于 1970-1-1 08:00:00 显示全部楼层
虽然在2023年才看到这篇帖子,但是依然收获满满,深表感谢!
回复 支持 反对

使用道具 举报

发表于 1970-1-1 08:00:00 来自手机 显示全部楼层
厉害,谢谢楼主
回复 支持 反对

使用道具 举报

不想打字就选择快捷回复吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|以梦为马,不负韶华

GMT+8, 2025-2-7 03:45

Powered by 以梦为马,不负韶华

© 2024-2099 Meng.Horse

快速回复 返回顶部 返回列表