在CST STUDIO的早期版本中,便已經(jīng)支持使用腳本語(yǔ)言VBA編寫宏命令的方式控制CST進(jìn)行常見任務(wù)的自動(dòng)化。不過,隨著計(jì)算機(jī)系統(tǒng)的更新?lián)Q代,利用VBA從外部調(diào)用應(yīng)用程序的方式逐漸被別的語(yǔ)言取代,比如Python。隨著CST STUDIO 2021版本的推出[1],CST進(jìn)一步地增強(qiáng)了對(duì)Python語(yǔ)言的支持。現(xiàn)在通過Python能夠?qū)崿F(xiàn)連接CST項(xiàng)目,操作CST項(xiàng)目的歷史列表,在CST中運(yùn)行宏命令,讀取CST項(xiàng)目的仿真結(jié)果等功能。支持Python版本為3.6,3.7,3.8[2]。
圖 1. 二次開發(fā)的程序結(jié)構(gòu)
用Python語(yǔ)言來進(jìn)行CST二次開發(fā)的主要思路如圖1所示。用戶通過用戶界面和模型前處理程序?qū)⒛P蛿?shù)據(jù)和仿真所需的設(shè)置參數(shù)(如仿真頻率范圍,網(wǎng)格密度等)提供給CST控制程序。在CST完成仿真之后,控制程序讀取仿真結(jié)果并將之傳遞給后處理程序。利用傳統(tǒng)的優(yōu)化算法或者機(jī)器學(xué)習(xí),不斷地迭代仿真,從而達(dá)到改善產(chǎn)品性能,優(yōu)化產(chǎn)品設(shè)計(jì)
的目的。
Python是目前最受歡迎的編程語(yǔ)言之一。利用Python編程的CST控制程序可以被很方便地移植到各種平臺(tái),或者被別的編程語(yǔ)言調(diào)用。常見的是在網(wǎng)頁(yè)或者本地窗口上為用戶提
供設(shè)置參數(shù)的界面,將設(shè)置參數(shù)保存到數(shù)據(jù)文件或者數(shù)據(jù)庫(kù),再調(diào)用Python控制流程來進(jìn)
行仿真。用戶界面編寫所用的語(yǔ)言可以使用Python語(yǔ)言本身或者別的編程語(yǔ)言,比如C或者Java,只要能調(diào)用Python函數(shù)均可。這樣便可以將設(shè)計(jì)流程封裝成軟件或者網(wǎng)頁(yè),集成到更大的設(shè)計(jì)平臺(tái)中,比如達(dá)索公司的3DEXPERIENCE平臺(tái)[3]。在仿真結(jié)果后處理方面,Python語(yǔ)言更是有著完善的優(yōu)化算法與機(jī)器學(xué)習(xí)的函數(shù)庫(kù),在數(shù)據(jù)處理相關(guān)領(lǐng)域有著大量的成熟案例[4]。利用后處理程序和控制程序的交互,可以實(shí)現(xiàn)從“仿真”到“優(yōu)化”的反復(fù)迭代過程,或者用于訓(xùn)練機(jī)器學(xué)習(xí)網(wǎng)絡(luò)。比如在文章[5]利用CST優(yōu)化天線布局,文章[6]利用CST進(jìn)行可穿戴天線的優(yōu)化設(shè)計(jì),文章[7]利用CST和集成學(xué)習(xí)實(shí)現(xiàn)對(duì)電纜布線控制點(diǎn)的優(yōu)化。而且Python還有標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)接口支持大部分的主流數(shù)據(jù)庫(kù)。
而核心的CST控制程序的具體流程如圖2所示。獲取CST項(xiàng)目是指利用Python庫(kù)函數(shù)創(chuàng)建,打開或連接CST項(xiàng)目。整個(gè)流程均由Python語(yǔ)言實(shí)現(xiàn),而具體的宏命令則由VBA語(yǔ)言構(gòu)成。對(duì)于原本具有完善的宏命令的功能模塊(圖3所列出的),只需要使用Python控制CST項(xiàng)目運(yùn)行宏命令就可以實(shí)現(xiàn)對(duì)應(yīng)的功能。而對(duì)于CST PCB Studio等功能模塊,CST提供了使用Python直接控制的方法,流程與圖2類似,不過運(yùn)行宏命令變?yōu)檫\(yùn)行Python函數(shù)。
圖 2. 支持宏命令的功能模塊的 Python 控制流程
圖 3. 支持宏命令的功能模塊
圖 4. CST 用戶界面
2. 宏命令的生成
在了解基于Python的二次開發(fā)之前,首先要知道如何編寫宏命令。圖4為CST STUDIO2021的用戶界面,宏命令相關(guān)的功能(Macros)包含在如圖4中紫框所示的按鈕中。在Macros里能夠直接運(yùn)行宏代碼文件(后綴為.mcr或者.mcs),或者打開CST的宏編輯器進(jìn)行宏命令的編輯和調(diào)試。CST的宏命令由VBA語(yǔ)言編寫而成。詳細(xì)CST的宏命令可以參考幫助文件的《Automation and Scripting | Visual Basic (VBA)》目錄下的信息。除此之外,CST還提供了一種生成宏命令的簡(jiǎn)易方法。
在CST Microwave Studio或者其他支持建模器的模塊,即具有“3D”界面的模塊,均有一個(gè)歷史列表功能(History List),如圖4中的黑框所示。CST會(huì)記錄執(zhí)行仿真的過程中所有重要的動(dòng)作,并以VBA宏命令的方式保存在這個(gè)列表中。所以,我們只要在CST中執(zhí)行一遍要做的命令,在歷史列表中就會(huì)記錄下對(duì)應(yīng)的宏命令。比如圖5中,左邊是創(chuàng)建一個(gè)方塊時(shí)參數(shù)設(shè)置窗口,右邊是創(chuàng)建方塊之后歷史列表里對(duì)應(yīng)生成的宏命令。在Edit HistoryList Item窗口中,宏命令里的Brick的每個(gè)屬性都可以和左邊的參數(shù)一一對(duì)應(yīng)。如果修改了宏命令的參數(shù),CST項(xiàng)目也會(huì)跟著做出變化。通過這種方式,我們可以快速地生成想要的宏命令。
圖 5. 創(chuàng)建方塊
3. 利用 Python 控制 CST
在CST STUDIO 2021版本中一共提供了三個(gè)Python庫(kù)用于控制CST?!癱st.interface”中包含了從獲取CST項(xiàng)目到開始仿真的所有功能?!癱st.result”提供了直接讀取0D/1D仿真結(jié)果所需的接口。PCB仿真相關(guān)的控制命令則在“cst.eda”里,本文中不會(huì)涉及。
3.1 從獲取 CST 項(xiàng)目到開始仿真
在“cst.interface”中,將CST各個(gè)界面定義為不同的類,它們的包含關(guān)系如圖6所示。其中整個(gè)CST的用戶界面對(duì)應(yīng)被稱為“DesignEnvironment”的類,即設(shè)計(jì)環(huán)境。這個(gè)類提供CST主前端的接口,允許連接和打開新的設(shè)計(jì)環(huán)境實(shí)例,允許打開或創(chuàng)建CST項(xiàng)目。在界面中具體的一個(gè)個(gè)仿真項(xiàng)目對(duì)應(yīng)被稱為“Project”的類,即項(xiàng)目。這個(gè)類提供CST項(xiàng)目的實(shí)時(shí)接口,提供保存和關(guān)閉項(xiàng)目的功能。而一個(gè)“Project”的類中包含“Modeler”和“Schematic”兩個(gè)子類,分別對(duì)應(yīng)CST界面中的“3D”界面和“Schematic”界面,如圖4中的紅框和綠框,即建模器和原理圖兩個(gè)子模塊。
圖 6. cst.interface 庫(kù)中類的包含關(guān)系
利用“DesignEnvironment”類中提供的函數(shù)如connect_to_any_or_new(連接到任何現(xiàn)有設(shè)計(jì)環(huán)境,如果沒有打開設(shè)計(jì)環(huán)境,則打開一個(gè)新的設(shè)計(jì)環(huán)境),open_project(打開指定路徑給出的項(xiàng)目),get_open_projects(以實(shí)例列表的形式連接當(dāng)前打開項(xiàng)目的列表)等,可以實(shí)現(xiàn)新建仿真項(xiàng)目,打開仿真項(xiàng)目或者連接已經(jīng)打開的仿真項(xiàng)目,即實(shí)現(xiàn)獲取CST項(xiàng)目。在獲取到的CST項(xiàng)目實(shí)例的子類“Modeler”與“Schematic”中就可以運(yùn)行宏命令和開始仿真了。要注意的是,“Modeler”與“Schematic”中運(yùn)行宏命令和開始仿真的方式有所不同。在“Modeler”中,我們通過操作歷史樹的方式控制CST。
比如,add_to_history函數(shù)可以直接往歷史列表中直接添加宏命令。并且可以使用run_solver或者start_solver函數(shù)直接開始仿真。不過,目前CST還不支持刪除歷史列表中歷史步驟。另一方面,由于“Schematic”界面沒有歷史列表功能,所以只能使用execute_vba_code運(yùn)行宏命令,并且只能通過宏命令來運(yùn)行原理圖界面中對(duì)應(yīng)的仿真。常用的函數(shù)如表1。
表 1. cst.interface 庫(kù)中的常用函數(shù)
由于Python函數(shù)中調(diào)用的宏命令是以字符串的形式存在的,所以可以很方便地利用Python自帶的函數(shù)進(jìn)行編輯。這里分享一個(gè)小技巧,可以將事先編寫好的宏命令保存成模板文件。將需要編輯修改的參數(shù)用關(guān)鍵詞進(jìn)行替換。之后,當(dāng)需要運(yùn)行某個(gè)宏命令時(shí),只需要以字符串的形式讀取對(duì)應(yīng)模板文件,用Python中的變量值替換模板中的關(guān)鍵詞,然后就可以用函數(shù)調(diào)用這個(gè)字符串。這種方法也適用于將多個(gè)宏命令拼接在一起執(zhí)行。
3.2 讀取仿真結(jié)果
讀取CST項(xiàng)目仿真結(jié)果的方法有兩種。一種是利用宏命令的接口訪問仿真結(jié)果,再導(dǎo)出為文本文件供Python程序讀取。這種方法可以訪問到包括2D和3D的大部分仿真結(jié)果,但是非常繁瑣,不夠靈活。另一種是利用“cst.result”直接讀取仿真結(jié)果。這種方法只能讀取到CST項(xiàng)目文件的0D和1D結(jié)果,如點(diǎn)數(shù)據(jù)和一維結(jié)果曲線。不過這一方法在大多數(shù)情況下已經(jīng)夠用。
與“cst.interface”庫(kù)不同的是,只需要得到CST項(xiàng)目文件的路徑,“cst.result”庫(kù)直接讀取該項(xiàng)目,獲得仿真結(jié)果,不需要打開CST用戶界面?!癱st.result”庫(kù)中類的包含關(guān)系如圖7所示。通過庫(kù)中的ProjectFile類,可以創(chuàng)建出CST項(xiàng)目結(jié)果的實(shí)例。利用類中的get_3d和get_schematic函數(shù)可以分別獲得CST項(xiàng)目的“3D”與“Schematic”界面中的仿真結(jié)果,創(chuàng)建對(duì)應(yīng)的“ResultModule”類。如果想要讀取圖4中藍(lán)框所示的仿真項(xiàng)目參數(shù)列表ParameterList可以使用“ResultModule”類中的get_parameter_combination函數(shù)。
而這個(gè)類中包含的get_tree_items函數(shù)則可以返回圖4中橙框所示的仿真結(jié)果的列表,列表中是仿真結(jié)果的路徑。將想要結(jié)果的路徑傳遞給get_result_item函數(shù)可以返回該結(jié)果生成的“ResultItem”實(shí)例。實(shí)例中包含了仿真數(shù)據(jù)和采樣點(diǎn)數(shù)等仿真結(jié)果的關(guān)鍵信息。對(duì)于利用了優(yōu)化功能進(jìn)行仿真的項(xiàng)目,有多組的“ResultModule”,用run_id來進(jìn)行區(qū)分
圖 7. cst.result 庫(kù)中類的包含關(guān)系
常用的函數(shù)如表 2。
表 2 cst.result 庫(kù)中的常用函數(shù)
4. 總結(jié)
達(dá)索公司在CST STUDIO 2021中提供了更加完善的Python庫(kù),用于實(shí)現(xiàn)CST的自動(dòng)化
和腳本化。得益于Python語(yǔ)言的兼容性,基于Python語(yǔ)言開發(fā)的CST控制程序可以快速地移植到各種平臺(tái)。而豐富的數(shù)據(jù)處理Python庫(kù)能夠很好地實(shí)現(xiàn)各種后處理功能。核心的CST控制程序利用“cst.interface”庫(kù)中的函數(shù)實(shí)現(xiàn)創(chuàng)建或打開CST項(xiàng)目,然后通過運(yùn)行宏命令的方式間接地控制CST項(xiàng)目。并且利用“cst.result”庫(kù)中的函數(shù),控制程序可以直接讀取0D和1D的仿真結(jié)果??梢哉f,目前CST已具備了用Python語(yǔ)言進(jìn)行二次開發(fā)的條件。
不過,由于核心控制程序依然要通過宏命令來控制大部分的CST功能,開發(fā)人員不但要對(duì)CST和Python語(yǔ)言相當(dāng)熟悉,還需要對(duì)VBA語(yǔ)言有所了解,有一定開發(fā)門檻。
資料來源:達(dá)索官方
[行業(yè)資訊] SIMULIA電磁仿真線上技術(shù)匯:助力EMC電磁兼容設(shè)計(jì)
2025-03-14
[行業(yè)資訊] 達(dá)索系統(tǒng) SIMULIA Modeling Contact
2025-03-14
[行業(yè)資訊] 上課啦!達(dá)索系統(tǒng) SIMULIA XFlow基礎(chǔ)應(yīng)用技術(shù)論
2025-03-14
[ABAQUS] 采用 Hyperworks、abaqus 對(duì)扭轉(zhuǎn)梁后懸架的
2025-03-14
[ABAQUS] Abaqus在噴油嘴過盈裝配過程分析中的應(yīng)用
2025-03-14
[ABAQUS] 基于Abaqus的傳動(dòng)軸支架連接凸臺(tái)斷裂分析及優(yōu)化
2025-03-14
[ABAQUS] 結(jié)合 DFSS 和 Abaqus 的主軸承蓋設(shè)計(jì)優(yōu)化
2025-03-13
[ABAQUS] 基于Abaqus的牛圈湖天然裂縫數(shù)值計(jì)算
2025-03-13
[ABAQUS] Abaqus對(duì)某車型備胎盆屈曲的有限元分析
2025-03-13
[ABAQUS] 基于 Abaqus 的復(fù)材圓管芯材剪切性能分析
2025-03-12
2023-08-24
[ABAQUS] ABAQUS如何建模?ABAQUS有限元分析教程
2023-07-07
[ABAQUS] abaqus單位設(shè)置【使用教程】
2023-08-29
[ABAQUS] 有限元分析軟件abaqus單位在哪設(shè)置?【操作教程】
2023-09-05
[ABAQUS] abaqus里面s11、s12和u1、u2是什么意思?s和
2023-08-30
[ABAQUS] Abaqus單位對(duì)應(yīng)關(guān)系及參數(shù)介紹-Abaqus軟件
2023-11-20
[ABAQUS] Abaqus怎么撤回上一步操作?Abauqs教程
2024-05-01
[ABAQUS] ABAQUS軟件教程|場(chǎng)變量輸出歷史變量輸出
2023-07-18
[ABAQUS] ABAQUS軟件中Interaction功能模塊中的綁定接
2023-07-19
[ABAQUS] 如何準(zhǔn)確的評(píng)估真實(shí)行駛工況條件下的空氣動(dòng)力學(xué)性能
2020-11-19
[行業(yè)資訊] SIMULIA電磁仿真線上技術(shù)匯:助力EMC電磁兼容設(shè)計(jì)
2025-03-14
[行業(yè)資訊] 達(dá)索系統(tǒng) SIMULIA Modeling Contact
2025-03-14
[行業(yè)資訊] 上課啦!達(dá)索系統(tǒng) SIMULIA XFlow基礎(chǔ)應(yīng)用技術(shù)論
2025-03-14
[有限元知識(shí)] fe-safe風(fēng)笛安裝支架隨機(jī)振動(dòng)疲勞分析及優(yōu)化
2025-03-06
[有限元知識(shí)] 達(dá)索系統(tǒng)SIMULIA 2025 新功能介紹(下)
2025-03-06
[有限元知識(shí)] SIMPACK對(duì)50m長(zhǎng)鋼軌非洲某國(guó)鐵路運(yùn)輸車輛動(dòng)力學(xué)仿真
2025-03-04
[行業(yè)資訊] 達(dá)索系統(tǒng)SIMULIA 2025 新功能直通車|Simpa
2025-02-26
[有限元知識(shí)] 流體動(dòng)力學(xué)(CFD)優(yōu)化電動(dòng)車輛的電池范圍和熱舒適性
2025-02-25
[有限元知識(shí)] 利用SIMULIA在?3DEXPERIENCE? plat
2025-02-25
[有限元知識(shí)] 基于 ISIGHT 軟件某架構(gòu)下白車身輕量化分析
2025-02-24