• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > CST > CST使用问答 > CST进阶之路:第一节 MATLAB—CST联合仿真之入门

CST进阶之路:第一节 MATLAB—CST联合仿真之入门

录入:edatop.com     点击:

微波仿真论坛 公众号 原创投稿 扫码阅读



作者简介
内容安排及教程代码获取
  

CST进阶之路:第一节 MATLAB—CST联合仿真之入门


1. 前言
近几年,经常查阅文献的科研人员会发现,我国学者发表在天线与电波传播领域的高水平期刊论文越来越多,从文献的内容也可以看出天线设计与电波传播的分析水平也越来越高,不过很大一部分都借助了全波仿真软件工具来验证设计方法和结果,通常我们采用的主流仿真软件基本都是国外的,如图1所示,其中HFSS已被Ansys收购,CST已被达索收购。                          


1  国外主流的电磁仿真软件



全波仿真工作需要一定的专业知识和良好的精力和体力储备,从我们的科研力量组织构成来看,一般干底层仿真活的主力基本都是硕士和博士。由于社会生产力迅猛发展导致专业人才缺口大,目前的现状是研究生的培养规模大、时间短、任务重,尤其是物质保障与社会经济的发展有点脱节,导致大多数研究生为了生计而不得不出卖劳动力,因此他们没有太多精力投入到各种仿真软件的摸索和学习中,从而浪费了大量的时间在笨拙的建模方式和结果处理上。所以,对于一线的天线研究人员来说,专心用好一款仿真软件,减少在软件上的摸索时间,提高设计效率,为其他创造性的科研活动腾出时间就显得尤为重要了。
鉴于此,我决定将一些能提高天线设计效率的软件操作方法分享出来,因为我在科研中用到的一些方法和技巧帮我节约了大量时间以至于能把更多精力放在别的更加有用的地方,比如写了这篇教程。
在发表此详细教程之前,我已于2016年底在微波仿真论坛:
http://bbs.rfeda.cn/read.php?tid=106664
和CST中国官方论坛:
http://www.cst-china.cn/forum.php?mod=viewthread&tid=2451
发过一篇名为“【干货福利之代码共享】MATLAB控制CST进行建模仿真”的帖子,我记得当时就花一个多小时随便写了一个小DEMO上传。但是令我惊讶的是,两年来这篇帖子长期霸占CST板块的热帖,累计浏览量过万,不过下载量只有几百,后来我发现很多人是没有权限无法回复或者懒得回复而不能下载。此外,在这两年里还有大量的人发站内信请我发代码给他们,也有人提出了很多操作层面问题和我交流。
事实上,据我了解,国内很多厉害的重点实验室在MATLAB与CST联合仿真方面上已经有了大量积累,但是网上却很难见到相关内容的分享。这两年来关于MATLAB控制CST的操作我也时不时摸索一下,其实还有很多问题没有解决好。但是我深知任何事情都不要等准备完美再去做,只有边做边迭代才能收敛到理想的状态,所以我决定将一些还不是很完善的操作方法和技巧与大家分享,也欢迎大家多提意见帮忙一起迭代。
2. 入门基础
说到编程语言,我想理工科的本科生都学习过C语言,大多数也选修过MATLAB,当然这几年火遍全球的Python语言也是势不可挡。但由于MATLAB非常容易上手且网上随手一搜就有答案的特性,我觉得研究一下MATLAB控制CST的方法是很有必要的。在此之前我都是用CST自带的VBA编程,或者用Visual Basic编程来控制,后来发现用起来挺麻烦的、也很费时。可能是我不是很熟悉Basic语言的原因,我始终觉得用VBA很不方便,就在网上查找关于用MATLAB控制CST的方法,终于在一个国外的论坛找到了利用invoke()函数调用控件的方法,之后又查到了CST的官方说明文件。掌握MATLAB和CST联调的初级使用方法后,我就开始基于科研中的一些实际问题研究各种操作方法与技巧,后来发现很多技巧在科研中帮助还挺大。
下面就开始介绍怎么用MATLAB来控制CST软件,不过在此之前,建议大家优先看一下CST的官方文件,下载地址:
https://share.weiyun.com/51zMlKR
提取密码:
0o1yx6
假如你一看到英文就头疼,那就看下面的入门吧。
首先大家想到的就是怎么让MATLAB连接到CST,只有抓住了它,才能控制它。很显然这就必须要CST公司提供控件的接口,就是下面这行命令:

复制代码

  1. [size=2][size=2]cst =actxserver('CSTStudio.application')[/size][/size]


其中“cst”可以是任意的合法变量名,给它赋值后它就成为了一个句柄类型的变量(handle)。
接下来就要新建一个CST工程或者打开一个CST工程了。

复制代码

  1. [font=宋体]      [/font][size=2]mws = invoke(cst, 'NewMWS')[/size]
  2. [size=2]      invoke(mws, 'OpenFile',‘filename.cst');[/size]


新建一个工程之后,我们先不着急设置环境参数,为帮大家弄明白这个MATLAB的代码是怎么来的,先来看如表1所示的对比。

表1  VBA代码和MATLAB代码一一对应




左边一列是CST中比较典型的一段建立立方体的代码,假如你从来没有看到过这段代码,请在CST里面随便画一个立方体,然后打开历史树,双击建立立方体的那段命令,就会得到其详细的代码,请看下图。


2 历史树列表


这段代码就是一段典型的VBA命令,学习过编程语言且有基本编程思想的人应该都能明白这段代码的意思,我就不赘述了。为了能在MATLAB里面实现对CST的控制与操作,我们的基本思路就是要将这段代码翻译成MATLAB能执行的命令,如表1中右边一列所示。这样一对比是不是感觉清晰明了。但是肯定有人发现有些操作在CST的历史树里面是看不到的,那么请在CST界面按F1进入帮助,如下图所示,你就能够看到几乎所有可供操作的VBA命令,而留给我们做的就是看懂VBA的命令,然后把它翻译成MATLAB代码。有的人看到这里就已经按捺不住了:“如此简单为什么没有人告诉我呢?”



3  CST帮助文档里面的VBA使用指南


3. 入门范例
我想有的同学看到上面的介绍就已经基本掌握了精髓,可以独立在MATLAB里面编写代码操作CST了,但是有点同学虽然明白了其中的道理,还是无从下手,那就请看下面详细的范例程序介绍。
下载示例代码之后,在同时装有MATLAB和CST的电脑上运行。强烈推荐使用CST2018,我的MATLAB版本是2016b。MATLAB的版本老一点没有关系,CST版本尽量用最新的版本,不然运行后续内容会有麻烦。
有的同学第一眼看到范例中的代码是不是觉得很烦躁,怎么乱七八糟的,那是因为我没有将各种操作打包成函数,这是为了让大家熟悉完整翻译VBA代码的过程,不过你要有代码洁癖的话可以自己重写。我主要是提供思路,大家可以自由发挥。
关于代码中关键步骤的介绍:
①基本的环境参数设置
在初次使用CST的时候会有一个引导你设置模板的向导,设置完成后,每次新建项目都会出现如图4所示的模板,根据需要点击相应模板就不用再进行环境参数设置了。


4  新建项目


借助建立模板的思路,如图5所示,在编写MATLAB控制CST仿真的代码时就可以根据模板里的VBA代码来改写。在示例程序中,我将列出了一些常用的环境参数设置,各位在编写代码时候可以将常用的一些设置打包成函数,方便下次直接调用。


5  新建项目模板的VBA代码


②建立贴片天线的实体模型
图6所示的动图是示例代码运行过程中的截图,可以看出CST在执行基本的建模操作时,比较流畅。建模的过程在示例代码中的展示比较充分,大家可以仔细琢磨一下,简单易上手。

(该动图需至公众号查看)


6  贴片天线自动建模演示(gif)


③添加馈电端口
在贴片两端的微带线上添加端口,从示例代码中的说明可以知道,在设置端口时采用了一个方法,就是完全模仿我们在CST设置端口的操作方法,将鼠标的点击操作变成了MATLAB的命令,也就是通过代码完全复现手动操作的过程。这个理念很重要,有些复杂操作利用这种理念来解决,可以很直观地实现,后续课程会进一步用的此思想。
④仿真和保存结果
这一步,出现了一个至关重要的问题,大家注意看示例代码的末尾,我特意将退出程序这行命令注释了。这是因为假如我们将仿真完成并有结果的工程关闭之后,再打开,大家可以发现历史树里面就只剩两行命令了,如图7所示。也就是说此种情况下,如果你点击远场方向图的结果就会报错,因为没有端口。而假如此时重新添加端口,只要一更新项目,那么已生成的数据会消失,重新修改模型的几何参数,只要一更新模型,那么之前建立的整个模型就会消失了。此问题我还没有找到很好的解决办法。


7  关闭之后再打开的工程


因此,对于重要仿真结果,特别是要花很长时间才仿真完成的项目,最好使用命令将其需要的结果导出保存。或者就是建模之后将模型导出,重新导入之后再设置好参数、添加好端口之后仿真(手动操作完成)。不过总体来看,利用MATLAB来操作,还是提供了很多方便,可以在一定程度上节省建模时间。
4. 这么简单,学会用了吗?
比如老师布置了一个任务,要你设计一个曲面共形的微带贴片阵列,需要生成一个“奇怪”(例如余割平方)的方向图,这个方向图是用于星载SAR成像的,为了使阵列单元布局更加合理优化,老师还想你采用非均匀的布阵方法组阵。但问题是贴片单元布局一变,单元的有源方向图就发生了改变,用于阵列综合的有源方向图参数也就变了,要只用CST仿真优化的话还挺麻烦的,每次仿真完都得手动调整大量单元的各种参数,本来仿真一次就要花好多时间,人工干预更是让人烦躁头疼,不知道要多久才能搞完,就想着要是能自动优化就好了。转念一想,今天学习了MATLAB控制CST的方法,要是用MATLAB来控制CST进行建模、仿真、结构参数优化、方向图分析与综合等自动操作,不就行了吗?假如你已经想到了具体步骤与方法,我想你属于一点就通型,但是实际过程中你还是会遇到许多意想不到的问题,不过应该能想到解决方法;假如问题稍微复杂一点,你就发现虽然自己掌握了核心技术,但是没办法使出劲来,那就请耐心学习后续课程,我想学完之后你一定会有一个全新的认识。
当然,我也还在MATLAB和CST联合仿真的摸索和学习中,也还有许多问题待解决,因此我们应该放平心态,一起讨论。
课后讨论(加相关微信群)
课后讨论(移步 论坛 或 交流群):
在将MATLAB里面的变量传递给CST时,以下三种写法有什么区别和联系?什么情况下用什么代码不会出现问题?
致谢
本节校对与代码测试人员:
王志娟,成都电子科技大学本科,国防科技大学电子科学学院硕士研究生在读。
作者简介:
刘燚,国防科技大学电子科学学院电子科学系电磁调控技术教研室讲师,主要从事微波毫米波技术、天线理论与设计等方向的教学和科研。
邮箱:yi_liu@nudt.edu.cn
获取代码及深入交流
教程获取:关注公众号“微波仿真论坛”
示例代码:请在公众号后台回复“CST001”获取下载链接
配套微信群:加编辑Amy_wang微信: 18010874378 (请备注:MATLAB-CST)
论坛留言:http://bbs.rfeda.cn/read-htm-tid-112942.html

微波仿真论坛 公众号(bbs.rfeda.cn)

2006-2018专注微波12年,现13万微波会员



长按二维码关注公众号

会员注册 | 资料下载 | 会议信息 | 微波培训


加编辑Amy_wang微信 (备注:MATLAB-CST)


  
至 论坛公众号 交流  点击此处

好实用!

Qt: Untested Windows version 10.0 detected!  在matlab里面打开cst命令,出现这个错误

你CST版本更新到2018和MATLAB版本高于2016b,应该没有问题的,我找了好几台电脑测试

谢谢 我回去再把这个重装吧

厉害了,很实用

非常好的帖子,希望课程完了以后能整理成PDF文档,
这样某些图片不会有水印,也更清晰一些

关注公众号阅读体验更好

微波仿真论坛的公众号早就关注了,
希望能关注才女你的公众号

我没有公众号,我的意思是你关注微波仿真论坛了就可以看到完整版的教程了,图片也没有水印

错误使用 Interface.CSTStudio_application.NewMWS.Port/invoke
调用错误: 未知的名称或已命名参数
出错 PatchAntenna (line 232)
invoke(port, 'TextMaxLimit', '0');
这是什么原因?

好吧,看了一眼cst里的history,没有这行命令,版本太低了

是的,装个高版本嘛

您好,出现:错误使用 Interface.CSTStudio_application.NewMWS.TraceFromCurve/invoke
求解答,感激

请仔细看文章对照检查,你要先排查原因,看看软件版本对不

设置单位的时候,时间和Geometry没有改变,请问怎么回事呢?

hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

谢谢分享

错误使用 Interface.CSTStudio_application.NewMWS.Brick/invoke
调用错误,调度异常:
源: 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来控制模型参数的变化

申明网友回复良莠不齐,仅供参考。如需专业解答,请学习易迪拓培训专家讲授的CST视频培训教程

上一篇:CST2016在Asmptotic solver求解器怎么设置平面波的极化方式?
下一篇:相控阵小白求救

CST培训课程推荐详情>>

  网站地图