【海川化工论坛】-海川网-化海川流

用户名账户登录  

用户名密码方式登录

QQ登录

只需一步,快速开始

微信登录

手机微信,扫码同步

▲【推荐展示】 开通18840911640     

[原创] 基于CAPE-OPEN标准开发化工模拟单元操作模块

[复制链接]
29715 |86
snowflutterVIP会员 VIP会员 | 显示全部楼层       最后访问IP上海市
头衔:  TA暂未设置 
楼主还真是不错,有强大的精力自己写模拟软件。而且还有团队。牛的一塌糊涂呀。

 

发表于 2013-11-12 12:38:44

回复

使用道具 举报

bcbooo楼主 VIP会员 VIP会员 | 显示全部楼层       最后访问IP浙江省
头衔:  TA暂未设置 
snowflutter 发表于 2013-11-12 12:38
楼主还真是不错,有强大的精力自己写模拟软件。而且还有团队。牛的一塌糊涂呀。

模拟软件有三大部分:主框架、数据库、单元模块。我现在基本完成了主框架;单元模块大部分使用了jasper开发的coco中的一些单元模型(http://www.cocosimulator.com/);数据库初步实现了对气液平衡的求解。组件间的接口都基本遵循了CAPE-OPEN标准。我本来不想自己开发数据库呢,正在研究有没有什么办法直接调用Aspen Plus的或者ProII的,或者用某种特殊的技术打开Aspen的数据库。因为Aspen Plus的数据库使用的是SQL,肯定有办法把Aspen的数据读出来,但是最近一 直 没再研究。

我也是业余时间研究下这些东西,在中国,尤其是Aspen已经做得如此完美的情况下,仅靠我一个人也不会开发出像样的模拟软件,需要更多的人去协作完成。最近在做板式塔水力学的研究,有空也研究一下UniSim。


 

发表于 2013-11-12 14:04:09

点评

PROII是可以利用COM把内部数据全部读出来是没问题。ASPEN我觉得也应该有类似的接口吧。  详情 回复 发表于 2013-11-12 18:37

 

 

 

Peterpaul彼得保罗
回复

使用道具 举报

robinbirdVIP会员 VIP会员 | 显示全部楼层       最后访问IP安徽省
头衔:  TA暂未设置 
bcbooo 发表于 2013-11-12 14:04
模拟软件有三大部分:主框架、数据库、单元模块。我现在基本完成了主框架;单元模块大部分使用了jasper开 ...

PROII是可以利用COM把内部数据全部读出来是没问题。ASPEN我觉得也应该有类似的接口吧。

 

发表于 2013-11-12 18:37:40

回复

使用道具 举报

bcbooo楼主 VIP会员 VIP会员 | 显示全部楼层       最后访问IP浙江省
头衔:  TA暂未设置 
robinbird 发表于 2013-11-12 18:37
PROII是可以利用COM把内部数据全部读出来是没问题。ASPEN我觉得也应该有类似的接口吧。

恩。Aspen Plus也有类似接口。

 

发表于 2013-11-12 19:27:54

回复

使用道具 举报

孙双shuangVIP会员 VIP会员 | 显示全部楼层       最后访问IP天津市
头衔:  TA暂未设置 
您好!请问aspen内的模块有适合模拟并流吸收塔的吗?

 

发表于 2013-12-13 21:49:51

回复

使用道具 举报

bcbooo楼主 VIP会员 VIP会员 | 显示全部楼层       最后访问IP浙江省
头衔:  TA暂未设置 
孙双shuang 发表于 2013-12-13 21:49
您好!请问aspen内的模块有适合模拟并流吸收塔的吗?

这个我还真不清楚。

 

发表于 2013-12-14 08:44:50

点评

谢谢呀~希望以后多多指教~本人新手~  详情 回复 发表于 2013-12-17 20:33
回复

使用道具 举报

孙双shuangVIP会员 VIP会员 | 显示全部楼层       最后访问IP天津市
头衔:  TA暂未设置 
bcbooo 发表于 2013-12-14 08:44
这个我还真不清楚。

谢谢呀~希望以后多多指教~本人新手~

 

发表于 2013-12-17 20:33:56

回复

使用道具 举报

膜拜各位高手

 

发表于 2014-1-8 13:21:20

回复

使用道具 举报

forestxytVIP会员 VIP会员 | 显示全部楼层       最后访问IP浙江省
头衔:  TA暂未设置 
赞一个,像大师级学习

 

发表于 2014-3-2 12:33:59

回复

使用道具 举报

zhangguojieVIP会员 VIP会员 | 显示全部楼层       最后访问IP北京市
头衔:  TA暂未设置 
楼主是高人啊

 

发表于 2014-3-7 22:26:11

回复

使用道具 举报

bcbooo楼主 VIP会员 VIP会员 | 显示全部楼层       最后访问IP浙江省
头衔:  TA暂未设置 
zhangguojie 发表于 2014-3-7 22:26
楼主是高人啊

高人算不上,仅仅是在这一小块方面有点研究。

 

发表于 2014-3-8 09:05:42

回复

使用道具 举报

1040534752VIP会员 VIP会员 | 显示全部楼层       最后访问IP山东省
头衔:  TA暂未设置 
请问谁做过apsen与gproms的对接吗?我这边提示solvint,dll加载错误,哪位能帮助解决下?谢谢

 

发表于 2014-9-7 11:22:13

2.png
回复

使用道具 举报

bcbooo楼主 VIP会员 VIP会员 | 显示全部楼层       最后访问IP浙江省
头衔:  TA暂未设置 
1040534752 发表于 2014-9-7 11:22
请问谁做过apsen与gproms的对接吗?我这边提示solvint,dll加载错误,哪位能帮助解决下?谢谢

你是想调用Aspen Plus的物性数据库?

 

发表于 2014-9-10 08:37:16

回复

使用道具 举报

bcbooo楼主 VIP会员 VIP会员 | 显示全部楼层       最后访问IP浙江省
头衔:  TA暂未设置 
1040534752 发表于 2014-9-7 11:22
请问谁做过apsen与gproms的对接吗?我这边提示solvint,dll加载错误,哪位能帮助解决下?谢谢

你试验一下“ATCOProperties.COPropertySystem.25.0”是否与你调用的Aspen Plus版本是否对应。每个不同的Aspen Plus版本,其后面的数字一般是不同的。

我没有在gproms下调用过Aspen Plus数据库,但是在VC++下成功实现了,代码如下(部分):

wstring error;
   CLSID clsid;
   CLSIDFromProgID(OLESTR("CO10MaterialObject.COThermo10Material.1"),&clsid);
        BSTR b=SysAllocString(_T("ATCOProperties.COPropertySystem.24.0"));
   CComPtr<ICOThermo10MaterialObject> pG;
   HRESULT hr=pG.CoCreateInstance(clsid);
   hr=pG->SetDestinationCO10CLSID(b);
        VARIANT pl;
        hr=pG->GetPropertyPackageList(&pl);
        CVariant v(pl,FALSE);
        v.CheckArray(VT_BSTR,error);
        hr=pG->GetPPackageInterface(v.GetStringAt(0));
        CComPtr<ICapeThermoMaterialTemplate> iCTMT;
        hr=pG->QueryInterface(__uuidof(ICapeThermoMaterialTemplate),(LPVOID*)&iCTMT);
        CComPtr<ICapeThermoMaterialObject> iCTMO;
        hr=iCTMT->CreateMaterialObject((LPDISPATCH*)&iCTMO);
        long num;
        iCTMO->GetNumComponents(&num);
        ///
         VARIANT e1,v1;
     v1.vt=e1.vt=VT_EMPTY;
         CVariant v2;
     CBSTR overall(L"overall");
     CBSTR mole(L"mole");
         v2.MakeArray(1,VT_R8);
         v2.SetDoubleAt(0,293);
        hr=iCTMO->SetPropW(CBSTR(L"temperature"),overall,e1,NULL,NULL,v2);
        CVariant v3;
         v3.MakeArray(1,VT_R8);
         v3.SetDoubleAt(0,101325);
        hr=iCTMO->SetPropW(CBSTR(L"pressure"),overall,e1,NULL,NULL,v3);
        CVariant v4;
         v4.MakeArray(1,VT_R8);
         v4.SetDoubleAt(0,5);
        hr=iCTMO->SetPropW(CBSTR(L"totalFlow"),overall,e1,NULL,mole,v4);
        CVariant v9;
        v9.MakeArray(num,VT_R8);
        double ss=1/num;
        for(int i=0;i<num;i++) v9.SetDoubleAt(i,ss);
        hr=iCTMO->SetPropW(CBSTR(L"fraction"),overall,e1,NULL,mole,v9);
        hr=iCTMO->CalcEquilibrium(CBSTR(L"TP"),e1);
        if(SUCCEEDED(hr)) AfxMessageBox(_T("成功相平衡计算"));
        else AfxMessageBox(_T("失败相平衡计算"));
        VARIANT v67;
        v67.vt=VT_EMPTY;
        hr=iCTMO->get_PhaseIds(&v67);
        CVariant v34(v67,FALSE);
        v34.CheckArray(VT_BSTR,error);
        for(int i=0;i<v34.GetCount();i++)
        {
                CString t(v34.GetStringAt(i));
                AfxMessageBox(t);
        }
        CVariant p;
        p.MakeArray(1,VT_BSTR);
       
        for(int i=0;i<v34.GetCount();i++)
        {
                p.AllocStringAt(0,L"density");
                CVariant p2;
                p2.MakeArray(1,VT_BSTR);
                p2.AllocStringAt(0,v34.GetStringAt(i));
                hr=iCTMO->CalcProp(p,p2,CBSTR(L"mixture"));
                 if(SUCCEEDED(hr)) AfxMessageBox(_T("成功求解属性"));
                else AfxMessageBox(_T("失败求解属性"));
               
        }
       
         for(int i=0;i<v34.GetCount();i++)
        {
                 VARIANT v33,compIds33;
                 v33.vt=VT_EMPTY;
                 compIds33.vt=VT_EMPTY;
                 hr=iCTMO->GetProp(CBSTR(L"density"),v34.GetStringAt(i),compIds33,NULL,CBSTR(L"mole"),&v33);
                 if(SUCCEEDED(hr)) AfxMessageBox(_T("成功获取属性"));
                else AfxMessageBox(_T("失败获取属性"));
                CVariant v46(v33,FALSE);
                v46.CheckArray(VT_R8,error);
                for(int i=0;i<v46.GetCount();i++)
                {
                        double c=v46.GetDoubleAt(i);
                        CString ss;
                        ss.Format(_T("%f"),c);
                        AfxMessageBox(ss);
                }
         }

 

发表于 2014-9-10 09:48:07

回复

使用道具 举报

yangyi3760VIP会员 VIP会员 | 显示全部楼层       最后访问IP湖南省
头衔:  TA暂未设置 
非常羡慕各位,谢谢你们的引导。我的工作是想把一个Excell工艺包,放进Aspen里面或者自己开发模块。刚开始一头雾水,看了各位的讨论,我有一些明白了。

 

发表于 2014-9-11 09:06:53

回复

使用道具 举报

bcbooo楼主 VIP会员 VIP会员 | 显示全部楼层       最后访问IP浙江省
头衔:  TA暂未设置 
yangyi3760 发表于 2014-9-11 09:06
非常羡慕各位,谢谢你们的引导。我的工作是想把一个Excell工艺包,放进Aspen里面或者自己开发模块。刚开始一 ...

无论是采用Excel还是其他方法,刚开始都不容易,需要对物流和接口的概念有很好的理解。

Excel的方法可参考:
http://amsterchem.com/excelunitop.html

VB 6.0和VC++的方法可参考:
http://www.colan.org/Download/CAPEOPENMixerSplitterExamples.1.0.4.exe

如果你的工艺包比较有意义,我可以帮忙给你开发一下。我正在做相关的工作。

 

发表于 2014-9-11 14:53:13

回复

使用道具 举报

yangyi3760VIP会员 VIP会员 | 显示全部楼层       最后访问IP湖南省
头衔:  TA暂未设置 
本帖最后由 yangyi3760 于 2014-9-13 15:26 编辑

请问各位大神,安装了CAPE-OPEN的excell后,在aspen里面没法添加物流,如图。其他模块可以添加物流,为什么呢?

 

发表于 2014-9-13 11:51:09

excell unit operation.jpg
回复

使用道具 举报

bcbooo楼主 VIP会员 VIP会员 | 显示全部楼层       最后访问IP浙江省
头衔:  TA暂未设置 
yangyi3760 发表于 2014-9-13 11:51
请问各位大神,安装了CAPE-OPEN的excell后,在aspen里面没法添加物流,如图。其他模块可以添加物流,为什么 ...

这是因为AmsterChem所提供的Excel Unit Operation热力学部分的接口版本是1.1标准,而Aspen Plus热力学部分的接口版本是1.0标准。两者不兼容。

想把Excel Unit Operation修改为1.0标准是不现实的,这些接口被封装到dll文件中了,只有AmsterChem公司有这个权限。

但是你可以在以下环境中运行Excel Unit Operation:AmsterChem的COCO,Aspen Hysys。因为这些是支持热力学接口1.1标准的。

想在Aspen Plus中运行CAPE-OPEN单元操作模块,只能采用VB 6.0,VC++,C#,Delphi,Fortran开发。(截止到说话为止,不保证AmsterChem会推出Excel Unit Operation的其他升级版,或其他人的修改版,或其他解决方案。)

还有一种折中的方案我没有试验过,请参考11楼Castro的回复内容:将COFE作为Excel Unit Operation和Aspen Plus的中间桥梁,来实现Excel Unit Operation在Aspen Plus中的运行。你可以试一试。

 

发表于 2014-9-15 10:36:18

回复

使用道具 举报

yangyi3760VIP会员 VIP会员 | 显示全部楼层       最后访问IP湖南省
头衔:  TA暂未设置 
Castro 发表于 2013-6-9 09:01
个人认为不需要开发thermodynamic version1.0的插槽,只需将Aspen Plus通过COFE调用你写的模块就写,把你 ...

“将COFE作为Excel Unit Operation和Aspen Plus的中间桥梁,来实现Excel Unit Operation在Aspen Plus中的运行。”   请问能详细介绍一下吗?

 

发表于 2014-9-15 20:11:55

回复

使用道具 举报

bcbooo楼主 VIP会员 VIP会员 | 显示全部楼层       最后访问IP浙江省
头衔:  TA暂未设置 
本帖最后由 bcbooo 于 2014-9-16 09:20 编辑
yangyi3760 发表于 2014-9-15 20:11
“将COFE作为Excel Unit Operation和Aspen Plus的中间桥梁,来实现Excel Unit Operation在Aspen Plus中的 ...

我自己试验了一下,方法如下:

(1)首先在Aspen Plus选择需要处理的组分,如图

1.jpg

(2)选择物性方法,如图

2.jpg

(3)导出为物性包,物性包的概念见CAPE-OPEN手册,如图

3.jpg

(4)在COFE中选择物性包,选择对应的Aspen Plus物性接口,如图

4.jpg

(5)选择刚刚导出的物性包“Test-1”,如图

5.jpg

(6)双击COFE中的任意流股,发现所选组分水和乙醇已经被导入了,如图

6.jpg

(7)双击模块可编辑,如图

7.jpg

以上就是COFE作为Excel Unit Operation和Aspen Plus桥梁的方法。同样的原理,还可以在Matlab、Fluent中实现。

当然,这种方法并不是在Aspen Plus中运行单元操作模块,而实际上又调用了Aspen Plus的物性数据库和物性计算方法。但是,Aspen Plus在物性接口上做了限制,有些物性是不允许进行外部模块进行调用计算的,也就是说部分功能是受限的;而且这种方法涉及到Excel、COFE、Aspen Plus三方软件,稳定性可不咋地。

 

发表于 2014-9-16 09:09:36

回复

使用道具 举报


          特别提示:

          本站系信息发布平台,仅提供信息内容存储服务。

          包括但不限于:不能公开传播或无传播权、禁止分享的出版物、涉密内容等
          不听劝告后果自负!造成平台或第三方损失的,依法追究相关责任。

          请遵守国家法规;不要散播涉爆类、涉黄毒赌类、涉及宗教、政治议题、谣言负面等信息   

     

您需要登录后才可以回帖 登录 | 注册

本版积分规则

【海川学课】
积分

财富分获取方法

[签到][参与互动][每月建设者加分]

[他人给于的评分]

海川分获取方法

[每月建设者达标后加分]

[他人给于的评分]

▲【推荐展示】 开通18840911640  
服务联系
微信关注
回到顶部

 

关于我们  -  隐私协议    -  网站声明   -  个人名片   -  企业会员   -  个人会员  -  记录统计

专家智库  -  海川市场    -  众包悬赏   -  分类信息   -  视频学课   -  在线计算  -  单位换算


海川网不良信息举报电话   0411-88254066     举报信箱   service@hcbbs.com     举报中心


客服#  18840911640【微信同号】   信箱   hcbbs.com@qq.com   【点我QQ联系海川客服】   

平台统计:        GMT+8, 2024-3-29 18:41

化海川流(hcbbs.com) @Discuz! X3 . 0.380135 second(s), 105 queries , Redis On.

辽公网安备21100302203002号  | 辽ICP备17009251号  |  辽B2证-20170197