前言
最近被人家問要怎麼用 Python 把 AspenPlus 連接起來,突然想到其實我這部落格的創立就是想說寫一些 AspenPlus/Dynamics 與 Python/Fortran 連接相關的說明書這樣,不然重新去看英文的說明書其實頗累的,我英文也不好...那今天就是先來介紹怎麼用 Python 將 AspenPlus 給連接起來吧~
目錄
安裝相關程式與 packages
首先就是要先把你的 Python 與 AspenPlus 安裝起來,這我就不說了,網路上應該有很多相關的,就挑一個自己看得懂的來做即可。 如果上面的都OK了,接下來就是要安裝讓 Python 可以與各種電腦應用程式進行互動的套件——pypiwin32——,使用你的 pip 來安裝:
pip install pypiwin32
安裝好了後可以在你的 python 裡面 import 看看有沒有錯誤:
import win32com.client as win32
如果沒有什麼輸出與錯誤表示安裝成功~
用 Python 連接 AspenPlus 檔案
首先就是先匯入這個模組包,然後使用模組包的Dispatch()
函式,傳入'Apwn.Document'
值告訴 Python 你要開啟
AspenPlus 程式,如果你的電腦裡面有多種版本的 AspenPlus, 那可以傳'Apwn.Document.{version_code}'
指定你的 AspenPlus 版本,
code 與 version_code 如下:
import win32com.client as win32
aspen = win32.Dispatch('Apwn.Document') # 使用你電腦預設 AspenPlus 版本開啟
aspen2 = win32.Dispatch('Apwn.Document.36.0') # 使用 AspenPlus V10.0 開啟
↓ AspenPlus 版本與版本號的對應
版本 | 版本號 |
---|---|
V8.8 | 34.0 |
V9 | 35.0 |
V10 | 36.0 |
V11 | 37.0 |
在這邊你取的變數名稱可以說就是代表你的 AspenPlus 程式了,之後對 AspenPlus 程式的操作都要用這個變數來進行,在這裡我
取名叫做aspen。接下來操控 AspenPlus 的語法都是在 UserGuide 上 Using the Aspen Plus ActiveX Automation Server
面找得到的了~通常呼叫了 AspenPlus 軟體後就是要開啟指定檔案,UserGuide 上說InitFromArchive2(filename as String,...)
函式傳入檔案的絕對路徑就可以開啟檔案了(一定要絕對路徑喔!!不然就開不起來)就像下面的 code 這樣:
aspen.InitFromArchive2("C:\\Simulation 1.apw") # 開啟 C:\Simulation 1.apw 的檔案
可以開始用 Python 操控你的檔案了!!
在 AspenPlus 中找指定變數的路徑
檔案開啟是開啟了,但如果你要把一些值抓出來或是用 Python 輸入進去,例如抓取/設定某蒸餾塔的塔板數還是不知道怎麼辦啊,
這時候我們就必須知道那個值在 AspenPlus 程式裡的甚麼地方並且呼叫他,我們可以用 AspenPlus 裡面的 Variable Explorer找尋,
他在 AspenPlus Simulation 介面中的 Costomize 裡面:
點開來裡面就是一個階層式的資料索引,所有在 AspenPlus 檔案裡面的資料都在這裡面了!我們可以在裡面找到想要的變數路徑~
不過其實這樣慢慢找蠻累的,有些看著索引名稱還好找,但有些真的是...,還好還是有方便的功能可以幫你快速找尋路徑!首先到你想要找的
那個變數,這邊就以名為 B1 的蒸餾塔塔頂壓力為例子好了,在壓力那個數字給他複製起來:
再來就到你的 Variable Explorer 那邊,於階層瀏覽空白那邊隨便地方點右鍵並按下Go to Node:
你會發現搜尋輸入框裡面已經有東西在裡面了!但那還不是你的路徑,就先按下OK讓他去找:
哇~他除了幫你找到結果還幫你打開了階層清單呢~真是不錯~在右邊表格那邊的資訊欄中就可以得知關於 B1 塔的塔頂壓力這物件的程式相關資訊,
其中的Path to Node與Call這兩個路徑都可以在程式裡面呼叫,再來就是用這個路徑呼叫其他關於這物件的屬性了,這裡要注意,
路徑裡面的開頭Application就是我們前面建立的aspen變數。
假設現在你要得到這塔頂壓力的值是多少,從表格來看,Value屬性應該就是你的壓力值,程式就可以這樣寫:
b1_p = aspen.Tree.Data.Blocks.B1.Input.PRES1.Value
b1_p2 = aspen.Tree.FindNode(r"\Data\Blocks\B1\Input\PRES1").Value # 跟上面那行的作用是一樣的
前面的路徑只是把 Application 改成我們取名的 aspen 而已,基本上一樣,再來就是.Value來得到我們的值這樣,另外要設定這個值 也是非常簡單,就跟平常妳寫程式用=來做就好:
aspen.Tree.Data.Blocks.B1.Input.PRES1.Value = 2
aspen.Tree.FindNode(r"\Data\Blocks\B1\Input\PRES1").Value = 2 # 跟上面那行的作用是一樣的
現在我把壓力設為 2 bar 了~
完整的 code
上面的 code 為了要解說感覺有點亂,就在這邊寫一次完整的 code 吧~
目標:用 Python 連接 AspenPlus V8.8 的 Simulation 1.apw 檔案,讀取 B1 塔的塔頂壓力並將其改成 2 bar。
import win32com.client as win32 # 匯入所需模組包
aspen = win32.Dispatch('Apw.Document.34.0') # 開啟 AspenPlus V8.8 程式
aspen.InitFromArchive2('C:\\Simulation 1.apw') # 打開 C:\\Simulation 1.apw 檔案
b1_p = aspen.Tree.Data.Blocks.B1.Input.PRES1.Value # 取得 B1 塔頂壓力的值
aspen.Tree.FindNode(r"\Data\Blocks\B1\Input\PRES1").Value = 2 # 將 B1 塔頂壓力改為 2 bar
結語
以上就是一個非常簡單得如何用 Python 連接 AspenPlus 的方式,裡面其實還有很多功能與坑沒說到,功能的話大部分 UserGuiude 都會介紹到, 可以去參考參考,真的覺得 UserGuide 算是蠻重要的,可以好好的看看,那坑的話像是你要取用的屬性如 Physical Quantity 這種名子裡面有空格 該怎麼辦,這有機會就再介紹了QQ
參考資料
- Running Aspen via Python
- Aspen Plus User Guide
Comments
comments powered by Disqus