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总线信号层次结构】

相关推荐
slandarer13 小时前
MATLAB | 如何使用MATLAB绘制弧形图/弧长链接图(arc diagram)
matlab
ghie909016 小时前
基于学习的模型预测控制(LBMPC)MATLAB实现指南
开发语言·学习·matlab
cici1587417 小时前
非线性模型预测控制(NMPC)基于CasADi的MATLAB实现
开发语言·matlab
t1987512818 小时前
MATLAB模糊数学模型(Fuzzy Mathematical Model)实现指南
开发语言·matlab
沅_Yuan18 小时前
基于贝叶斯优化的稀疏高斯过程回归(BO-SGPR)多输入单输出回归模型【MATLAB】
神经网络·机器学习·matlab·回归·回归预测·贝叶斯优化
Evand J18 小时前
MATLAB批量保存现有绘图窗口的方法,简易方法,直接保存到当前目录,不手动设置
开发语言·matlab·教程
feifeigo12318 小时前
航天器交会的分布式模型预测控制(DMPC)MATLAB实现
开发语言·分布式·matlab
沅_Yuan19 小时前
基于不确定性量化的CNN-LSTM-Attention多输入单输出回归模型【MATLAB】
神经网络·matlab·回归·cnn·lstm·回归预测
551只玄猫19 小时前
【数学建模 matlab 实验报告9】数据的统计分析与描述
数学建模·matlab·数据分析·课程设计·实验报告
机器学习之心21 小时前
Matlab基于RF随机森林的锂电池剩余寿命预测
随机森林·matlab·锂电池剩余寿命预测·rf随机森林