记录一下CST与MATLAB 的联合仿真(主要是MATLAB控制CST建模)。

首先必不可少的是actxserver函数,它的作用是载入CST。

cst=actxserver('CSTStudio.application');

然后是invoke函数,它使CST执行指令。

如下:

mws=cst.invoke('NewMWS');%新建一个MWS项目
invoke(mws, 'FileNew');%新建一个CST文件。注:mws代表CST的微波工作室

在提到操控CST建模的两种办法前要知道,CST基于VBA语言,在CST中直接操作的话,CST会更新历史操作列表,对CST文件内容的修改其实主要也体现在历史列表中。

cst联合python仿真 cst matlab联合仿真_字符串

举个栗子,下图是画一个方块模型操作的历史列表所对应的VBA代码。

cst联合python仿真 cst matlab联合仿真_cst联合python仿真_02

了解到上面的基础后,接下来就可以说这两种方法了:

1. 通过invoke函数让CST直接进行操作,这种办法的优点是方便仿真,略快一点,但缺点是,修改模型时由于历史列表中不存在指令,CST会认为模型不存在,会报错,所以只能仿真不能做修改。

举个栗子,平移操作

P2=strcat('p2','_',num2str(t1),'_',num2str(t2));%字符串,等号右边写要操作的对象名称.t1、t2是存数值的变量,在进行迭代建模时候要注意模型名字不能重复。
Str_Component='component1';
r=invoke(mws,'Transform');% r是随便起的字符串的名字,换别的都可
invoke(r,'Reset');
invoke(r,'Name',P2); 
invoke(r,'Component',Str_Component);
invoke(r,'Vector','1','2','0');
invoke(r,'UsePickedPoints','False');
invoke(r,'InvertPickedPoints','False');
invoke(r,'MultipleObjects','False');
invoke(r,'GroupObjects','False');
invoke(r,'Repetitions','1');
invoke(r,'MultipleSelection','False');
invoke(r,'Transform','Shape','Translate');
release(r);

它对应的VBA代码如下,但CST只执行操作,不把它写进历史列表

With Transform 
     .Reset 
     .Name "component1:p2_1_1" 
     .Vector "1", "2", "0" 
     .UsePickedPoints "False" 
     .InvertPickedPoints "False" 
     .MultipleObjects "False" 
     .GroupObjects "False" 
     .Repetitions "1" 
     .MultipleSelection "False" 
     .Transform "Shape", "Translate" 
End With

2.把所需的CST操作的VBA代码打到matlab里形成字符串,再用invoke函数把这个字符串写进CST的历史列表,这个操作就对修改模型友好多了,对应的VBA代码同上。

sCommand=''; %初始化sCommand,这也是随便起的名字
sCommand = [sCommand 'With Transform'];
sCommand = [sCommand 10 '.Reset'];%10在VBA语言里是换行的意思
sCommand = [sCommand 10 '.Name "',Str_Component,':' ,P2,'"'];
sCommand = [sCommand 10 '.Vector "1","2","0"'];
sCommand = [sCommand 10 '.UsePickedPoints "False" '];
sCommand = [sCommand 10 '.InvertPickedPoints "False" '];
sCommand = [sCommand 10 '.MultipleObjects "False" '];
sCommand = [sCommand 10 '.GroupObjects "False" '];
sCommand = [sCommand 10 '.Repetitions "1" '];
sCommand = [sCommand 10 '.MultipleSelection "False" '];
sCommand = [sCommand 10 '.Transform "Shape", "Translate" '];
sCommand = [sCommand 10 'End With'];     
invoke(mws, 'AddToHistory',['transform:',Str_Component,':',P2],sCommand);%这一步就是把字符串写进历史列表里。

注,往字符串里写数值变量的范例:
v1、v2、v3各存一个数

sCommand = [sCommand 10 '.Vector "',int2str(v1),'","',int2str(v2),'","',int2str(v3),'"'];

不加int2str会使v1、v2、v3代表的数字被视为一个符号传递到CST,会报错,而加上后就是以字符串形式传递,就可以正常运行。

其他操作见CST帮助文件,仿写就对了。

cst联合python仿真 cst matlab联合仿真_字符串_03

cst联合python仿真 cst matlab联合仿真_MATLAB_04

参考资料:

CST帮助文件

CST进阶之路——MATLAB-CST联合仿真(建模与仿真) CST进阶之路——MATLAB-CST联合仿真(建模与仿真)_哔哩哔哩_bilibili

知乎专栏:MATLAB & CST联合仿真技术 MATLAB & CST联合仿真技术 - 知乎

CST仿真超材料教程完整版,反射型单元到反射阵天线综合过程 CST仿真超材料教程完整版,反射型单元到反射阵天线综合过程_哔哩哔哩_bilibili