
%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);
% 添加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:Numsfor lie=1:NumsFSS_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);
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
视频课程安排
MATLAB-CST-API快速入门课程27讲—获得脚本化建模开发和CST联合仿真优化关键技能


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