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