上一篇博客《Matlab编程技巧:批量获取/修改Simulink模块参数》中,说明了如果通过matlab脚本批量获取/修改Simulink模块参数。具体方法可以参考https://blog.csdn.net/u013288925/article/details/103943921
Simulink中的信号线也是带有一些属性的,譬如名称和是否关联Simulink Signal Obj。本文介绍几个修改Simulink信号线的函数,并举例说明通过脚本修改信号线参数的方法。

文章目录

  • 1 相关函数
    • 1.1 搜索出符合条件的模块、信号线、端口等
    • 1.2 获取信号线某个属性的值
    • 1.3 设置信号线某个属性的值
  • 2 实例应用

1 相关函数

1.1 搜索出符合条件的模块、信号线、端口等

函数 Objects = find_system(System,Name,Value)
输入参数 1)System——模型名称;2)Name,Value——搜索条件的名称、值,可以输入多组名称、值
返回值 1)Objects——符合搜索条件的模块路径的元胞数组

这个函数和Matlab技巧(二)中是完全一样的,只是输入的参数比较特殊,‘FindAll’参数的值必须为’on’,‘Type’的参数必须为’Line’。这样的话,函数就会返回所有信号线的句柄。举个例子,假如有如下Simulink模块:

运行上面那句find_system的结果如下所示:

>> SignalHandle = find_system(gcs,'FindAll','on','Type','Line')SignalHandle =42.000143.000141.000140.0001

函数会返回信号线句柄组成的数组。如果信号线已经被命名,find_system里的参数可以再加上’Name’属性来定位到那条信号线的句柄。

1.2 获取信号线某个属性的值

函数 V = get(H,‘PropertyName’)
输入参数 1)H——信号线句柄,即find_system输出参数;2)PropertyName——信号线属性
返回值 1)V——信号线属性的值

如果’PropertyName’不写,则函数返回含有该信号线句柄所有的参数值的结构体。如果不知道属性的字符串表示,也可以通过这种方式查看。以find_system输出的第一个句柄为例,如下所示

>> SignalProperties = get(SignalHandle(1))SignalProperties = 包含以下字段的 struct:DataLogging: 0DataLoggingNameMode: 'Use signal name'DataLoggingName: ''DataLoggingDecimateData: 0DataLoggingDecimation: '2'DataLoggingSampleTime: '-1'DataLoggingLimitDataPoints: 0DataLoggingMaxPoints: '5000'TestPoint: 0StorageClass: 'Auto'RTWStorageTypeQualifier: ''MustResolveToSignalObject: 0SourcePort: 'In2:1'SignalObjectClass: 'Simulink.Signal'SignalObject: []CoderInfo: []DocumentLink: ''ShowPropagatedSignals: 0TaskTransitionSpecified: 0TaskTransitionIC: '0'ExtrapolationMethod: 'Use global setting'TaskTransitionType: 'Use global setting'UserSpecifiedLogName: ''SignalPropagation: 'off'Path: ''Name: ''Tag: ''Description: ''Type: 'line'Parent: 'demo'Handle: 42.0001HiliteAncestors: 'none'RequirementInfo: ''FontName: 'auto'FontSize: -1FontWeight: 'auto'FontAngle: 'auto'Selected: 'off'SegmentType: 'trunk'SrcPortHandle: 25.0001SrcBlockHandle: 5.0001DstPortHandle: 32.0001DstBlockHandle: 10.0001Points: [2×2 double]LineParent: -1LineChildren: []SignalNameFromLabel: ''Connected: 'on'

1.3 设置信号线某个属性的值

函数 set(H,‘PropertyName’,PropertyValue)
输入参数 1)H——信号线句柄,即find_system输出参数;2)PropertyName——信号线属性;3)PropertyValue——该属性的值
返回值

如果想要把第一个信号线的名称设置为“Signal1”,可以通过以下脚本:

>> set(SignalHandle(1),'Name','Signal1')

那么模型中的信号线就会自动加上名字了:

2 实例应用

通常来说,对于未命名的信号线,很难直接定位到它的句柄,因为它们的属性默认基本上都是一样的。但是实际情况中,我们只需要找到连接在特定模块上的信号线就行了,因此可以通过与信号线相连接的模块来顺腾摸瓜定位到信号线句柄。
譬如,在下图的模型中,如果要找到两个顶层Inport连接的信号线,将其命名为和Inport相同的名字并关联Simulink Signal Obj,可以通过以下几步:

1)通过fing_system获取Inport模块路径
2)获取Inport模块输出端口句柄
3)Inport模块输出端口句柄即为信号线源端口(SrcPortHandle),以此获取信号线句柄
4)set函数设置信号线名称和关联Simulink Signal Obj
脚本如下:

InportCell = find_system(bdroot,'SearchDepth',1,'BlockType','Inport');  %获取顶层Inport模块路径
for i = 1:length(InportCell)  InportName = get_param(InportCell{i},'Name');  %输入模块名称InportHandle = get_param(InportCell{i},'Handle');  %信号线句柄PortHandle = get(InportHandle,'PortHandles');  %端口句柄OutportHandle = PortHandle.Outport;  %输出端口句柄LineHandle = find_system(bdroot,'SearchDepth',1,'FindAll','on','Type','Line','SrcPortHandle',OutportHandle);  %通过输出端口句柄定位到信号线句柄set(LineHandle,'Name',InportName)  %设置信号线名称为输入模块名称set(LineHandle,'MustResolveToSignalObject',1)   %设置信号线关联Simulink Signal Obj
end

运行脚本后,就自动完成了名称设置和关联Simulink Signal Obj,可以看到模型中信号线的名字和左边的小叉子:

以上所有代码均在Matlab2018a/win10环境下测试通过。

>>返回个人博客总目录

Matlab编程技巧:通过脚本获取/修改Simulink信号线参数相关推荐

  1. Matlab编程技巧:通过Matlab脚本批量修改Simulink模块的大小,背景颜色

    Matlab编程技巧:通过M脚本修改Simulink模块的大小,背景颜色 M脚本修改Simulink模块的大小,背景颜色 选取一个Simulink模型,获取模块参数,在命令行输入代码: sysBolc ...

  2. Matlab编程技巧:打开模型时加载数据字典

    本文研究通过回调函数,在打开模型时加载数据字典到工作空间中. 文章目录 1 问题引入 2 简单例程 2.1 模型配置 2.2 数据字典表格 2.3 创建脚本 3 效果演示 4 总结 1 问题引入 在& ...

  3. Matlab编写一个脚本计算e,Matlab编程基础I脚本.PPT

    Matlab编程基础I脚本 数学软件 Matlab 本讲主要内容 Matlab 编程 M 文件 M 文件 编程示例 编程示例 本讲主要内容 关系运算 关系运算举例 逻辑运算 逻辑运算 逻辑运算 一些测 ...

  4. simulink模块名称显示设置_GUI界面实现批量修改Simulink模块参数名称

    上一篇文章简要介绍了批量修改参数名称的方法,但是每一次批量修改不同的模块参数名称时,都需要手动修改代码.今天我们用Matlab自带的GUI功能来完成批量修改的任务. GUI是什么?Graphical ...

  5. 30多个实用matlab编程技巧

    感谢关注懂科学的程序员公众号!如果公众号文章对您有帮助,别忘了点击分享和"在看"哦!若您对公众号有什么意见或建议,请在公众号中回复或在任意文章底部留言! 今天给大家介绍一些编程小技 ...

  6. matlab编程数学基础,数学软件 Matlab ——编程基础(脚本).ppt

    数学软件 Matlab 本讲主要内容 Matlab 编程入门 M 文件 M 文件 编程示例 本讲主要内容 关系运算 关系运算举例 逻辑运算 逻辑运算表 逻辑运算 一些测试函数 运算优先级 本讲主要内容 ...

  7. Matlab编程技巧:通过脚本导入Excel数据字典

    本文研究如何将Excel表格中的数据字典导入到Matlab工作空间中,并在建模时使用. 文章目录 1 数据字典的概念及管理方式 2 Excel表格模板建立 3 脚本导入数据字典 3.1 导入方法 3. ...

  8. Matlab编程技巧:导入A2L文件

    本文研究如何通过Matlab脚本导入A2L文件,并将A2L文件的一些信息写入表格中. 文章目录 1 A2L文件 2 A2L文件的解析 3 将A2L信息导入表格 3.1 A2L中的变量信息 3.2 Ma ...

  9. Matlab编程技巧:MBD中常用的Matlab函数

    在MBD(基于模型开发)中,需要掌握一些常用的函数.这些函数经常用于搭建集成环境.生成手写代码.工具链开发等.恰当地使用函数编写Matlab脚本可以提高MBD工作的自动化程度,提高工作效率. 本文会分 ...

最新文章

  1. VTK:可视化之ColorAnActor
  2. 【qxbt day1】 P2367 语文成绩
  3. 嵌入式Linux启动过程中的问题积累
  4. ubuntu 18 Cannot find installed version of python-django or python3-django.
  5. qscrollarea 设置滚动位置_爱剪辑:影视剧滚动字幕片尾,效果竟然如此高端精美...
  6. 数据访问层代码自动生成
  7. 【英语学习】【Daily English】U15 Culture L01 You'll be used to life here before long
  8. Office 365有个AI「工作场所分析」掌握组织人力资源
  9. 用Java设计一个通讯录,保存读者的信息。
  10. SSM整合时IDE: File is included in 4 contexts
  11. 力扣-82 删除排序链表中的重复元素 II
  12. .net 中Dictionary的遍历
  13. 阿里巴巴JAVA开发手册资源分享
  14. 苹果手机计算机歌曲谱,iPhone技巧篇 手机音乐如何导出至电脑
  15. 追求自由的穷游网---十年一剑
  16. QT 在注释中遇到意外的文件结束
  17. Rife算法的一种Matlab实现
  18. NLP实践——VQA/Caption生成模型BLIP-2的应用介绍
  19. Windows下使用NIF扩展Erlang方法
  20. java日期转换为oracle日期

热门文章

  1. 单基因gsea_把基因数量搞小的数据挖掘想法是好的但可能不现实
  2. 计算机文化课是指哪几科,文科是指哪几科
  3. python编程课程-吐血整理!程序员喜爱的13个免费Python课程
  4. diango使用体验
  5. iOS及C语言的简介
  6. Vue框架的学习(Vue的基础指令操作二 V-For)第二课
  7. 1147: 5005 奶牛计算器(-2进制)
  8. ”互联网行业还在等金三银四或是金九银十?“,我劝你还是早做打算
  9. mysql增删改查 简称_mysql增删改查基本语句
  10. 视觉合集5~2022