%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: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'});
end
end
%基板
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