identity_insert 如何改为on_如何找到模型中你想要找的所有元素

本文摘要:

主要介绍find_system()这个函数,包括函数的搜索原理,函数详细的参数介绍和常用的使用场景实例。

一个简单的例子

我们先来看一个简单的模型,然后我想找出这个模型中所有输入端口的名称。

17716179fa5c1abb81ef10f51e035981.png

那可以执行如下的命令:

obj_inport = find_system('first_order_filter_demo','BlockType','Inport')


运行结果如下:

96f9b06f50ee613aa06922dc208d443c.png


其中,参数'first_order_filter_demo'是我们想要在哪个系统中去寻找,这里可以是模型名或子系统名都可以,也可以是模型或子系统的句柄。这个参数是必须的,也永远是作为第一个参数的。后两个参数是成对出现的,'BlockType' 表示想要按照模块类型这个参数来寻找,'Inport' 表示想要寻找的模块类型为 Inport。

模块属性的介绍

这里需要大家理解模块属性这一个概念,一般模型简单来说是由模块(block)和信号线(line)组成的。每一个模块以及信号线都是一个对象,会有自己的属性,我们就可以根据各个模块的属性的不同,来找出具有相同属性的某一类的元素。比如选中模型中某个模块,然后在matlab的命令窗口输入如下的命令,就能看到这个模块的所有属性以及属性得到值。

get(gcbh)

gcbh是get current block handler的缩写,get就是获取这个handler的所有属性,可以看到,就把这个模块的所有属性列出来了。

ecd5527bd293f2d00210c9a1db117a90.png

6a708bad25872501406fd445d3e98253.png


比较常用的一些属性有:
Name:这个模块的名称
Type:表示是一个模块(block)还是信号线(line)
BlockType:这个模块的类型
Port:这个是输入输出端口模块才有的属性,表示是第几个端口
PortName:端口的名称
OutDataTypeStr:模块输出的数据类型
了解了这个之后,就明白了find_system这个函数的基本原理,我们需要提炼出我们想要找的元素的共通属性,然后作为这个函数的参数,这样就可以把我们想要找的内容都找出来了。

条件组合搜索

我们把模型修改一下,最外层封装一层子系统。

ebdf8b54a944931fb05cddd59efd62cc.png

假设我们想把输入端口x的名字都改成signal_in,这时就有两个条件了,一个是模块类型是Inport,另一个是模块名叫x。find_system这个函数支持任意多个条件的组合搜索,所以我们就可以运行如下指令:

obj_inport = find_system('first_order_filter_demo','BlockType','Inport','Name','x')


运行结果如下,可以看出就只找出了名字叫x的Inport模块。

cfa3078f6eb3b55148c31f613a7d0662.png

如果想要改名字的话,就可以使用set_param这个函数,把模块的属性改为我们想要的内容

set_param(obj_inport{1},'Name','signal_in');
set_param(obj_inport{2},'Name','signal_in');

这样输入端口名就改好了,这时可以看到信号线的名字还没改,后面会介绍如何找信号线。

394399bd4cc5ef1e34774e96a08da424.png

我们可以组合任意多的条件,来达到搜索我们想要的元素的目的。

搜索深度

由上一个例子可以看到,搜索默认是搜索我们指定系统内部所有的内容,但是有时我们只想搜索当前层级的内容,这时就可以加上'SearchDepth'这个参数。'SearchDepth'为1的话,就表示只搜索当前层级中的内容,如果为2的话,就是搜索当前层级以及当前层级下一个层级的内容。

比如我们想要知道模型的有哪些输入和输出,那么可以执行如下的指令:

obj_inport = find_system('first_order_filter_demo','SearchDepth','1','BlockType','Inport')
obj_outport = find_system('first_order_filter_demo','SearchDepth','1','BlockType','Outport')

可以看到,这时就只找出的模型top level的内容

26a616722988e89f12eea812a21830b5.png

搜索信号线

搜索信号线的话,需要把参数'FindAll'设为on,'FindAll'默认是off,表示只会搜索模块,设为on后,就会搜索信号线以及注释的内容了。然后对于信号线,type应该是line。之前我们把输入端口名都改为了signal_in,但信号线的名还没改,于是我们可以搜索信号线名为x的信号线,然后将其名字改为signal_in

obj_line = find_system('first_order_filter_demo','FindAll','on','type','line','name','x')
set_param(obj_line,'Name','signal_in')

可以看到,信号名也被修改好了

7a2bb99e98f0b3f4d61e2c13f2b792ed.png

利用正则表达式进行搜索

0e46f02e17d45e969e69f15946283996.png

搜索的时候还可以引入正则表达式,来帮我们提高搜索的效率。要使用正则表达式的话,需要把参数'RegExp'设为on。比如我想找到这个模型中,参数为数字的常数模块。我们知道常数模块的类型是Constant,直接找的话,就会把模型中两个常数模块都找出来。

find_system('first_order_filter_demo','BlockType','Constant')

寻找结果如下:

40ece7991ac5cdf5e093c001980346d7.png

我们加入正则表达式,其中Value是常数模块的值,"d"表示0-9的数字,"+" 表示数字至少有一个(正则表达式对于搜索和替换文本非常强大,后面会专门针对正则表达式写一篇文章)。所以这里的搜索条件就是常数模块的值是由至少一个数字构成。

find_system('first_order_filter_demo','RegExp','on','BlockType','Constant','Value','d+')

Version:1.0 StartHTML:000000293 EndHTML:000040492 StartFragment:000005480 EndFragment:000040400 StartSelection:000005480 EndSelection:000040400 SourceURL:https://mp.weixin.qq.com/cgi-bin/masssendmodify?action=edit&appmsgid=2247484037&idx=1&msgid=1000000013&token=1882564164&lang=zh_CN window._points = [+new Date()]; function wx_main(mod) { window._points && (window._points[3] = +new Date()); }; window.wx = { uin: "3288627608" || "0", lang: "zh_CN" }; window.wx_loaderror = function(ele) { var _img = new Image(); var key = 63; if (ele && ele.tagName && ele.tagName.toLowerCase() == "script") { key = 64; } _img.src = "https://badjs.weixinbridge.com/badjs?id=11&uin=" + (wx && wx.uin) + "&msg=" + encodeURIComponent("link_error:" + (ele && (ele.href || ele.src))) + "|link&from=" + encodeURIComponent(location.href) + "&level=4&_t=" + (+new Date); var key_img = new Image(); key_img.src = "https://mp.weixin.qq.com/misc/jslog?id=" + key + "&content=link_error&level=error"; if (typeof WX_BJ_REPORT != "undefined" && WX_BJ_REPORT.BadJs && typeof WX_BJ_REPORT.BadJs.report == "function") { if (ele && ele.tagName && ele.tagName.toLowerCase() == "script") { WX_BJ_REPORT.BadJs.report("jsLoadedError", ele.href || ele.src, { mid: "mpResourceMonitor" }) } else { WX_BJ_REPORT.BadJs.report("cssLoadedError", ele.href || ele.src, { mid: "mpResourceMonitor" }) } } }; if(/(registermidpage|readtemplate|findacct|resetpwd|announce|opshowpage)/.test(window.location.href)) { document.title = '微信公众平台' document.getElementById('shortcut').href = 'https://res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico'; } else { document.title = '公众号' document.getElementById('shortcut').href = 'https://res.wx.qq.com/a/fed_upload/9300e7ac-cec5-4454-b75c-f92260dd5b47/logo-mp.ico'; }

这样,搜索的结果就只有一个了

50aa7aaf04698ae32f23cc6f721f007e.png


其他参数简介

上面详细介绍了一些需要说明的参数的用法,还有还有一些比较简单的参数,在这里说明一下:

  • 'CaseSensitive':表示是否对搜索内容的大小写敏感。可以设为on或off,默认是on,表示是对大小写敏感的。
  • 'FollowLinks':表示是否要对link的模块进行搜索。可以设为on或off,默认是off,表示不会对link的模块进行搜索
  • 'LookUnderMasks':表示是否要对mask模块内部进行搜索。需要的话就设为on,不需要的话就设为off。


后记
find_system函数是自动化修改模型和统计模型内容的基础函数,配合set_param函数,以及了解模块属性后,就可以通过脚本来实现对模型的脚本化批量修改,可以大大的提高日常的工作效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值