首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 23-09-22 00:44
  • 4741
  • 7727
blog.csdn.net

上一篇博客《Matlab编程技巧:批量获取/修改Simulink模块参数》中,说明了如果通过matlab脚本批量获取/修改Simulink模块参数。具体方法可以参考http://iyenn.com/rec/319349.html
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.0001
   43.0001
   41.0001
   40.0001
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

函数会返回信号线句柄组成的数组。如果信号线已经被命名,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: 0
           DataLoggingNameMode: 'Use signal name'
               DataLoggingName: ''
       DataLoggingDecimateData: 0
         DataLoggingDecimation: '2'
         DataLoggingSampleTime: '-1'
    DataLoggingLimitDataPoints: 0
          DataLoggingMaxPoints: '5000'
                     TestPoint: 0
                  StorageClass: 'Auto'
       RTWStorageTypeQualifier: ''
     MustResolveToSignalObject: 0
                    SourcePort: 'In2:1'
             SignalObjectClass: 'Simulink.Signal'
                  SignalObject: []
                     CoderInfo: []
                  DocumentLink: ''
         ShowPropagatedSignals: 0
       TaskTransitionSpecified: 0
              TaskTransitionIC: '0'
           ExtrapolationMethod: 'Use global setting'
            TaskTransitionType: 'Use global setting'
          UserSpecifiedLogName: ''
             SignalPropagation: 'off'
                          Path: ''
                          Name: ''
                           Tag: ''
                   Description: ''
                          Type: 'line'
                        Parent: 'demo'
                        Handle: 42.0001
               HiliteAncestors: 'none'
               RequirementInfo: ''
                      FontName: 'auto'
                      FontSize: -1
                    FontWeight: 'auto'
                     FontAngle: 'auto'
                      Selected: 'off'
                   SegmentType: 'trunk'
                 SrcPortHandle: 25.0001
                SrcBlockHandle: 5.0001
                 DstPortHandle: 32.0001
                DstBlockHandle: 10.0001
                        Points: [2×2 double]
                    LineParent: -1
                  LineChildren: []
           SignalNameFromLabel: ''
                     Connected: 'on'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

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

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

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

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

那么模型中的信号线就会自动加上名字了:
在这里插入图片描述

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

运行脚本后,就自动完成了名称设置和关联Simulink Signal Obj,可以看到模型中信号线的名字和左边的小叉子:
在这里插入图片描述
以上所有代码均在Matlab2018a/win10环境下测试通过。

>>返回个人博客总目录

注:本文转载自blog.csdn.net的chhttty的文章"https://blog.csdn.net/u013288925/article/details/104065140"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top