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

相关推荐
ytttr8735 小时前
MATLAB SIFT图像配准实现
算法·机器学习·matlab
南宫萧幕6 小时前
HEV能量管理控制算法实战:从MPC/RL理论基础到Simulink闭环建模
算法·matlab·汽车·控制·pid
IT猿手6 小时前
SCI一区:章鱼优化算法(Octopus Optimization Algorithm, OOA)求解23个测试函数,出图丰富,提供完整MATLAB代码
开发语言·算法·matlab
leo__5207 小时前
单载波中继系统资源分配算法MATLAB仿真程序
算法·matlab·unity
南宫萧幕8 小时前
Python与Simulink联合仿真:基于DQN的HEV能量管理策略建模与全链路排雷实战
开发语言·人工智能·python·算法·机器学习·matlab·控制
yongui4783411 小时前
基于卷积神经网络(CNN)的盲源分离MATLAB实现
人工智能·matlab·cnn
listhi52011 小时前
基于SVM和决策树的孤岛检测MATLAB实现
决策树·支持向量机·matlab
Evand J12 小时前
【MATLAB例程】多传感器协同DOA目标跟踪与EKF滤波,输出动态目标轨迹、轨迹误差对比分析
开发语言·matlab·目标跟踪·滤波·定位·导航
简简单单做算法1 天前
基于Qlearning强化学习和Parzen窗的图像分割算法matlab仿真
matlab·图像分割·强化学习·qlearning·parzen窗
fengfuyao9851 天前
MATLAB实现自适应动态规划(ADP)方法
matlab·动态规划·代理模式