CST-Python實(shí)例教程一:搭建 Python 環(huán)境
背景
在工程設(shè)計(jì)、求解計(jì)算的過(guò)程中,往往存在大量重復(fù)性的工作,這些工作不僅耗時(shí)耗力,而且容易出錯(cuò)。為了提高工作效率,減少人為錯(cuò)誤,我們希望這些重復(fù)性工作能夠被計(jì)算機(jī)自動(dòng)完成,從而讓工程師從繁重的重復(fù)性勞動(dòng)中解放出來(lái),將更多的精力投入到創(chuàng)造性的工作中。
腳本是一種常用的自動(dòng)化形式,它通過(guò)編寫(xiě)一系列的指令,讓計(jì)算機(jī)或程序按照既定的順序執(zhí)行這些指令,從而完成一系列的自動(dòng)化操作。
Python 是一種廣泛使用的腳本語(yǔ)言。Jupyter Notebook 是基于網(wǎng)頁(yè)的用于交互計(jì)算的應(yīng)用程序,可以以網(wǎng)頁(yè)的形式打開(kāi) Python 項(xiàng)目,在網(wǎng)頁(yè)中直接編寫(xiě)運(yùn)行腳本。
CST Studio Suite(R) 提供了 Python 編程接口,也提供了在 Python 環(huán)境中執(zhí)行 VB 腳本的接口。并且,在 CST Studio Suite 2024 中,CST Python Libraries 的特性得到了更新。通過(guò)腳本控制 CST Studio Suite,工程師可以將這些重復(fù)性的工作交給計(jì)算機(jī)自動(dòng)完成,例如編寫(xiě)相應(yīng)的算法讓計(jì)算機(jī)自動(dòng)尋找最優(yōu)解,從而大大提高求解計(jì)算的效率。
現(xiàn)在,我們將使用 Jupyter Notebook 連接到 CST Studio Suite,通過(guò)一個(gè)演示案例,完成腳本控制建立模型、查看結(jié)果等工作,并在 Python 中進(jìn)行更多自動(dòng)化任務(wù)。
內(nèi)容介紹
CST Studio Suite(R) Python Automation and Scripting 系列文章,將會(huì)為您詳細(xì)介紹使用 Jupyter Notebook 連接到 CST Studio Suite 進(jìn)行腳本控制與自動(dòng)化仿真的方方面面。
文章共分為5個(gè)部分,分別介紹以下內(nèi)容:
搭建 Python 環(huán)境
控制 CST 建模
仿真并繪制結(jié)果
仿真優(yōu)化
外部后處理
本期為第 1 篇文章,詳細(xì)介紹如何搭建 Python 測(cè)試環(huán)境。
安裝 Python
Python 版本選擇
Python 生命周期與 CST 兼容性
安裝來(lái)源
設(shè)置環(huán)境變量
驗(yàn)證 Python 是否成功安裝
安裝 Jupyter
設(shè)置下載源
安裝 Jupyter
驗(yàn)證 Jupyter Notebook 能否順利啟動(dòng)
啟動(dòng) Jupyter Notebook
加載測(cè)試文件
在 Jupyter 中運(yùn)行 Python
安裝必要的庫(kù)
檢查 CST 相關(guān)庫(kù)和接口是否正確
調(diào)用 CST Design Environment
創(chuàng)建空項(xiàng)目
查詢(xún)求解器
創(chuàng)建參數(shù)
測(cè)試環(huán)境
安裝 Python
Python 版本選擇
在 CST Studio Suite 2024 幫助頁(yè)面中標(biāo)明,支持的版本為 Python 3.6-3.11 版本。
在開(kāi)始測(cè)試之前,可以檢查計(jì)算機(jī)是否已安裝符合要求的 Python,例如在已安裝應(yīng)用列表中查閱,如未找到則需要手動(dòng)安裝 Python。
Python 生命周期與 CST 兼容性
根據(jù)Python Developer’s Guide
的信息(https://devguide.python.org/versions/#branchstatus),目前的發(fā)行的 Python 版本,狀態(tài)為security
的有 3.8-3.11 。
其中,在嘗試使用 3.11 版部署環(huán)境時(shí),安裝上述cst-studio-suite-link
包的時(shí)候,有一定概率會(huì)提示錯(cuò)誤,錯(cuò)誤信息表明cst-studio-suite-link
包要求的 Python 版本是小于 3.11。
因此,可以根據(jù)自身情況安裝 3.10 或 3.9,這里以 3.10 版本為例。
安裝來(lái)源
Python 的來(lái)源可以為 Python 官網(wǎng)和 Microsoft Store,可以根據(jù)自身情況選擇安裝途徑。
如果選擇從 Python 官網(wǎng)下載安裝:
訪(fǎng)問(wèn) Python 官網(wǎng)(https://www.Python.org/downloads/)下載并安裝 Python。
安裝過(guò)程中,確保選擇了
Add Python to PATH
選項(xiàng),以便在命令行中直接運(yùn)行 Python。根據(jù)安裝程序的指引完成安裝過(guò)程。
如果選擇從 Microsoft Store下載安裝:
打開(kāi) Microsoft Store,搜索“Python 3.10”,選擇
安裝
或下載
。Windows 系統(tǒng)會(huì)自動(dòng)在后臺(tái)下載并安裝。
手動(dòng)設(shè)置環(huán)境變量(后面會(huì)詳細(xì)介紹)。
設(shè)置環(huán)境變量
如果使用 Python 官網(wǎng)下載的安裝包安裝,并勾選了Add Python to PATH
選項(xiàng),則可以忽略該步驟。
在 Windows 系統(tǒng)中,按照以下步驟操作:
右鍵點(diǎn)擊“此電腦”或“我的電腦”,選擇“屬性”。
點(diǎn)擊“高級(jí)系統(tǒng)設(shè)置”。
在“系統(tǒng)屬性”窗口中,點(diǎn)擊“環(huán)境變量”按鈕。
在“系統(tǒng)變量”區(qū)域,找到并選擇“Path”變量,然后點(diǎn)擊“編輯”。
點(diǎn)擊“新建”,然后添加以下內(nèi)容:
C:\Users\<username>\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\Scripts
其中,
<username>
表示當(dāng)前用戶(hù)名。點(diǎn)擊“確定”保存更改,并繼續(xù)點(diǎn)擊“確定”關(guān)閉所有打開(kāi)的窗口。
可能需要重新打開(kāi) cmd 或者重新啟動(dòng)計(jì)算機(jī),以使更改生效。
驗(yàn)證 Python 是否成功安裝
打開(kāi) cmd,在命令行中輸入python
,若返回以下信息,則代表 Python 已經(jīng)成功安裝。
Python 3.10.xx ...Type "help", "copyright", "credits" or "license" for more information.
安裝 Jupyter
成功安裝 Python 后,進(jìn)一步部署 Jupyter。
設(shè)置下載源
安裝 Jupyter Notebook 之前,為了提升下載安裝的體驗(yàn),建議先手動(dòng)設(shè)置國(guó)內(nèi)的下載源。
我們推薦將下載源設(shè)置為清華大學(xué),以管理員身份打開(kāi) cmd,輸入對(duì)應(yīng)指令
python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip #升級(jí)pippip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple #將該地址設(shè)為默認(rèn)下載源
具體信息可以參考https://mirrors.tuna.tsinghua.edu.cn/help/pypi/。
安裝 Jupyter
pip install jupyter
通常而言,默認(rèn)下載源的下載速率約為 20kB/s,如果下載速率太慢,或者無(wú)法全局設(shè)置國(guó)內(nèi)的源,可以在下載時(shí)臨時(shí)使用清華的源。代碼如下:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jupyter
這時(shí)候會(huì)進(jìn)入下載與安裝界面,從命令行窗口返回的信息中可以看到,下載速率可達(dá)到 10+MB/s。
驗(yàn)證 Jupyter Notebook 能否順利啟動(dòng)
在 cmd 中輸入以下內(nèi)容(注意全是小寫(xiě))
jupyter notebook
若一切順利,會(huì)出現(xiàn)以下反饋:
cmd 窗口中顯示啟動(dòng)過(guò)程,并提示相關(guān)信息。
默認(rèn)瀏覽器會(huì)打開(kāi),并出現(xiàn) Jupyter Notebook 控制臺(tái)。
如果出現(xiàn)了問(wèn)題,可參考以下解決方案:
問(wèn)題 | 原因 | 解決方案 |
---|---|---|
cmd 窗口提示警告,存在環(huán)境變量相關(guān)內(nèi)容 | 安裝的某些腳本(例如qtpy.exe 和jupyter-console.exe )被放置在了系統(tǒng)PATH環(huán)境變量之外的目錄中。 | 添加目錄到環(huán)境變量中,或者使用完整的路徑運(yùn)行腳本。 |
cmd 窗口未報(bào)錯(cuò),但瀏覽器窗口提示提示 ERR_FILE_NOT_FOUND(未找到文件它可能已被移動(dòng)、編輯或刪除) | 添加環(huán)境變量后未重啟Jupyter服務(wù) | 關(guān)閉瀏覽器窗口與命令行窗口,嘗試重啟 Jupyter 服務(wù)。如無(wú)效則嘗試重啟計(jì)算機(jī)。 |
準(zhǔn)備工作
啟動(dòng) Jupyter Notebook
在 cmd 中輸入以下內(nèi)容(注意全是小寫(xiě))
jupyter notebook
即可進(jìn)入控制臺(tái)(即自動(dòng)打開(kāi)的瀏覽器彈窗)。
加載測(cè)試文件
在 Jupyter 控制臺(tái)的導(dǎo)航窗口中打開(kāi)待測(cè)案例的腳本文件,雙擊或者選中后點(diǎn)擊open
打開(kāi)。
隨后瀏覽器會(huì)彈出一個(gè)新的標(biāo)簽頁(yè)面打開(kāi)該文件。
在 Jupyter 中運(yùn)行 Python
如何運(yùn)行一個(gè) Jupyter Notebook 工程?我們可以查看下面這個(gè)案例:用 Python 計(jì)算π
# some python code to calculate piimport mathpi_estimate = 0.0terms_in_series = 50for k in range(terms_in_series): pi_estimate += (-1.0/3.0)**k/(2.0*k+1.0)pi_estimate = math.sqrt(12)*pi_estimateprint("Pi is approximately {0}".format(pi_estimate))
要運(yùn)行該單元格中的代碼,請(qǐng)執(zhí)行以下兩個(gè)步驟:
點(diǎn)擊單元格,以選定該單元。
同時(shí)按下鍵盤(pán)上的
SHIFT+ENTER
鍵, 或者點(diǎn)擊上方工具欄中的“”按鈕。
成功運(yùn)行后,該單元格的下行會(huì)展示運(yùn)行結(jié)果,如圖所示。
安裝必要的庫(kù)
在介紹與 CST Studio Suite 相關(guān)的特定導(dǎo)入之前,讓我們先導(dǎo)入幾個(gè)我們將要使用的通用庫(kù)。
運(yùn)行以下代碼,報(bào)錯(cuò)提示缺少庫(kù)的時(shí)候,使用pip
安裝缺少的庫(kù),直到無(wú)報(bào)錯(cuò)出現(xiàn)。
import timeimport numpy as npimport matplotlib.pyplot as pltfrom scipy.optimize import minimizeimport tempfiletmp = tempfile.gettempdir()%matplotlib notebook
使用pip
安裝庫(kù)時(shí),將報(bào)錯(cuò)的內(nèi)容(提示缺少xx庫(kù)),復(fù)制庫(kù)的名稱(chēng),替換下面命令的numpy
,然后運(yùn)行即可。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy
檢查 CST 相關(guān)庫(kù)和接口是否正確
現(xiàn)在,開(kāi)始執(zhí)行下面的代碼,加載一些 CST Python 庫(kù)。
# cst related importsimport cstimport cst.interfaceimport cst.resultsprint(cst.__file__) # should print '<PATH_TO_CST_AMD64>\python_cst_libraries\cst\__init__.py'
成功
如果成功執(zhí)行該命令,該單元格的輸出將打印庫(kù)的路徑,例如C:\Program Files (x86)\CST Studio Suite 2020\AMD64\python_cst_libraries\cst\__init__.py
在這種情況下,可以直接導(dǎo)入 CST Python 庫(kù),這是因?yàn)樵谠摻忉屍髦邪惭b了一個(gè)最小軟件包,該軟件包與實(shí)際安裝的 CST Studio Suite 相鏈接。
更多信息請(qǐng)參見(jiàn)在線(xiàn)幫助中的概述。
失敗
如果您沒(méi)有安裝該軟件包,或者添加/修改了PythonPath
系統(tǒng)環(huán)境變量(不推薦),您可以使用sys.path.append
方法來(lái)確保您的解釋器可以找到 CST Python 庫(kù)。
import syssys.path.append("C:\Program Files (x86)\CST Studio Suite 2022\AMD64\python_cst_libraries")# cst related importsimport cstimport cst.interfaceimport cst.resultsprint(cst.__file__) # should print '<PATH_TO_CST_AMD64>\python_cst_libraries\cst\__init__.py'
調(diào)用 CST Design Environment
現(xiàn)在,讓我們調(diào)用 CST Design Environment,開(kāi)始初始化“連接”。
project = cst.interface.DesignEnvironment()
執(zhí)行該代碼,打開(kāi) CST Design Environment,會(huì)出現(xiàn)提示“靜態(tài)/腳本模式已激活,彈出窗口已被阻止”彈窗,點(diǎn)擊“Swich to Interactive Mode”切換到交互模式即可。
創(chuàng)建空項(xiàng)目
然后運(yùn)行下面的單元格,創(chuàng)建一個(gè)空的 CST Microwave Studio 項(xiàng)目。
mws_project = project.new_mws()
mws_project.activate()
參數(shù)activate()
會(huì)確保我們創(chuàng)建的項(xiàng)目是當(dāng)前激活的項(xiàng)目。
在做其他事情之前,我們先將項(xiàng)目保存在當(dāng)前用戶(hù)的TEMP
文件夾中,即C:\Users\<Users>\AppData\Local\Temp
路徑。
mws_project.save(tmp+"\CST_TEST.cst")
如果提示“文件已存在”,說(shuō)明此前已經(jīng)保存過(guò)該文件到該目錄,沒(méi)有賦予文件操作相關(guān)的命令,無(wú)法覆蓋保存。
可以修改擬保存的項(xiàng)目名稱(chēng),也可以在文件管理器中訪(fǎng)問(wèn)該路徑刪除原有文件。
此外,用戶(hù)也可以根據(jù)自己的需求,將項(xiàng)目文件保存到指定的位置。
查詢(xún)求解器
作為最后的通信檢查,我們將查詢(xún)激活的 3D 求解器。請(qǐng)執(zhí)行下面的單元格并觀(guān)察輸出。
mws_project.model3d.get_active_solver_name()
然后,在 CST Microwave Studio 中更改求解器,并再次執(zhí)行該代碼。
創(chuàng)建參數(shù)
下面的單元格將用 Python 在模型中創(chuàng)建/更改一個(gè)名為offset
的參數(shù)。
mws_project.model3d.StoreDoubleParameter("offset",3)
請(qǐng)檢查該參數(shù)在項(xiàng)目參數(shù)列表中是否可見(jiàn)。
總結(jié)
在整個(gè)測(cè)試的過(guò)程中,若注意以下問(wèn)題,將會(huì)使得整個(gè)測(cè)試過(guò)程更加順利:
安裝適合的 Python 版本,并正確地添加環(huán)境變量。
將 Python 的下載源設(shè)置為國(guó)內(nèi)的源,例如清華大學(xué)。
在測(cè)試過(guò)程中,如遇到 IPython 相關(guān)的警告或報(bào)錯(cuò),可以考慮將
%matplotlib notebook
替換成%matplotlib inline
。