摘要:
大家在科研和工作中,往往會遇到如何在CST中構(gòu)建人工重復(fù)性高、建模步驟繁瑣的模型,以及多次導(dǎo)出仿真結(jié)果數(shù)據(jù)等問題。和HFSS的vbs腳本一樣,CST也自帶VBA腳本控制,并支持MATLAB調(diào)用。
0 1 CST的VBA語言
在CST主界面按F1即可打開官方自帶的Help文檔。
對于微波專業(yè)的學(xué)生和科研從業(yè)者,大部分情況下選用的是CST的MICROWAVE STUDIO (MWS)。因此,查看學(xué)習(xí)CST MWS VBA語法和對象即可滿足日常學(xué)習(xí)、工作需求。
點(diǎn)擊Hom?e:Macros>Open VBA Macro Editor,即可打開CST自帶的VBA開發(fā)環(huán)境。
復(fù)制粘貼MsgBox行的代碼到VBA編輯器中,點(diǎn)擊即可彈出信息提示框。(全部復(fù)制可能會報錯!親測!)
'#Language "WWB-COM" Option Explicit Sub Main MsgBox("Hello World") EndSub
對于初學(xué)者而言,若要熟練使用VBA開發(fā)環(huán)境對CST進(jìn)行代碼式建模開發(fā),還需要掌握兩方面知識:VBA語言的基本語法規(guī)則和CST的Objects調(diào)用規(guī)則。
前者可以在VBA開發(fā)環(huán)境下按F1鍵,調(diào)出Help文檔。
官方幫助文檔是學(xué)習(xí)VBA基本語法規(guī)則的一大利器,不需要從頭到尾都學(xué)一遍??梢员羞厡W(xué)邊用的方法,活學(xué)活用。不過學(xué)習(xí)常用的變量定義、數(shù)組、循環(huán)、判斷、字符等最基礎(chǔ)的知識是很有必要的。
有了語法基礎(chǔ)后,就需要根據(jù)自己的學(xué)習(xí)工作需求,去VBA Objects下找自己需要對象的調(diào)用規(guī)則。例如下圖所示的Brick對象的一個構(gòu)建。該對象有Reset、Name、Component、Material、Xrange、Yrange、Zrange、Create這么幾個方法。
根據(jù)Help文檔的講解,我們在VBA開發(fā)環(huán)境中復(fù)制下面6-15行的代碼到Sub Main代碼塊內(nèi),點(diǎn)擊運(yùn)行即可在CST中建立一個矩形實(shí)體。(全部復(fù)制可能會報錯!親測?。?/p>
'#Language "WWB-COM" OptionExplicit Sub Main With Brick .Reset .Name ("brick1") .Component ("component1") .Material ("PEC") .Xrange (0, 1) .Yrange (0, 3) .Zrange (0, 5) .Create End With End Sub
不過這種建模方法有一個缺點(diǎn):和HFSS的自動化建模只有vbs代碼一樣,建立的模型在CST的History List沒有記錄,喪失了CST建模的一大利器!
好在可以打開CST官方Macro文件進(jìn)行參考,比如自帶的Dipole Antenna這個mcs文件。經(jīng)過對比,不難發(fā)現(xiàn),只需要將前面的代碼變成字符串形式,通過AddToHistory即可將建模代碼添加至History List。
依葫蘆畫瓢,Sub Main和End Sub之間的代碼替換如下,執(zhí)行VBA命令后即可在History List下找到本次建模的詳細(xì)代碼:
Dim sCommand As String '@ define brick1 sCommand = "" sCommand = sCommand + "With Brick " + vbLf sCommand = sCommand + " .Reset" + vbLf sCommand = sCommand + " .Name (""brick1"")" + vbLf sCommand = sCommand + " .Component (""component1"")" + vbLf sCommand = sCommand + " .Material (""PEC"")" + vbLf sCommand = sCommand + " .Xrange (0, 1)" + vbLf sCommand = sCommand + " .Yrange (0, 3)" + vbLf sCommand = sCommand + " .Zrange (0, 5)" + vbLf sCommand = sCommand + " .Create" + vbLf sCommand = sCommand + "End With" + vbLf MsgBox(sCommand) AddToHistory "define brick1", sCommand
0 2 MATLAB調(diào)用CST
MATLAB調(diào)用CST有兩種方法,一種是通過Shell語言的轉(zhuǎn)移字符!。
例如已經(jīng)編寫好了待執(zhí)行的vba腳本,文件類型命名為.bas(其他類型文件,比如.mcr,可能不會被識別)。然后按下面的語法結(jié)構(gòu),修改CST安裝路徑和bas文件路徑即可調(diào)用成功。這種方法和通過hfssapi包編寫好相應(yīng)的vbs腳本文件,再用MATLAB調(diào)用HFSS執(zhí)行vbs腳本命令類似。不過這種方法在嘗試調(diào)用高版本CST2022時,會因為采用了批處理(Batch)腳本調(diào)用而需要手動確認(rèn)license的現(xiàn)象。
! "D:softwareCST2018CST DESIGN ENVIRONMENT.exe" -m E:test.bas
另一種方法則是通過matlab actxserver創(chuàng)建一個COM服務(wù)器,通過invoke調(diào)用COM對象或接口上的方法。
%如果裝了2個CST,不管怎么切換license,其只會創(chuàng)建最新安裝的cst對象! cst = actxserver('CSTStudio.application');%創(chuàng)建CST應(yīng)用對象 mws = invoke(cst, 'NewMWS');%調(diào)用MWS應(yīng)用對象 app = invoke(mws, 'GetApplicationName');%獲取當(dāng)前應(yīng)用名稱 ver = invoke(mws, 'GetApplicationVersion');%獲取當(dāng)前應(yīng)用版本號 invoke(mws, 'FileNew');%新建一個CST文件 filename='D:CSTFileDipole_model.cst'; invoke(mws, 'SaveAs', filename,'True'); invoke(mws, 'Quit'); release(mws); release(cst);
就通用性而言,第二種方法較優(yōu)。網(wǎng)上也有很多關(guān)于這方面的代碼可供參考,個人可以根據(jù)需求將代碼進(jìn)行封裝,便于后續(xù)的傳參調(diào)用。
實(shí)例展示
審核編輯 :李倩
-
matlab
+關(guān)注
關(guān)注
182文章
2960瀏覽量
230050 -
CST
+關(guān)注
關(guān)注
7文章
62瀏覽量
17687
原文標(biāo)題:CST的VBA語言 & MATLAB調(diào)用CST
文章出處:【微信號:射頻學(xué)堂,微信公眾號:射頻學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論