simulink建模助手系列-1【批量创建goto和from】

Simulink建模助手系列-1

功能介绍

  Simulink建模有时需要根据多个Goto创建From,或者根据多个From创建Goto。该功能主要是为了实现这个需求,实现效果如下:

根据选中的Goto创建From模块

根据选中的From创建Goto模块

实现方法

  为了实现这个功能,涉及的内容主要有:

  • 获取选中的模块,并从选中的模块中找到指定类型的模块,即Goto和From。
  • 创建对应模块,如goto创建from,from创建goto。
  • 设置新建模块的的属性,包括Tag、位置和大小。位置是新建的From放在Goto的右边,新建的Goto放在From的左边;新建模块的大小参考原模块。
    此外,对于新建的是Goto模块时,增加已存在检查:是否已经存在同名的Goto模块了。

以选中Goto创建From为例主要流程如下:

主要代码

1)获取选中的Goto模块

matlab 复制代码
currentSystem = gcs; % 获取当前模型
 %获取选中的Goto
selectedGotos = find_system(currentSystem, ...
                'SearchDepth', 1, ...
                'Selected', 'on', ...
                'BlockType', 'Goto');  

主要用到find_system()函数,Matlab的帮助还是比较详细的,这里就不多赘述了。如果选中了多个Goto,这里会以cell类型返回所有选中的Goto。

2)获取Goto模块的信息

matlab 复制代码
% 逐个获取Goto模块的信息
gotoPath = selectedGotos{i};
gotoTag = get_param(gotoPath, 'GotoTag');
gotoPos = get_param(gotoPath, 'Position');
parentPath = get_param(gotoPath,'Parent');

主要用到get_param()函数,Matlab的帮助虽然详细,但是在初始阶段,可能会不知道这个模块有哪些属性,这些属性分别是什么,至少我是这样的, 这里介绍一种方法:通过get()函数获取模块的所有信息。(感兴趣的可参考:通过get()函数获取Simulink模块的所有属性

3)创建From模块

matlab 复制代码
% 根据Goto的路径构建From
fromName = [parentPath,'/From'];
% 创建From模块
fromObj = add_block(['simulink/Signal Routing/From'], ...
            fromName, 'MakeNameUnique','on');

主要用到add_block()函数,选项'MakeNameUnique'='on',是为了保证名称的一致性,如果模型中已经有了同名的From,会自动给新建的From一个唯一的新名称。

4)设置From模块的属性

matlab 复制代码
% 设置Tag
set_param(fromObj, 'GotoTag', gotoTag);
% 计算From的位置和大小
x_move = 20;
x1 = gotoPos(3)+x_move; % From在Goto的右侧
x2 = x1+gotoPos(3)-gotoPos(1); % From继承Goto的宽度
fromPos = [x1, gotoPos(2), x2, gotoPos(4)];
% 设置Position
set_param(fromObj, 'Position', fromPos);

主要用到set_param()函数,按需对新建From的属性进行赋值。

完整代码

根据选中Goto创建From模块的完整代码如下:

matlab 复制代码
currentSystem = gcs; % 获取当前模型
 %获取选中的Goto
selectedGotos = find_system(currentSystem, ...
                'SearchDepth', 1, ...
                'Selected', 'on', ...
                'BlockType', 'Goto');  
% 逐个创建From
for i = 1:length(selectedGotos )
	% 逐个获取Goto模块的信息
	gotoPath = selectedGotos{i};
	gotoTag = get_param(gotoPath, 'GotoTag');
	gotoPos = get_param(gotoPath, 'Position');
	parentPath = get_param(gotoPath,'Parent');

	% 根据Goto的路径构建From
	fromName = [parentPath,'/From'];
	% 创建From模块
	fromObj = add_block(['simulink/Signal Routing/From'], ...
	            fromName, 'MakeNameUnique','on');
	            
	% 设置Tag
	set_param(fromObj, 'GotoTag', gotoTag);
	% 计算From的位置和大小
	x_move = 20;
	x1 = gotoPos(3)+x_move; % From在Goto的右侧
	x2 = x1+gotoPos(3)-gotoPos(1); % From继承Goto的宽度
	fromPos = [x1, gotoPos(2), x2, gotoPos(4)];
	% 设置Position
	set_param(fromObj, 'Position', fromPos);
end

  以上就是选中Goto批量创建From的主要代码,选中From批量创建Goto的与之类似,但是因为不能同时存在多个同Tag标记的Goto,所以会多一个查重的步骤,查重可以借助find_system()函数查找是否已存在同名的Goto,参考代码如下:

matlab 复制代码
sameTagGotos = find_system(currentSystem, ...
                    'SearchDepth', 1, ...
                    'BlockType', 'Goto', ...
                    'GotoTag', gotoTag);
if ~isempty(sameTagGotos)
% 已存在同名的Goto模块,跳过创建该Goto
end
相关推荐
Evand J5 小时前
【MATLAB例程,图像滤波降噪12】加权中值滑动窗口滤波(WMF)图像降噪,包含滤波质量评价。附代码下载链接
开发语言·图像处理·人工智能·计算机视觉·matlab·滑动窗口·滤波
Evand J7 小时前
【MATLAB例程,图像降噪7】高斯加权滑动窗口滤波,用于图像降噪,带质量评价,附代码下载链接
开发语言·图像处理·matlab·滑动窗口·滤波·降噪·图像滤波
菜鸟~noob23311 小时前
【电子战】第07篇:多普勒测向【含matlab代码】
android·开发语言·matlab
可编程芯片开发11 小时前
基于压电能量收集和MPPT最大功率跟踪算法的IoT压力传感器电源系统Simulink建模与仿真
物联网·matlab·simulink·mppt·压电能量收集·iot压力传感器
菜鸟~noob23311 小时前
【电子战】第12篇:TDOA 定位——双曲线与等时差线【含matlab代码】
开发语言·matlab
菜鸟~noob2331 天前
【电子战】 第09篇:阵列信号处理——波束形成、MVDR、MUSIC【含matlab代码】
开发语言·matlab·信号处理
菜鸟~noob2331 天前
【电子战】第08篇:多普勒测向的工程实现与优化【含matlab代码】
开发语言·matlab
菜鸟~noob2331 天前
【电子战】第06篇:干涉仪与相位差测向【含matlab代码】
开发语言·matlab
菜鸟~noob2331 天前
【电子战】测向精度极限——克拉美-罗下限(CRLB)与误差分析【含matlab代码】
开发语言·matlab
路径规划6662 天前
(MATLAB代码) 船舶轨迹聚类:K-means 算法(260912)
算法·matlab·kmeans