simulink中循环改变某一参数,每改变一次仿真一次,怎么实现?

您所在的位置:网站首页 simulink仿真如何运行 simulink中循环改变某一参数,每改变一次仿真一次,怎么实现?

simulink中循环改变某一参数,每改变一次仿真一次,怎么实现?

2023-03-23 12:42| 来源: 网络整理| 查看: 265

我介绍一种我常用的方法:

使用matlab的.m脚本文件实现对simulink 模型的参数修改和自动运行

核心内容:函数 set_param

在matlab命令行中键入set_param 获取用法

以下为搬运内容:(或者直接拉到最后看例程)

set_param

设置系统和模块参数值全页折叠

语法set_param(Object,ParameterName,Value,...ParameterNameN,ValueN)

说明

示例set_param(Object,ParameterName,Value,...ParameterNameN,ValueN) 将指定模型或模块对象上的参数设置为指定的值。在同一个模型或模块上设置多个形参时,使用一个 set_param 命令和多个 ParameterName-Value 实参对组,而不是使用多个 set_param 命令。这种方法非常高效,因为使用一个调用只需计算一次参数。如果任何参数名称或值无效,则函数不会设置任何参数。提示:

如果您对同一个模块多次调用 set_param,则使用数值句柄指定模块比使用完整的模块路径更高效。使用 getSimulinkBlockHandle 获取模块句柄。如果您使用 matlab -nodisplay 启动会话,则不能使用 set_param 运行仿真。-nodisplay 模式不支持使用 set_param 进行仿真。请改用 sim 命令。在 MATLAB® 工作区中设置参数后,要查看模型中的变化,请更新图形。set_param(model,'SimulationCommand','Update')

对于参数名称,请参阅:

模型参数模块特定的参数通用模块属性

示例全部折叠为模型设置模型配置参数

打开 vdp 并设置 Solver 和 StopTime 参数。vdp set_param('vdp','Solver','ode15s','StopTime','3000')为当前模型设置模型配置参数

打开一个模型,并设置 Solver 和 StopTime 参数。使用 bdroot 获取当前顶层模型。vdp set_param(bdroot,'Solver','ode15s','StopTime','3000')设置 Gain 模块参数值

打开 vdp,并在 Mu 模块中设置 Gain 参数值。vdp set_param('vdp/Mu','Gain','10')设置模块的位置

打开 vdp 并设置 Fcn 模块的位置。vdp set_param('vdp/Fcn','Position',[50 100 110 120])使用句柄设置模块的位置

设置 Fcn 模块在 vdp 模型中的位置。如果需要,可以使用 getSimulinkBlockHandle 来加载 vdp 模型(通过指定 true),并获取 Fcn 模块的句柄。如果您对同一个模块多次调用 set_param,则使用模块句柄比以字符向量形式指定完整模块路径更高效。fcnblockhandle = getSimulinkBlockHandle('vdp/Fcn',true);您可以在对 get_param 或 set_param 的后续调用中使用该模块句柄。如果您检查该句柄,会发现它包含双精度值。不要试图只使用句柄的数值(例如 5.007),因为您通常需要指定的位数远远超过 MATLAB 显示的位数。而要将该句柄赋给变量,并使用该变量名称指定模块。将模块句柄与 set_param 一起使用来设置位置。set_param(fcnblockhandle,'Position',[50 100 110 120])

输入参数全部折叠Object - 模型或模块的名称或句柄字符向量 | 字符串标量 | 句柄

模型或模块的名称或句柄,指定为数值句柄或字符向量。数值句柄必须为标量。您还可以设置信号线和端口的参数,但必须使用数值句柄指定它们。提示如果您对同一个模块多次调用 set_param,则使用数值句柄指定模块比使用完整的模块路径和 set_param 更高效。使用 getSimulinkBlockHandle 获取模块句柄。不要试图只使用句柄的数值(例如 5.007),因为您通常需要指定的位数远远超过 MATLAB 显示的位数。要将句柄赋给变量,并使用该变量名称指定模块。示例: 'vdp/Fcn'ParameterName - 模型或模块参数的名称字符向量 | 字符串标量

模型或模块参数名称,指定为字符向量或字符串标量。一些参数名称区分大小写。示例: 'Solver'示例: 'SimulationCommand'示例: 'Position'Value - 指定的参数的值任何数据类型,具体取决于参数

模型或模块参数值,指定为参数类型决定的格式。一些参数值区分大小写。值通常是字符向量,但也可以是数值、数组和其他类型。许多模块参数值指定为字符向量,但有两个参数例外:Position,指定为向量;UserData,可以是任意数据类型。

搬运内容到此结束

来自:

我来再举个栗子说一下实现思路:

创建simulink 模型“Xmodel”,m文件中内容见上图,第二行可以终止模型仿真,第三行可以启动开始仿真,你可以在m文件中写一个循环,每次修改一次参数,然后使用上述函数控制simulink运行与否。除此之外你还需要获取模型当前的运行状态。你需要在模型彻底运行完之后再修改参数,或者等待用户介入,再启动下次循环仿真。

get_param

用法和set_param类似

以上



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3