Simulink建模助手系列-7
- 功能介绍
- 实现方法
- 主要代码
-
- 1)获取选中的From模块并排序
- [2)创建Bus Creator并设置端口数量](#2)创建Bus Creator并设置端口数量)
- 3)添加信号线,并命名
- [4)调整Bus Creator的位置](#4)调整Bus Creator的位置)
- [5)调整Bus Creator大小,对齐信号线:略](#5)调整Bus Creator大小,对齐信号线:略)
- 系列文章
-
- [- 基础篇:](#- 基础篇:)
- [- 进阶篇:](#- 进阶篇:)
功能介绍
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总线信号层次结构】