在运行时从代码/块流更改simulink参数

时间:2015-01-26 20:07:11

标签: matlab simulink

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

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

  

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

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

说明: enter image description here

2 个答案:

答案 0 :(得分:2)

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

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

如果查看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 :(得分:0)

简短的回答是Simulink模块并不是真的设计用来做到这一点。根据定义,传递函数是Liner-Time Invariant,意味着其特征(读取系数)不随时间变化。

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