Simulink 批量更改模块属性
目录
1 思路
模型搭建过程中,后期往往遇到某种模块的属性配置错误,逐个更改起来十分头大,借用脚本可方便快捷的完成。
思路比较简单:
- 找到符合的模块;
- 更改模块属性。
首先介绍几个函数,函数的权威说明还是参考 Mathworks 帮助页面。
2 find_system()
该函数返回对象可以是系统、模块、信号线、接口,甚至注释。
返回的内容为 cell array,有多少个符合的结果就有多少行 cell。
语法:
Objects = find_system(System,Name1,Value1,Name2,Value2,…)
该函数用法灵活,Name 和 Value 可以是模块属性,也可以是函数的一些配置,捡一些常用的汇总如下,持续更新:
Name |
Value |
Comment |
SearchDepth |
整数 |
搜索的深度 |
BlockType |
模块类型名,即在 Library 中的名字 |
模块类型 |
FindAll |
on/off |
是否查找所有类型,包括block、line… |
type |
block/line/port/annotation |
查找的类型 |
regexp |
on/off |
是否使用正则表达式 |
CaseSensitive |
on/off |
是否区分大小写 |
FirstResultOnly |
on/off |
是否只返回第一个符合的结果 |
MatchFilter |
@函数句柄 |
筛选条件在函数中定义,函数返回的是布尔值 |
示例:
results1 = find_system('BMS','BlockType','Gain','Gain','1') % 查找 BMS 中所有 Gain 值为 1 的 Gain 模块
results2 = find_system('SearchDepth','1','regexp','on','Name','Diag') % 在模型顶层查找 Name 以 Diag 开头的模块
3 get_param()
获取参数名称和值。
语法:
ParamValue = get_param(Object, Parameter)
Object 可以是 model、block、root 三者的 Name 或 handle;
Parameter 可以是 model、block、root 三者的 Parameter;
Paramvalue 可以是 model、block、root 三者的 Parameter 的 name 或 value。
示例:
result1 = get_param('BMS','SolverType') % 获取 BMS 的 Solver 类型
result2 = get_param('BMS/CANConfig','ObjectParameters') % 获取 BMS 下的子模块 CANConfig 的所有属性
% 如果要获得某个模块的参数,Object 需要该模块的完整路径
% 如果要获得选中模块的参数,Object 可直接填写 gcb(get current block)
4 set_param()
设置系统和模块的参数值。
语法:
set_param(Object,ParaName1,Value1,ParaName2,Value2,…)
Object 可以是 model 或 block 这两者的 Name 或 handle
示例:
set_param('BMS/CANConfig','Position',[20 20 100 100]) % 设置子模块 CANConfig 的位置
set_param()
5 应用
还是用例子来展示:
% 该例实现的是,将所有 Constant 的 Name 设置成和 Value 一致
blks = find_system(bdroot,'Name','Constant'); % 获得所有的 Constant blocks
for ii = 1:length(blks)
result = get_param(blks{ii},'Value'); % 获得每个 block 的 Value 属性值
set_param(blks{ii},'Name',result); % 将 Name 属性值设置为 Value 属性值
end
上一篇: linux切换python版本
下一篇: Linux切换python版本