20210409 学习内容

您所在的位置:网站首页 matlab与catia交互 20210409 学习内容

20210409 学习内容

#20210409 学习内容| 来源: 网络整理| 查看: 265

记录一下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文件内容的修改其实主要也体现在历史列表中。

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

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

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帮助文件

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

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

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3