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

2024-09-03 11:38

本文主要是介绍Matlab编程技巧:通过脚本获取/修改Simulink信号线参数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一篇博客《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信号线参数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1132870

相关文章

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

Python获取浏览器Cookies的四种方式小结

《Python获取浏览器Cookies的四种方式小结》在进行Web应用程序测试和开发时,获取浏览器Cookies是一项重要任务,本文我们介绍四种用Python获取浏览器Cookies的方式,具有一定的... 目录什么是 Cookie?1.使用Selenium库获取浏览器Cookies2.使用浏览器开发者工具

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

游戏闪退弹窗提示找不到storm.dll文件怎么办? Stormdll文件损坏修复技巧

《游戏闪退弹窗提示找不到storm.dll文件怎么办?Stormdll文件损坏修复技巧》DLL文件丢失或损坏会导致软件无法正常运行,例如我们在电脑上运行软件或游戏时会得到以下提示:storm.dll... 很多玩家在打开游戏时,突然弹出“找不到storm.dll文件”的提示框,随后游戏直接闪退,这通常是由于

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用