Simulink建模助手系列-4【批量添加信号线】

Simulink建模助手系列-4

功能介绍

  Simulink建模有时需要在多个单输出端口和多个单输入端口模块之间添加信号线,如在多个Constant和多个Goto之间添加信号线。

实现效果分别如下:

批量添加信号线

实现方法

  实现批量添加信号线的功能,涉及的内容主要有:

  • 分别获取选中的具有输出端口和输入端口的模块。
  • 分别对两类端口进行排序。
  • 逐对添加信号线。
    实现该功能的主要流程如下:

主要代码

  有些函数如果在之前的文章中已经进行了介绍,这里就仅简单说明下用来干什么。

1)获取选中的模块

matlab 复制代码
% 获取具有输出端口的模块,即信号线左边的模块
src_types = {'Inport','From','Constant'};
srcs = [];
for i = 1:length(src_types)
    btmps  = find_system(gcs, ...
        'SearchDepth', 1, ...
        'Selected', 'on', ...
        'BlockType', src_types{i});
    srcs = [srcs;btmps];
end

% 获取具有输入端口的模块,即信号线右边的模块
dst_types = {'Outport','Goto','Terminator','Scope'};
dsts = [];
for i = 1:length(dst_types)
    btmps  = find_system(currentSystem, ...
        'SearchDepth', 1, ...
        'Selected', 'on', ...
        'BlockType', dst_types{i});
    dsts = [dsts;btmps];
end

通过预设模块的类型,明确可以处理的模块类型有哪些,其中哪些是属于输出模块,哪些是输入模块。利用find_system()分别获取选中状态的这些类型的模块。

2)对选中模块进行排序

因为需要分别具有输出端口和具有输入端口的模块进行排序,所以将排序代码封装成函数。

matlab 复制代码
% 从上到下顺序对模块进行排序的自定义函数
blocks_sorted = function sortBlocks(blocks)
	num_blocks = length(blocks);
	block_positions = zeros(num_blocks , 2); % 存储 [索引, Y坐标]
	for i = 1:num_blocks 
	    pos = get_param(blocks{i}, 'Position');
	    block_positions(i, 1) = i;          % 存储原始索引
	    block_positions(i, 2) = pos(2);     % 存储顶部的Y坐标
	end
	positions_sorted = sortrows(block_positions, 2);
	blocks_sorted = blocks(positions_sorted (:, 1));
end
matlab 复制代码
% 对输出模块排序
srcs = sortBlocks(srcs);

% 对输入模块排序
dsts = sortBlocks(dsts);

利用自定义的模块排序函数分别对输出模块和输入模块进行排序。因为获取的模块排序不一定是按照从上到下的顺序,所以在添加信号线前需要进行排序,保证输出模块和输入模块的对应关系。

3)逐对添加信号线

matlab 复制代码
% 确定成对的输出和输入模块的数量
min_len = min(length(srcs),length(dsts));

% 逐对添加信号线
for i = 1:min_len
    try
        add_line(gcs, ...
            [get_param(srcs{i}, 'Name') '/1'], ...
            [get_param(dsts{i}, 'Name') '/1'], ...
            'autorouting','smart');
    end
end

考虑到有可能出现信号线添加失败的情况,这里简单地采用try语句进行错误的处理,也可以根据需要进行针对性地处理。

系列文章

Simulink建模助手系列-1【批量创建Goto和From】
Simulink建模助手系列-2【自动创建缺失的Goto】
Simulink建模助手系列-3【批量创建Inport和Outport】

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