前言

  最近被人家問要怎麼用 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 裡面: 找出VariableExplorer

點開來裡面就是一個階層式的資料索引,所有在 AspenPlus 檔案裡面的資料都在這裡面了!我們可以在裡面找到想要的變數路徑~ DataTree

不過其實這樣慢慢找蠻累的,有些看著索引名稱還好找,但有些真的是...,還好還是有方便的功能可以幫你快速找尋路徑!首先到你想要找的 那個變數,這邊就以名為 B1 的蒸餾塔塔頂壓力為例子好了,在壓力那個數字給他複製起來: CopyVariable

再來就到你的 Variable Explorer 那邊,於階層瀏覽空白那邊隨便地方點右鍵並按下Go to Nodeclick go to node

你會發現搜尋輸入框裡面已經有東西在裡面了!但那還不是你的路徑,就先按下OK讓他去找: go_to_node_enter

哇~他除了幫你找到結果還幫你打開了階層清單呢~真是不錯~在右邊表格那邊的資訊欄中就可以得知關於 B1 塔的塔頂壓力這物件的程式相關資訊, 其中的Path to NodeCall這兩個路徑都可以在程式裡面呼叫,再來就是用這個路徑呼叫其他關於這物件的屬性了,這裡要注意, 路徑裡面的開頭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

參考資料

  1. Running Aspen via Python
  2. Aspen Plus User Guide

Comments

comments powered by Disqus