Simulink建模助手系列-7【根据From创建Bus Creator】

Simulink建模助手系列-7

功能介绍

  Simulink建模有时需要用到Bus总线,可能会涉及创建到Bus Creator,并逐个对总线信号命名。该功能就是为了提高创建效率,根据From自动创建Bus Creator,并自动进行连线和命名。

实现效果如下:

根据From创建Bus Creator

实现方法

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

  • 获取选中的From模块并排序。
  • 创建Bus Creator并设置端口数量。
  • 在From和Bus Creator之间添加信号线,并命名。
  • 调整Bus Creator位置和大小。
  • 调整From的位置以对齐信号线。

实现该功能的主要流程如下:

主要代码

  本文用到的部分方法在之前的文章中已经进行了介绍并封装成了函数,这里就直接调用,不再赘述代码。

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

1)获取选中的From模块并排序

matlab 复制代码
% 获取当前路径
current_system = gcs;

% 获取选中的模块
selected = getSelectedBlock(current_system,{'From'});

% 从上到下进行排序
selected = sortBlocks(selected); 

利用自定义函数getSelectedBlock()获取选中的From模块。可见《Simulink建模助手系列-6

利用sortBlocks()对选中的From模块进行从上到下的排序。可见《Simulink建模助手系列-4

2)创建Bus Creator并设置端口数量

matlab 复制代码
% 创建Bus Create
num_b = size(selected,1); % 选中的Form个数
input_name = [current_system '/' 'BusCreator'];
block_source = 'simulink/Commonly Used Blocks/Bus Creator';
new_obj = add_block(block_source, input_name, ...
    'MakeNameUnique','on'); % 确保名称是唯一
set_param(new_obj,'Inputs',num2str(num_b)); % 设置bus接口数

利用add_block()函数创建Bus Creator模块,并保证名称不冲突。根据选中的From的数量设置Bus Creator的端口数,属性为Inputs。

3)添加信号线,并命名

matlab 复制代码
% 将From与Bus进行连接,并对信号线进行命名(对Bus接口命名)
bus_name = get_param(new_obj,'Name');
for i = 1:num_b
    % 添加信号线
    srci = selected{i};
    l_src = sprintf('%s/%d',get_param(srci,'Name'),1);
    l_dst = sprintf('%s/%d',bus_name,i);
    h_l = add_line(current_system, l_src,l_dst, ...
        'autorouting','smart');
    % 重命名信号线
    set_param(h_l,'Name',get_param(srci,'GotoTag'));
end

逐个From添加信号线,并根据From的GotoTag的值对信号线重命名,即设置该Bus Creator端口的信号名。

4)调整Bus Creator的位置

matlab 复制代码
% 根据第1个From设置Bus Selector的位置
ref_pos_all = cell2mat(get_param(selected, 'Position'));
ref_pos = ref_pos_all(1,:);
ref_pos(3) = max(ref_pos_all(:,3))+100;

bus_ports = get_param(new_obj, 'PortHandles');
port_old_pos = get(bus_ports.Inport(1), 'Position');
port_new_pos = [ref_pos(3), (ref_pos(2)+ref_pos(4))/2];

bus_old_pos = get_param(new_obj, 'Position');
bus_new_pos = bus_old_pos + repmat(port_new_pos - port_old_pos,1,2);

set_param(new_obj, 'Position', bus_new_pos);

上面是根据第1个From(即被选中的最上面的From)调整Bus Creator的位置,将Bus Creator的第1个端口与之高度对齐,水平方向则是放在最右侧的From的右侧。

更多关于美化布局的内容,如调整Bus Creator大小、调整From对齐信号线,可参考《Simulink建模助手系列-6》的内容,里面介绍了如何调整子系统和对齐信号线的方法,该方法对Bus Creator也适用。

5)调整Bus Creator大小,对齐信号线:略

PS:该方法可封装成函数,集成到Simulink建模助手的主界面中。本文的主要代码集成后的效果如下:

示例-根据From创建Bus Creator

系列文章

- 基础篇:

Simulink建模助手系列-1【批量创建Goto和From】
Simulink建模助手系列-2【自动创建缺失的Goto】
Simulink建模助手系列-3【批量创建Inport和Outport】
Simulink建模助手系列-4【批量添加信号线】
Simulink建模助手系列-5【批量对齐模块】
Simulink建模助手系列-6【自动调整子系统高度和信号线】

- 进阶篇:

Simulink建模助手系列-进阶1【界面化并集成到Simulink的右键菜单】
Simulink建模助手系列-进阶2【解析Bus总线信号层次结构】

相关推荐
weixin_307779132 天前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab
菜鸟~noob2333 天前
【太空电子战】从CCS到Meadowlands:反通信系统的二十年演进史【含matlab代码】
开发语言·matlab
菜鸟~noob2334 天前
【太空电子战】Meadowlands作战验收:美国太空军可逆干扰能力的里程碑【含matlab代码】
matlab·电子战
菜鸟~noob2334 天前
【Bonjour】华为Peerium架构深度解析:从冯·诺依曼到百万处理器“一台计算机”,附MATLAB性能仿真【含matlab代码,可直接运行】
开发语言·matlab·华为·peerium
民乐团扒谱机4 天前
【手把手通信仿真】FSK与GFSK调制原理对比及MATLAB全实现,附频谱波形分析
matlab·蓝牙·微电子·通信技术·通信原理·gfsk·fsk
ι:5 天前
单相桥式全控整流仿真从零复现教学
windows·学习·matlab·simulink
菜鸟~noob2335 天前
【电子战】第14篇:TOA 定位——圆交汇与到达时间【含matlab代码】
开发语言·matlab
简简单单做算法6 天前
基于灰狼算法和贝叶斯联合优化的BiLSTM(GWO-BO-BiLSTM)一维时间序列预测算法matlab仿真
matlab·一维时间序列预测·gwo-bo-bilstm
Evand J6 天前
【MATLAB例程|图像滤波降噪13】局部噪声方差自适应滤波(LNR)图像降噪与效果展示。附完整例程的下载链接
图像处理·计算机视觉·matlab·滤波·代码·降噪
weixin_307779137 天前
C++代码实现MATLAB中的ode23t函数功能
开发语言·c++·算法·matlab