全波仿真工作需要一定的专业知识和良好的精力和体力储备,从我们的科研力量组织构成来看,一般干底层仿真活的主力基本都是硕士和博士。由于社会生产力迅猛发展导致专业人才缺口大,目前的现状是研究生的培养规模大、时间短、任务重,尤其是物质保障与社会经济的发展有点脱节,导致大多数研究生为了生计而不得不出卖劳动力,因此他们没有太多精力投入到各种仿真软件的摸索和学习中,从而浪费了大量的时间在笨拙的建模方式和结果处理上。所以,对于一线的天线研究人员来说,专心用好一款仿真软件,减少在软件上的摸索时间,提高设计效率,为其他创造性的科研活动腾出时间就显得尤为重要了。
说到编程语言,我想理工科的本科生都学习过C语言,大多数也选修过MATLAB,当然这几年火遍全球的Python语言也是势不可挡。但由于MATLAB非常容易上手且网上随手一搜就有答案的特性,我觉得研究一下MATLAB控制CST的方法是很有必要的。在此之前我都是用CST自带的VBA编程,或者用Visual Basic编程来控制,后来发现用起来挺麻烦的、也很费时。可能是我不是很熟悉Basic语言的原因,我始终觉得用VBA很不方便,就在网上查找关于用MATLAB控制CST的方法,终于在一个国外的论坛找到了利用invoke()函数调用控件的方法,之后又查到了CST的官方说明文件。掌握MATLAB和CST联调的初级使用方法后,我就开始基于科研中的一些实际问题研究各种操作方法与技巧,后来发现很多技巧在科研中帮助还挺大。
首先大家想到的就是怎么让MATLAB连接到CST,只有抓住了它,才能控制它。很显然这就必须要CST公司提供控件的接口,就是下面这行命令:
cst = actxserver('CSTStudio.application')
其中"cst"可以是任意的合法变量名,给它赋值后它就成为了一个句柄类型的变量(handle)。
接下来就要新建一个CST工程或者打开一个CST工程了。
mws = invoke(cst, 'NewMWS')
invoke(mws, 'OpenFile', 'filename.cst');
新建一个工程之后,我们先不着急设置环境参数,为帮大家弄明白这个MATLAB的代码是怎么来的,先来看如表1所示的对比。
左边一列是CST中比较典型的一段建立立方体的代码,假如你从来没有看到过这段代码,请在CST里面随便画一个立方体,然后打开历史树,双击建立立方体的那段命令,就会得到其详细的代码,请看下图。
这段代码就是一段典型的VBA命令,学习过编程语言且有基本编程思想的人应该都能明白这段代码的意思,我就不赘述了。为了能在MATLAB里面实现对CST的控制与操作,我们的基本思路就是要将这段代码翻译成MATLAB能执行的命令,如表1中右边一列所示。这样一对比是不是感觉清晰明了。但是肯定有人发现有些操作在CST的历史树里面是看不到的,那么请在CST界面按F1进入帮助,如下图所示,你就能够看到几乎所有可供操作的VBA命令,而留给我们做的就是看懂VBA的命令,然后把它翻译成MATLAB代码。有的人看到这里就已经按捺不住了:"如此简单为什么没有人告诉我呢?"
我想有的同学看到上面的介绍就已经基本掌握了精髓,可以独立在MATLAB里面编写代码操作CST了,但是有点同学虽然明白了其中的道理,还是无从下手,那就请看下面详细的范例程序介绍。
下载示例代码之后,在同时装有MATLAB和CST的电脑上运行。强烈推荐使用CST2018,我的MATLAB版本是2016b。MATLAB的版本老一点没有关系,CST版本尽量用最新的版本,不然运行后续内容会有麻烦。
有的同学第一眼看到范例中的代码是不是觉得很烦躁,怎么乱七八糟的,那是因为我没有将各种操作打包成函数,这是为了让大家熟悉完整翻译VBA代码的过程,不过你要有代码洁癖的话可以自己重写。我主要是提供思路,大家可以自由发挥。
关于代码中关键步骤的介绍:
① 基本的环境参数设置
在初次使用CST的时候会有一个引导你设置模板的向导,设置完成后,每次新建项目都会出现如图4所示的模板,根据需要点击相应模板就不用再进行环境参数设置了。
借助建立模板的思路,如图5所示,在编写MATLAB控制CST仿真的代码时就可以根据模板里的VBA代码来改写。在示例程序中,我将列出了一些常用的环境参数设置,各位在编写代码时候可以将常用的一些设置打包成函数,方便下次直接调用。
② 建立贴片天线的实体模型
图6所示的动图是示例代码运行过程中的截图,可以看出CST在执行基本的建模操作时,比较流畅。建模的过程在示例代码中的展示比较充分,大家可以仔细琢磨一下,简单易上手。
③ 添加馈电端口
在贴片两端的微带线上添加端口,从示例代码中的说明可以知道,在设置端口时采用了一个方法,就是完全模仿我们在CST设置端口的操作方法,将鼠标的点击操作变成了MATLAB的命令,也就是通过代码完全复现手动操作的过程。这个理念很重要,有些复杂操作利用这种理念来解决,可以很直观地实现,后续课程会进一步用的此思想。
④ 仿真和保存结果
这一步,出现了一个至关重要的问题,大家注意看示例代码的末尾,我特意将退出程序这行命令注释了。这是因为假如我们将仿真完成并有结果的工程关闭之后,再打开,大家可以发现历史树里面就只剩两行命令了,如图7所示。也就是说此种情况下,如果你点击远场方向图的结果就会报错,因为没有端口。而假如此时重新添加端口,只要一更新项目,那么已生成的数据会消失,重新修改模型的几何参数,只要一更新模型,那么之前建立的整个模型就会消失了。此问题已找到很好的解决办法,关注后续教程。
因此,对于重要仿真结果,特别是要花很长时间才仿真完成的项目,最好使用命令将其需要的结果导出保存。或者就是建模之后将模型导出,重新导入之后再设置好参数、添加好端口之后仿真(手动操作完成)。不过总体来看,利用MATLAB来操作,还是提供了很多方便,可以在一定程度上节省建模时间。
比如老师布置了一个任务,要你设计一个曲面共形的微带贴片阵列,需要生成一个"奇怪"(例如余割平方)的方向图,这个方向图是用于星载SAR成像的,为了使阵列单元布局更加合理优化,老师还想你采用非均匀的布阵方法组阵。但问题是贴片单元布局一变,单元的有源方向图就发生了改变,用于阵列综合的有源方向图参数也就变了,要只用CST仿真优化的话还挺麻烦的,每次仿真完都得手动调整大量单元的各种参数,本来仿真一次就要花好多时间,人工干预更是让人烦躁头疼,不知道要多久才能搞完,就想着要是能自动优化就好了。转念一想,今天学习了MATLAB控制CST的方法,要是用MATLAB来控制CST进行建模、仿真、结构参数优化、方向图分析与综合等自动操作,不就行了吗?假如你已经想到了具体步骤与方法,我想你属于一点就通型,但是实际过程中你还是会遇到许多意想不到的问题,不过应该能想到解决方法;假如问题稍微复杂一点,你就发现虽然自己掌握了核心技术,但是没办法使出劲来,那就请耐心学习后续课程,我想学完之后你一定会有一个全新的认识。
当然,我也还在MATLAB和CST联合仿真的摸索和学习中,也还有许多问题待解决,因此我们应该放平心态,一起讨论。