2021年7月19日 星期一

如何輸出訊息與清除訊息

程式執行過程可以輸出訊息到AEDT Message Manager來顯示進度或是錯誤等。以下程式碼可以將資料寫到Message Manager,最後並清除訊息。有趣的是,可以透過odesktop呼叫到AEDT的內建API做全域訊息清除。

# -*- coding: utf-8 -*-
import pyaedt

#%% 1
desktop = pyaedt.Desktop()
hfss = pyaedt.Hfss('test_project', 'test_design')

#%% 2
x = hfss.messenger

x.add_info_message('info message!')
x.add_warning_message('warning message!')
x.add_error_message('error message!')

for mtype in [0, 1, 2]:
x.add_message(mtype, str('Test!'), 'Global')

#%% 3
x.clear_messages(level=3)

#%% 4
odesktop = hfss.odesktop
odesktop.ClearMessages("", "", 2)



PyAEDT的編程流程

用PyAEDT寫程式的流程跟一般程式開發很不相同,更接近交互式的體驗。開發者可以邊添加程式碼,邊觀察AEDT的對應變化。比方說,使用者下了一行指令建立新的專案與設計,並執行程式,此時便可以看到新的專案連同設計加入AEDT當中。這時候我可以再回到編輯器,加入新的區段,並在區段內,在該設計當中加入新的變數,此時單獨執行該區段內的程式碼,便可以看到該變數加入到設計當中。

過往的AEDT程式設計,執行程式需重頭跑到尾。如果程式前面存在耗時的操作,每一次除錯便必須等待耗時的操作完成,這對開發人員是一種煎熬。PyAEDT搭配編輯器的區塊執行功能很大幅度的緩解了大型程式開發的痛苦,我們可以逐步擴充程式。如果有必要,甚至還可以跳回到之前區段修改某些條件,再回到最後的區段繼續執行。比方說程式寫到後面發現材料屬性忘了修改,我們可以回到前面區段加入並執行材料屬性修改的程式碼,還可以在AEDT環境當中確認修改是否正確,再回到最後一段繼續開發即可。

剛開始接觸PyAEDT的時候,由於PyAEDT指令無法透過錄製來建立,我認為PyAEDT的開發必然相對耗時。但是自己動手做了一些操作之後,我開始對PyAEDT的編程有了不同的想法。這種互動式自動化編程可以小範圍修改並測試,再加上編輯器可以支援智能感知(Intellisense)來方便使用者選出適當的物件方法,這都會縮短程式開發的過程。




PyAEDT的範例與說明文檔

在PyAEDT官方頁面上可以找到許多的範例可供參考:https://aedtdocs.pyansys.com/examples/index.html

點進去之後,除了範例的說明,底下還有完整的Python檔可以下載。在IDE當中開啟該.py檔之後便可以執行並觀察執行結果。這是一個很好入門PyAEDT的方式。


當稍微熟悉PyAEDT之後,可以參考API文件來了解PyAEDT更完整的功能,API說明連結:

https://aedtdocs.pyansys.com/API/index.html



PyAEDT 安裝與安裝測試

由於PyAEDT是運行在CPython環境當中,我們可以配置一個整合設計環境(IDE)來方便自動化程式的開發。我建議可以下載安裝Spyder或PyCharm等IDE環境,搭配Python版本為3.8。注意該台電腦必須安裝AEDT軟體(2021版之後)並有相關的license。簡單來說,要開發HFSS自動化程式,需有HFSS license才行。

在完成IDE的安裝之後,接下來可以透過pip來安裝PyAEDT。首先找到Python的安裝路徑,並在Scripts目錄當中找到pip.exe這一支程式。開啟命令列視窗並輸入.\pip install pyaedt,這時候便會自動連上PyPI網站下載並安裝PyAEDT了,時間約莫兩到三分鐘。關於安裝請參考:https://aedtdocs.pyansys.com/Resources/Installation.html#

完成PyAEDT的安裝之後,便可以打開IDE執行測試。筆者所使用的IDE是Spyder。開啟Spyder編輯器,並輸入以下程式碼,按下執行鍵之後。如果右下角視窗出現如下圖所示的訊息,代表PyAEDT成功安裝。接下來我們便可以在IDE當中進行自動化編程的工作。


PyAEDT基本介紹

PyAEDT是Python的包(Package),由ANSYS官方於2021年正式釋出,可以透過pip從PyPI網站下載。官方網站連結:https://pypi.org/project/pyaedt/。是一組用來支援AEDT模擬自動化的函式庫,可以支援AEDT全系列產品,包括HFSS, Q3D, Maxwell, Icepak, Circuit, Simplorer等等。

透過PyAEDT,使用者可以利用程式碼完成模擬前的設定及模擬後的資料處理等繁複的工作。與AEDT現行內建的自動化流程相比,最大的特色是PyAEDT支援Cpython。所以可以在Cpython3.8環境安裝PyAEDT,並用一般的IDE(整合設計環境)來編寫並支援除錯,關鍵字提醒等功能。也可以輕鬆整合Scipy, NumPy, Matplotlib等函式庫。

相較現有自動化流程,PyAEDT語法精煉許多,相容PEP8的語法規範,因此程式碼可以縮短很多。可惜現階段不支援錄製功能。另外,因為發展時間還不長,所以涵蓋功能尚不及現行AEDT內建的API,仍需要時間來完善,以下是PyAEDT與現行自動化流程的差異,給各位參考:

Why PyAEDT?

A quick and easy approach for automating a simple operation in the AEDT UI is to record and reuse a scripts. However, disadvantages of this approach are:

  • Recorded code is dirty and difficult to read and understand.
  • Recorded scripts are difficult to reuse and adapt.
  • Complex coding is required by many global users of AEDT.

The main advantages of PyAEDT are:

  • Automatic initialization of all AEDT objects, such as desktop objects like the editor, boundaries, and so on
  • Error management
  • Log management
  • Variable management
  • Compatibility with IronPython and CPython
  • Simplification of complex API syntax using data objects while maintaining PEP8 compliance.
  • Code reusability across different solvers
  • Clear documentation on functions and API
  • Unit tests of code to increase quality across different AEDT versions

EDB建立PinGroup

為U2A5建立GND PinGroup,儲存之後匯入EDB from pyaedt import Edb edb = Edb(edbpath= r"D:\demo\Galileo_G87173_20454.aedb" , edbversion= '20...