0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CST的VBA语言&MATLAB调用CST

射频学堂 来源:微波射频网 作者:微波射频网 2022-12-19 14:12 次阅读

摘要:

大家在科研和工作中,往往会遇到如何在CST中构建人工重复性高、建模步骤繁琐的模型,以及多次导出仿真结果数据等问题。和HFSS的vbs脚本一样,CST也自带VBA脚本控制,并支持MATLAB调用。

0 1 CST的VBA语言

在CST主界面按F1即可打开官方自带的Help文档。

95a2c886-7f55-11ed-8abf-dac502259ad0.png

对于微波专业的学生和科研从业者,大部分情况下选用的是CST的MICROWAVE STUDIO (MWS)。因此,查看学习CST MWS VBA语法和对象即可满足日常学习、工作需求。

963344f6-7f55-11ed-8abf-dac502259ad0.png

点击Hom‍e:Macros>Open VBA Macro Editor,即可打开CST自带的VBA开发环境。

964a57f4-7f55-11ed-8abf-dac502259ad0.png 复制粘贴MsgBox行的代码到VBA编辑器中,点击967dc972-7f55-11ed-8abf-dac502259ad0.png即可弹出信息提示框。(全部复制可能会报错!亲测!)

'#Language "WWB-COM"


Option Explicit


Sub Main
  MsgBox("Hello World")
EndSub

96971ff8-7f55-11ed-8abf-dac502259ad0.png

对于初学者而言,若要熟练使用VBA开发环境对CST进行代码式建模开发,还需要掌握两方面知识:VBA语言的基本语法规则和CST的Objects调用规则。

前者可以在VBA开发环境下按F1键,调出Help文档。

96c353d4-7f55-11ed-8abf-dac502259ad0.png

官方帮助文档是学习VBA基本语法规则的一大利器,不需要从头到尾都学一遍。可以秉承边学边用的方法,活学活用。不过学习常用的变量定义、数组、循环、判断、字符等最基础的知识是很有必要的。

96e99dbe-7f55-11ed-8abf-dac502259ad0.png

有了语法基础后,就需要根据自己的学习工作需求,去VBA Objects下找自己需要对象的调用规则。例如下图所示的Brick对象的一个构建。该对象有Reset、Name、Component、Material、Xrange、Yrange、Zrange、Create这么几个方法。

9701d9f6-7f55-11ed-8abf-dac502259ad0.png 根据Help文档的讲解,我们在VBA开发环境中复制下面6-15行的代码到Sub Main代码块内,点击运行即可在CST中建立一个矩形实体。(全部复制可能会报错!亲测!)

'#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

不过这种建模方法有一个缺点:和HFSS的自动化建模只有vbs代码一样,建立的模型在CST的History List没有记录,丧失了CST建模的一大利器!

972e6566-7f55-11ed-8abf-dac502259ad0.png

好在可以打开CST官方Macro文件进行参考,比如自带的Dipole Antenna这个mcs文件。经过对比,不难发现,只需要将前面的代码变成字符串形式,通过AddToHistory即可将建模代码添加至History List。

974afc30-7f55-11ed-8abf-dac502259ad0.png

依葫芦画瓢,Sub Main和End Sub之间的代码替换如下,执行VBA命令后即可在History List下找到本次建模的详细代码:

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

976dcf1c-7f55-11ed-8abf-dac502259ad0.png

95830f50-7f55-11ed-8abf-dac502259ad0.png

0 2 MATLAB调用CST

MATLAB调用CST有两种方法,一种是通过Shell语言的转移字符!。

例如已经编写好了待执行的vba脚本,文件类型命名为.bas(其他类型文件,比如.mcr,可能不会被识别)。然后按下面的语法结构,修改CST安装路径和bas文件路径即可调用成功。这种方法和通过hfssapi包编写好相应的vbs脚本文件,再用MATLAB调用HFSS执行vbs脚本命令类似。不过这种方法在尝试调用高版本CST2022时,会因为采用了批处理(Batch)脚本调用而需要手动确认license的现象。

! "D:softwareCST2018CST DESIGN ENVIRONMENT.exe" -m E:test.bas

另一种方法则是通过matlab actxserver创建一个COM服务器,通过invoke调用COM对象或接口上的方法。

%如果装了2个CST,不管怎么切换license,其只会创建最新安装的cst对象!
cst = actxserver('CSTStudio.application');%创建CST应用对象
mws = invoke(cst, 'NewMWS');%调用MWS应用对象
app = invoke(mws, 'GetApplicationName');%获取当前应用名称
ver = invoke(mws, 'GetApplicationVersion');%获取当前应用版本号
invoke(mws, 'FileNew');%新建一个CST文件
filename='D:CSTFileDipole_model.cst';
invoke(mws, 'SaveAs', filename,'True');
invoke(mws, 'Quit');
release(mws);
release(cst);

就通用性而言,第二种方法较优。网上也有很多关于这方面的代码可供参考,个人可以根据需求将代码进行封装,便于后续的传参调用。

实例展示

97a04424-7f55-11ed-8abf-dac502259ad0.jpg

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    175

    文章

    2924

    浏览量

    228463
  • CST
    CST
    +关注

    关注

    7

    文章

    62

    浏览量

    17565

原文标题:CST的VBA语言 & MATLAB调用CST

文章出处:【微信号:射频学堂,微信公众号:射频学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    在TSMaster中加载基于DotNet平台的Seed&Key

    在UDS诊断过程中,会涉及到安全访问的问题,也就是所谓的Seed&Key。TSMaster诊断模块支持通过.dll文件载入Seed&Key算法用于安全访问解锁。在最近发布
    的头像 发表于 04-02 08:20 85次阅读
    在TSMaster中加载基于DotNet平台的Seed&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;Key

    Open RAN的未来及其对AT&amp;amp;T的意义

    3月14日消息,在“Connected America 2024”会议上,AT&amp;T高级副总裁兼网络首席技术官Yigal Elbaz讨论了Open RAN 的未来及其对AT&amp;T的意义。
    的头像 发表于 03-14 14:40 196次阅读

    Molex推出Coeur CST 高电流连接系统产品介绍-赫联电子

      Molex提供创新的Coeur CST高电流互连系统,具有独特的新浮子设计,可调整不对齐的插针与插座之间的距离,方便PCB与PCB、PCB与母线棒,或母线棒与母线棒之间的接插,而在此过程中并无
    发表于 03-04 16:25

    CST—EMC(电磁兼容)仿真及分析工具

    CST全称为Computer Simulation Technology,具备完备的3D全波电磁场仿真技术。CST Studio Suite(CST工作室套装)是CST的核心产品,是目
    的头像 发表于 01-10 15:04 1137次阅读
    <b class='flag-5'>CST</b>—EMC(电磁兼容)仿真及分析工具

    CST92F25可以在IAR或者CSU_IDE进行debug嘛

    CST92F25开发板的开发环境可以在IAR或者CSU_IDE进行debug嘛
    发表于 12-20 14:04

    用在半导体CST材料搬运AGV小车的RFID

    CST晶圆盒上安装TI Tag标签,标签内录入CST晶圆盒材料的信息。在工艺设备AGV搬运CST时,半导体RFID读写器会通过无线射频信号识别CST晶圆盒上的TI Tag标签信息,获
    的头像 发表于 12-13 09:11 261次阅读
    用在半导体<b class='flag-5'>CST</b>材料搬运AGV小车的RFID

    申请CST92F25系列开发板

    请教一下,如何申请CST92F25系列开发板,我看到官网上好像只能申请芯片
    发表于 12-06 13:42

    盘点一下CST电磁仿真软件的求解器

    今天我们一起来盘点一下CST电磁仿真软件那些牛叉的求解器。快来数一下,你用了里面的几种吧!
    的头像 发表于 11-20 10:18 3194次阅读
    盘点一下<b class='flag-5'>CST</b>电磁仿真软件的求解器

    轻量系统:芯海 cst85_wblink(CST85F01)

    开发板名称(芯片型号) 芯海 cst85_wblink(CST85F01) 芯片架构 CPU频率 介绍(字数请控制在200字以内) cst85_wblink开发板是基于芯海科技CST
    发表于 10-19 11:20

    CST-各类传输线仿真报告

    CST仿真软件提供了一个三维建模环境,使用户能够创建和编辑复杂的电磁结构,如天线、滤波器、传输线、电路板等。它包含了数值求解器和算法,用于计算电磁参数,并提供了强大的后处理和数据分析工具,用于评估和优化设计。
    发表于 08-11 11:04 2188次阅读
    <b class='flag-5'>CST</b>-各类传输线仿真报告

    你使用shell脚本中的2&amp;gt;&amp;amp;1了吗?

    run_cmax > ./starrc_cmax.logs 2>&amp;1中的 2>&amp;1是啥意思?
    的头像 发表于 07-30 14:44 1071次阅读

    CST电磁兼容性仿真—双脉冲3D仿真

    众所周知,达索系统的CST对于电磁兼容性仿真有着很好的精度和准确度。那么CST除了电磁兼容性仿真,SIPI仿真还能做哪些事呢?
    发表于 06-08 11:24 3921次阅读
    <b class='flag-5'>CST</b>电磁兼容性仿真—双脉冲3D仿真

    如何使用CST签署二进制文件并使用HSM而不是srk.pri/pub本地文件?

    对于目标 LS1043AE,我可以使用 NXP CST 工具对 ATF 和 U-Boot 进行签名,以获得安全的引导信任链。 这个工具 CST 依赖于 ATF 源代码树根目录下的 srk.pri
    发表于 06-05 10:43

    flexbuild_lsdk2108构建CST错误怎么处理?

    构建 CST ... 未找到 cst make[3] 的有效回购信息:*** [/flexbuild/packages/apps/security/cst.mk:10: cst] E
    发表于 05-10 06:54

    if(a==1 &amp;amp;&amp;amp; a==2 &amp;amp;&amp;amp; a==3),为true,你敢信?

    接下来咱们来尝试解决这个问题。假设 if(a==1&amp;&amp;a==12)是等于 true的,那么a肯定不可能是一个“普通的变量”。它势必要有能力在执行的时候能够动态改动值。
    的头像 发表于 05-08 11:01 755次阅读
    if(a==1 &<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>; a==2 &<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>; a==3),为true,你敢信?