首页/文章/ 详情

微波天线工程师:我的MATLAB-CST-API入门教程来了

精品
作者优秀平台推荐
详细信息
文章亮点
作者优秀
优秀教师/意见领袖/博士学历/特邀专家/独家讲师
平台推荐
内容稀缺
1年前浏览4070

摘要:大家在科研和工作中,往往会遇到如何在CST中构建人工重复性高的模型,以及多次导出仿真数据等需求本次推文将介绍MATLAB-CST-API,一个可以实现在MATLAB里调用CST,甚至与CST进行联合仿真优化等操作的实用工具。

0 1
MATLAB-CST-API简介
     

     

     

CST和HFSS一样,支持脚本开发建模和数据后处理等操作。HFSS可以录制vbs脚本,CST的History List则可记录完整的开发步骤。
但是对于初学者而言,若要熟练使用CST的VBA开发环境,对CST进行代码式建模开发,还需要掌握两方面知识:VBA语言的基本语法规则CST的Objects调用规则
前者可以在VBA开发环境下按F1键(部分电脑机型需要按Fn+F1),调出Help文档。
学习完官方帮助文档里的VBA基本语法规则后,就需要根据自己的学习工作需求,去CST的VBA Objects下找自己需要对象的调用规则。
如下图所示,一个Brick对象包含Reset、Name、Component、Material、Xrange、Yrange、Zrange、Create么几个方法。
不过通过这种方法建立的模型在CST的History List没有记录,而且CST自身的VBA Macro Editor对初学者有一点挑战性。
因此作者参考了相关的cstapi方法,基于MATLAB调用COM对象或接口的方法开发了MATLAB-CST-API,并录制了共7章27讲的MATLAB-CST-API入门教程











   
%MATLAB调用COM对象或接口的方法示例%如果装了2个CST,其只会调用最新安装的cst%通过matlab actxserver创建一个COM服务器cst = actxserver('CSTStudio.application');mws = invoke(cst, 'NewMWS');invoke(mws, 'FileNew');%新建一个CST文件filename='D:\CSTFile\Dipole_model.cst';invoke(mws, 'SaveAs', filename,'True');invoke(mws, 'Quit');release(mws);release(cst);  
MATLAB-CST-API的主要作用是调用COM接口来控制CST,以实现快速构建3D模型求解输出数据等一系列操作。考虑到MATLAB的普适性和强大的数据处理能力,我们可以把CST当做一个求解器,MATLAB软件中以代码的方式,调用CST实现复杂建模(例如周期排列的尺寸各异的FSS阵)、参数修改开启仿真导出仿真数据结构参数的优化设计等工作
下面介绍2个案例,让大家直观的感受下API的功能:

0 2
单元尺寸各异的FSS阵      

     

     

做超材料、反射阵等相关人员,往往需要调节单元的尺寸来改变透、反射相位。当单元数量特别多的时候,人工来建模和参数更新等就显然捉襟见肘。这时候,API的优势就出来了!
下面代码用2层循环,就把10*10的FSS阵给全参量化建模出来了,而且后期参数的更新也可以依葫芦画瓢地实现。


















































   
% 添加API库APIFolder = 'D:\PettyThings\MATLAB-CST-API_v1.0.0';addpath(genpath(APIFolder));% 全局变量的声明global cst;global mws;% 初始化调用最近安装的CST版本CstInitial(2018);% CST文件路径filename='D:\PettyThings\8dot1_ThinkingQuestions1.cst';% 新建一个CST文件CstNewFile(mws);%新建一个CST文件% 新建一条注释Annotation='08-思考练习题.1';CstAnnotation(mws,Annotation);% 插入变量Nums=10;FSS_W_array=3+1.5*rand(Nums,Nums);FSS_L_array=3+1.5*rand(Nums,Nums);CstParameter(mws,'copper_H',0.035);CstParameter(mws,'Unit_P',5);CstParameter(mws,'Sub_H',1);for hang=1:Nums    for lie=1:Nums        FSS_W_Name=sprintf('FSS_W_%d_%d',hang,lie);        FSS_L_Name=sprintf('FSS_L_%d_%d',hang,lie);        CstParameter(mws,FSS_W_Name,FSS_W_array(hang,lie));        CstParameter(mws,FSS_L_Name,FSS_L_array(hang,lie));        % CstBrick建立有厚度的矩形贴片        FSS_Name=sprintf('FSS_%d_%d',hang,lie);        FSS_center={sprintf('Unit_P*(%d-0.5)',hang),sprintf('Unit_P*(%d-0.5)',lie),0};        CstBrick(mws, 'FSS_array', FSS_Name, 'PEC',...            {strcat(FSS_center{1},'-',FSS_W_Name,'/2'),strcat(FSS_center{1},'+',FSS_W_Name,'/2')},...            {strcat(FSS_center{2},'-',FSS_L_Name,'/2'),strcat(FSS_center{2},'+',FSS_L_Name,'/2')},...            {0,'copper_H'});    endend%基板CstBrick(mws, 'FSS_array', 'Sub', 'Vacuum',{0,sprintf('Unit_P*%d',Nums)},...    {0,sprintf('Unit_P*%d',Nums)},{'-Sub_H',0});%地板CstBrick(mws, 'FSS_array', 'GND', 'PEC',{0,sprintf('Unit_P*%d',Nums)},...    {0,sprintf('Unit_P*%d',Nums)},{'-Sub_H-copper_H','-Sub_H'});
CstSaveAs(mws,filename);%关闭当前cst文件CstCloseFile(mws);% 释放CST对象release(mws);release(cst);  
用API来建模并不是它的主要功能。当我们仿真完一个上百单元的相控阵时,提取阵列的互耦S参数单元方向图等数据时,用循环语句+API也能很方便地解放我们的双手,避免重复性劳动!
0 3
联合仿真优化demo      

     

     

除此之外,MATLAB-CST联合仿真更是少不了API!下图简洁明了地说明了MATLAB调用CST进行联合仿真优化的整个流程。
我们可以将打开CST模型参数修改仿真求解结果导出数据后处理适应度函数计算重复性操作封装成一个函数。这样我们只需要给这个封装函数传入待计算的模型参量,然后再配合相应的优化算法,比如遗传算法等,就可以实现全自动优化模型性能。



























































   
function fitness=Cal_CPPatchAnt(var)    Patch_W=var(1);Cut_W=var(2);    % 添加API库    APIFolder = 'D:\PettyThings\MATLAB-CST-API_v1.0.0';    addpath(genpath(APIFolder));    % 全局变量的声明    global cst;    global mws;    % CST初始化    CstInitial(2018);    % 打开CST工程文件    filename='D:\PettyThings\SideFed_CP_Patch_cal.cst';    CstOpenFile(mws,filename);
   % 变量修改    CstParameter(mws,'Patch_W', Patch_W)    CstParameter(mws,'Cut_L', Cut_W)    CstParametricUpdate(mws);    % 进行求解    CstAnalyze(mws);    % 导出数据到指定路径    Item1='1D Results\S-Parameters\S1,1';    CstSelectTreeItem(mws,Item1);    DataFileName1='D:\PettyThings\S11.txt';    Cst1DResultExport(mws,Item1,DataFileName1);
   Item2='Tables\1D Results\Directivity,Theta=90.0,Phi=0.0\';    CstSelectTreeItem(mws,Item2);    DataFileName2='D:\PettyThings\AxialRatio.txt';    Cst1DResultExport(mws,Item2,DataFileName2);
   % 删除数据    CstDeleteResults(mws);      % 保存文件    CstSave(mws);    CstCloseFile(mws);    % 释放CST对象    release(mws);    release(cst);    
   % 数据读取    filename1 = 'D:\PettyThings\S11.txt';    filename2 = 'D:\PettyThings\AxialRatio.txt';    delimiterIn = ' ';    headerlinesIn = 2;    data1=importdata(filename1,delimiterIn,headerlinesIn);    data2=importdata(filename2,delimiterIn,headerlinesIn);    temp1=data1.data;S11=temp1(501,2);    temp2=data2.data;AxialRatio=temp2(1,2);
   disp('-----------------------------------------');    disp(strcat('端口5.5GHz的S11=',num2str(S11),'dB,5.5GHz的轴比=',num2str(AxialRatio)));    % 适应度函数编写    fitness=(AxialRatio-0);    % 关键结果备份    tmpScriptFile1=fopen('D:\PettyThings\results.txt', 'a+');    fprintf(tmpScriptFile1,['Variables:',num2str(var),',',num2str(S11),',',num2str(AxialRatio),'\n']);    fclose(tmpScriptFile1);    end  
04
 MATLAB-CST-API入门课程  
近日,笔者认证仿真秀平台讲师-微波天线工程师,并上架了《MATLAB-CST-API入门课程》原创视频教程。从基础出发,帮助用户理解脚本开发的原理;并且学会MATLAB-CST-API包的安装使用和各函数的详细调用方法,从而轻松入门。  
 

视频课程安排

MATLAB-CST-API快速入门课程27讲—获得脚本化建模开发和CST联合仿真优化关键技能


 扫码立即试看

《MATLAB-CST-API入门课程》包含多个实战教学项目穿插微波设计的相关原理,她避免让本课程成为纯建模课程,帮助大家在这个过程中快速成长;解决学员在MATLAB调用CST建模、联合仿真优化的学习过程中经常遇到报错现象而问不到解决办法的痛点;付费用户可以加入讲师的VIP学习群,还可获得完整的学习代码和课件讲义等。

(完)  

来源:仿真秀App

HFSSMATLABCST材料控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-05-15
最近编辑:1年前
仿真圈
技术圈粉 知识付费 学习强国
获赞 10082粉丝 21543文章 3539课程 219
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈