【问题标题】:Change simulink parameters at runtime from the code/block flow在运行时从代码/块流中更改 simulink 参数
【发布时间】:2015-01-26 20:07:11
【问题描述】:

我最初的问题是我有一个系数随时间变化的连续传递函数。

目前,TF 的系数以块掩码参数的函数表示。这些参数是可调的,如果我在模拟过程中更改掩码参数对话框中的值,响应似乎会做出适当的反应。

但是我怎样才能在代码/块流中做到这一点?基本上,我 具有使用掩码设置的块参数“maskParam” 参数对话框,并在掩码初始化命令中: '参数=掩码参数'。 'param' 用于传递函数,我 想实时更改它(如 param=maskParam*f(t))。

我已经环顾四周并找到了relevant solutions,但要么它复杂得难以置信;要么或者我们可以在运行时修改的唯一传递函数是离散的,并且 1)我想避免 z 变换我相当复杂的 TF(我没有控制工具箱) 2)采样时间似乎是固定的。 . 没有人使用这种更新参数的“肮脏”技术,也许就是这样?

为了说明:

【问题讨论】:

    标签: matlab simulink


    【解决方案1】:

    我假设您想在模拟运行时更改您的 sim 参数?

    一种解决方案是您在inf 期间运行模拟,并在模拟期间使用/更改工作区变量以使更改生效。 例如:

    如果您查看 w 块,您可以在运行时设置它的值,方法是:

    set_param('my_model_name/w', 'value', 100); % Will change to 100 immediately
    

    你可以用数组做类似的事情(即你的情况下的系数列表)。

    提示

    您正在使用离散传递功能块。请尝试以下操作:

    1) 给你的区块命名,例如fcn_1

    2) 在您的脚本中,输入set_param('your_model_name/fcn_1', 'numerator', '[1 2]'); 这会将分子值设置为[1 2]。对分母做同样的事情。

    3) 通过本练习,您应该能够了解如何处理属性名称等,以便您可以使用 set_param/get_param 更改/获取它们。

    我让你进一步调查。

    【讨论】:

    • 感谢您的回答。问题是,我需要更改与掩码参数存储在同一个池中的变量(直接更改这些变量会很糟糕)才能使我的方法正常工作(1),但我似乎无法访问这些这样(或者我可以吗?)。 (1):我已经用我的最新发现更新了我的问题。
    • @MisterMystère MATLAB 是一种面向对象语言,具有相同的“Java 风格”getter/setter 用于块参数。您绝对可以使用 get_parameter 和 set_parameter 访问/改变块的属性。
    • 是的,但我发现文档在几个方面很可悲(时变传递函数也是其中之一),这就是其中之一。我不知道如何使用 set_param 更改块参数...
    • 我可能无法比我的问题的这个更新版本更清楚了。你仍然相信它是可以实现的,如果可以,你对手柄有什么想法吗?
    【解决方案2】:

    简短的回答是 Simulink 模块并非真正设计用于执行此操作。根据定义,传递函数是线性时不变的,这意味着它的特性(读取系数)不随时间变化。

    话虽如此,但有一些解决方法,例如您在问题中提到的那些。除了@ha9u63ar 建议的set_param 方法之外,恐怕这些都是解决问题的正确方法。另请参阅 MathWorks 网站上有关该主题的 this blog

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 2015-03-01
      相关资源
      最近更新 更多