CST進階之路:第一節(jié) MATLAB—CST聯(lián)合仿真之入門
微波仿真論壇 公眾號 原創(chuàng)投稿 掃碼閱讀
作者簡介
內(nèi)容安排及教程代碼獲取
CST進階之路:第一節(jié) MATLAB—CST聯(lián)合仿真之入門
1. 前言
近幾年,經(jīng)常查閱文獻的科研人員會發(fā)現(xiàn),我國學(xué)者發(fā)表在天線與電波傳播領(lǐng)域的高水平期刊論文越來越多,從文獻的內(nèi)容也可以看出天線設(shè)計與電波傳播的分析水平也越來越高,不過很大一部分都借助了全波仿真軟件工具來驗證設(shè)計方法和結(jié)果,通常我們采用的主流仿真軟件基本都是國外的,如圖1所示,其中HFSS已被Ansys收購,CST已被達索收購。
1 國外主流的電磁仿真軟件
全波仿真工作需要一定的專業(yè)知識和良好的精力和體力儲備,從我們的科研力量組織構(gòu)成來看,一般干底層仿真活的主力基本都是碩士和博士。由于社會生產(chǎn)力迅猛發(fā)展導(dǎo)致專業(yè)人才缺口大,目前的現(xiàn)狀是研究生的培養(yǎng)規(guī)模大、時間短、任務(wù)重,尤其是物質(zhì)保障與社會經(jīng)濟的發(fā)展有點脫節(jié),導(dǎo)致大多數(shù)研究生為了生計而不得不出賣勞動力,因此他們沒有太多精力投入到各種仿真軟件的摸索和學(xué)習(xí)中,從而浪費了大量的時間在笨拙的建模方式和結(jié)果處理上。所以,對于一線的天線研究人員來說,專心用好一款仿真軟件,減少在軟件上的摸索時間,提高設(shè)計效率,為其他創(chuàng)造性的科研活動騰出時間就顯得尤為重要了。
鑒于此,我決定將一些能提高天線設(shè)計效率的軟件操作方法分享出來,因為我在科研中用到的一些方法和技巧幫我節(jié)約了大量時間,以至于能把更多精力放在別的更加有用的地方,比如寫了這篇教程。
在發(fā)表此詳細教程之前,我已于2016年底在微波仿真論壇:
http://bbs.rfeda.cn/read.php?tid=106664
和CST中國官方論壇:
http://www.cst-china.cn/forum.php?mod=viewthread&tid=2451
發(fā)過一篇名為“【干貨福利之代碼共享】MATLAB控制CST進行建模仿真”的帖子,我記得當時就花一個多小時隨便寫了一個小DEMO上傳。但是令我驚訝的是,兩年來這篇帖子長期霸占CST板塊的熱帖,累計瀏覽量過萬,不過下載量只有幾百,后來我發(fā)現(xiàn)很多人是沒有權(quán)限無法回復(fù)或者懶得回復(fù)而不能下載。此外,在這兩年里還有大量的人發(fā)站內(nèi)信請我發(fā)代碼給他們,也有人提出了很多操作層面問題和我交流。
事實上,據(jù)我了解,國內(nèi)很多厲害的重點實驗室在MATLAB與CST聯(lián)合仿真方面上已經(jīng)有了大量積累,但是網(wǎng)上卻很難見到相關(guān)內(nèi)容的分享。這兩年來關(guān)于MATLAB控制CST的操作我也時不時摸索一下,其實還有很多問題沒有解決好。但是我深知任何事情都不要等準備完美再去做,只有邊做邊迭代才能收斂到理想的狀態(tài),所以我決定將一些還不是很完善的操作方法和技巧與大家分享,也歡迎大家多提意見幫忙一起迭代。
2. 入門基礎(chǔ)
說到編程語言,我想理工科的本科生都學(xué)習(xí)過C語言,大多數(shù)也選修過MATLAB,當然這幾年火遍全球的Python語言也是勢不可擋。但由于MATLAB非常容易上手且網(wǎng)上隨手一搜就有答案的特性,我覺得研究一下MATLAB控制CST的方法是很有必要的。在此之前我都是用CST自帶的VBA編程,或者用Visual Basic編程來控制,后來發(fā)現(xiàn)用起來挺麻煩的、也很費時。可能是我不是很熟悉Basic語言的原因,我始終覺得用VBA很不方便,就在網(wǎng)上查找關(guān)于用MATLAB控制CST的方法,終于在一個國外的論壇找到了利用invoke()函數(shù)調(diào)用控件的方法,之后又查到了CST的官方說明文件。掌握MATLAB和CST聯(lián)調(diào)的初級使用方法后,我就開始基于科研中的一些實際問題研究各種操作方法與技巧,后來發(fā)現(xiàn)很多技巧在科研中幫助還挺大。
下面就開始介紹怎么用MATLAB來控制CST軟件,不過在此之前,建議大家優(yōu)先看一下CST的官方文件,下載地址:
https://share.weiyun.com/51zMlKR
提取密碼:
0o1yx6
假如你一看到英文就頭疼,那就看下面的入門吧。
首先大家想到的就是怎么讓MATLAB連接到CST,只有抓住了它,才能控制它。很顯然這就必須要CST公司提供控件的接口,就是下面這行命令:
復(fù)制代碼
- [size=2][size=2]cst =actxserver('CSTStudio.application')[/size][/size]
其中“cst”可以是任意的合法變量名,給它賦值后它就成為了一個句柄類型的變量(handle)。
接下來就要新建一個CST工程或者打開一個CST工程了。
復(fù)制代碼
- [font=宋體] [/font][size=2]mws = invoke(cst, 'NewMWS')[/size]
- [size=2] invoke(mws, 'OpenFile',‘filename.cst');[/size]
新建一個工程之后,我們先不著急設(shè)置環(huán)境參數(shù),為幫大家弄明白這個MATLAB的代碼是怎么來的,先來看如表1所示的對比。
表1 VBA代碼和MATLAB代碼一一對應(yīng)
左邊一列是CST中比較典型的一段建立立方體的代碼,假如你從來沒有看到過這段代碼,請在CST里面隨便畫一個立方體,然后打開歷史樹,雙擊建立立方體的那段命令,就會得到其詳細的代碼,請看下圖。
2 歷史樹列表
這段代碼就是一段典型的VBA命令,學(xué)習(xí)過編程語言且有基本編程思想的人應(yīng)該都能明白這段代碼的意思,我就不贅述了。為了能在MATLAB里面實現(xiàn)對CST的控制與操作,我們的基本思路就是要將這段代碼翻譯成MATLAB能執(zhí)行的命令,如表1中右邊一列所示。這樣一對比是不是感覺清晰明了。但是肯定有人發(fā)現(xiàn)有些操作在CST的歷史樹里面是看不到的,那么請在CST界面按F1進入幫助,如下圖所示,你就能夠看到幾乎所有可供操作的VBA命令,而留給我們做的就是看懂VBA的命令,然后把它翻譯成MATLAB代碼。有的人看到這里就已經(jīng)按捺不住了:“如此簡單為什么沒有人告訴我呢?”
3 CST幫助文檔里面的VBA使用指南
3. 入門范例
我想有的同學(xué)看到上面的介紹就已經(jīng)基本掌握了精髓,可以獨立在MATLAB里面編寫代碼操作CST了,但是有點同學(xué)雖然明白了其中的道理,還是無從下手,那就請看下面詳細的范例程序介紹。
下載示例代碼之后,在同時裝有MATLAB和CST的電腦上運行。強烈推薦使用CST2018,我的MATLAB版本是2016b。MATLAB的版本老一點沒有關(guān)系,CST版本盡量用最新的版本,不然運行后續(xù)內(nèi)容會有麻煩。
有的同學(xué)第一眼看到范例中的代碼是不是覺得很煩躁,怎么亂七八糟的,那是因為我沒有將各種操作打包成函數(shù),這是為了讓大家熟悉完整翻譯VBA代碼的過程,不過你要有代碼潔癖的話可以自己重寫。我主要是提供思路,大家可以自由發(fā)揮。
關(guān)于代碼中關(guān)鍵步驟的介紹:
①基本的環(huán)境參數(shù)設(shè)置
在初次使用CST的時候會有一個引導(dǎo)你設(shè)置模板的向?qū)?,設(shè)置完成后,每次新建項目都會出現(xiàn)如圖4所示的模板,根據(jù)需要點擊相應(yīng)模板就不用再進行環(huán)境參數(shù)設(shè)置了。
4 新建項目
借助建立模板的思路,如圖5所示,在編寫MATLAB控制CST仿真的代碼時就可以根據(jù)模板里的VBA代碼來改寫。在示例程序中,我將列出了一些常用的環(huán)境參數(shù)設(shè)置,各位在編寫代碼時候可以將常用的一些設(shè)置打包成函數(shù),方便下次直接調(diào)用。
5 新建項目模板的VBA代碼
②建立貼片天線的實體模型
圖6所示的動圖是示例代碼運行過程中的截圖,可以看出CST在執(zhí)行基本的建模操作時,比較流暢。建模的過程在示例代碼中的展示比較充分,大家可以仔細琢磨一下,簡單易上手。
(該動圖需至公眾號查看)
6 貼片天線自動建模演示(gif)
③添加饋電端口
在貼片兩端的微帶線上添加端口,從示例代碼中的說明可以知道,在設(shè)置端口時采用了一個方法,就是完全模仿我們在CST設(shè)置端口的操作方法,將鼠標的點擊操作變成了MATLAB的命令,也就是通過代碼完全復(fù)現(xiàn)手動操作的過程。這個理念很重要,有些復(fù)雜操作利用這種理念來解決,可以很直觀地實現(xiàn),后續(xù)課程會進一步用的此思想。
④仿真和保存結(jié)果
這一步,出現(xiàn)了一個至關(guān)重要的問題,大家注意看示例代碼的末尾,我特意將退出程序這行命令注釋了。這是因為假如我們將仿真完成并有結(jié)果的工程關(guān)閉之后,再打開,大家可以發(fā)現(xiàn)歷史樹里面就只剩兩行命令了,如圖7所示。也就是說此種情況下,如果你點擊遠場方向圖的結(jié)果就會報錯,因為沒有端口。而假如此時重新添加端口,只要一更新項目,那么已生成的數(shù)據(jù)會消失,重新修改模型的幾何參數(shù),只要一更新模型,那么之前建立的整個模型就會消失了。此問題我還沒有找到很好的解決辦法。
7 關(guān)閉之后再打開的工程
因此,對于重要仿真結(jié)果,特別是要花很長時間才仿真完成的項目,最好使用命令將其需要的結(jié)果導(dǎo)出保存?;蛘呔褪墙V髮⒛P蛯?dǎo)出,重新導(dǎo)入之后再設(shè)置好參數(shù)、添加好端口之后仿真(手動操作完成)。不過總體來看,利用MATLAB來操作,還是提供了很多方便,可以在一定程度上節(jié)省建模時間。
4. 這么簡單,學(xué)會用了嗎?
比如老師布置了一個任務(wù),要你設(shè)計一個曲面共形的微帶貼片陣列,需要生成一個“奇怪”(例如余割平方)的方向圖,這個方向圖是用于星載SAR成像的,為了使陣列單元布局更加合理優(yōu)化,老師還想你采用非均勻的布陣方法組陣。但問題是貼片單元布局一變,單元的有源方向圖就發(fā)生了改變,用于陣列綜合的有源方向圖參數(shù)也就變了,要只用CST仿真優(yōu)化的話還挺麻煩的,每次仿真完都得手動調(diào)整大量單元的各種參數(shù),本來仿真一次就要花好多時間,人工干預(yù)更是讓人煩躁頭疼,不知道要多久才能搞完,就想著要是能自動優(yōu)化就好了。轉(zhuǎn)念一想,今天學(xué)習(xí)了MATLAB控制CST的方法,要是用MATLAB來控制CST進行建模、仿真、結(jié)構(gòu)參數(shù)優(yōu)化、方向圖分析與綜合等自動操作,不就行了嗎?假如你已經(jīng)想到了具體步驟與方法,我想你屬于一點就通型,但是實際過程中你還是會遇到許多意想不到的問題,不過應(yīng)該能想到解決方法;假如問題稍微復(fù)雜一點,你就發(fā)現(xiàn)雖然自己掌握了核心技術(shù),但是沒辦法使出勁來,那就請耐心學(xué)習(xí)后續(xù)課程,我想學(xué)完之后你一定會有一個全新的認識。
當然,我也還在MATLAB和CST聯(lián)合仿真的摸索和學(xué)習(xí)中,也還有許多問題待解決,因此我們應(yīng)該放平心態(tài),一起討論。
課后討論(加相關(guān)微信群)
課后討論(移步 論壇 或 交流群):
在將MATLAB里面的變量傳遞給CST時,以下三種寫法有什么區(qū)別和聯(lián)系?什么情況下用什么代碼不會出現(xiàn)問題?
致謝
本節(jié)校對與代碼測試人員:
王志娟,成都電子科技大學(xué)本科,國防科技大學(xué)電子科學(xué)學(xué)院碩士研究生在讀。
作者簡介:
劉燚,國防科技大學(xué)電子科學(xué)學(xué)院電子科學(xué)系電磁調(diào)控技術(shù)教研室講師,主要從事微波毫米波技術(shù)、天線理論與設(shè)計等方向的教學(xué)和科研。
郵箱:yi_liu@nudt.edu.cn
獲取代碼及深入交流
教程獲?。?/b>關(guān)注公眾號“微波仿真論壇”
示例代碼:請在公眾號后臺回復(fù)“CST001”獲取下載鏈接
配套微信群:加編輯Amy_wang微信: 18010874378 (請備注:MATLAB-CST)
論壇留言:http://bbs.rfeda.cn/read-htm-tid-112942.html
微波仿真論壇 公眾號(bbs.rfeda.cn)
2006-2018專注微波12年,現(xiàn)13萬微波會員
長按二維碼關(guān)注公眾號
會員注冊 | 資料下載 | 會議信息 | 微波培訓(xùn)
加編輯Amy_wang微信 (備注:MATLAB-CST)
至 論壇公眾號 交流 點擊此處
好實用!
Qt: Untested Windows version 10.0 detected! 在matlab里面打開cst命令,出現(xiàn)這個錯誤
你CST版本更新到2018和MATLAB版本高于2016b,應(yīng)該沒有問題的,我找了好幾臺電腦測試
謝謝 我回去再把這個重裝吧
厲害了,很實用
非常好的帖子,希望課程完了以后能整理成PDF文檔,
這樣某些圖片不會有水印,也更清晰一些
關(guān)注公眾號閱讀體驗更好
微波仿真論壇的公眾號早就關(guān)注了,
希望能關(guān)注才女你的公眾號
我沒有公眾號,我的意思是你關(guān)注微波仿真論壇了就可以看到完整版的教程了,圖片也沒有水印
錯誤使用 Interface.CSTStudio_application.NewMWS.Port/invoke
調(diào)用錯誤: 未知的名稱或已命名參數(shù)
出錯 PatchAntenna (line 232)
invoke(port, 'TextMaxLimit', '0');
這是什么原因?
好吧,看了一眼cst里的history,沒有這行命令,版本太低了
是的,裝個高版本嘛
您好,出現(xiàn):錯誤使用 Interface.CSTStudio_application.NewMWS.TraceFromCurve/invoke
求解答,感激
請仔細看文章對照檢查,你要先排查原因,看看軟件版本對不
設(shè)置單位的時候,時間和Geometry沒有改變,請問怎么回事呢?
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
謝謝分享
錯誤使用 Interface.CSTStudio_application.NewMWS.Brick/invoke
調(diào)用錯誤,調(diào)度異常:
源: CST MICROWAVE STUDIO 2019
說明: This name already exists, please choose a unique name
Brick(brick, Str_Name, Str_Component, Str_Material, x, y, z);
請問這個為什么錯了
通過Matlab畫出的圖形,在CST里沒有歷史記錄,模型也不那么再修改。有沒有好的辦法,能夠在CST中手動二次修改模型的?
木有好辦法,可以手動先畫好,在用MATLAB來控制模型參數(shù)的變化