欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Simulink 批量更改模块属性

程序员文章站 2022-04-18 20:01:11
...

目录

1 思路

2 find_system()

3 get_param()

4 set_param()

5 应用


1 思路

模型搭建过程中,后期往往遇到某种模块的属性配置错误,逐个更改起来十分头大,借用脚本可方便快捷的完成。

 

思路比较简单:

  1. 找到符合的模块;
  2. 更改模块属性。

 

首先介绍几个函数,函数的权威说明还是参考 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