人在仿真软件万博1manbetx

万博1manbetxSimulink &基于模型的设计

用连续状态创建自己的块(MATLAB s -函数)

在上一篇文章中,我展示了一个MATLAB离散状态S函数

本周,我们继续朝着相同的方向,实现了一个具有连续状态的S函数。

连续状态

首先,让我们回到上贴的问题MATLAB答案通过K E:

在Simulink中什么是连续和离散状态?万博1manbetx

看看Kaustubha Govind关于连续状态:

但是,对于连续状态,Simulink要求块在导数()方法中提供状万博1manbetx态的导数(dx/dt),并使用其ODE解算器计算dx/dt的积分以获得“x”。然后可以在Outputs()函数中访问此“x”。例如,要实现积分器块。。。

让我们在这里停下来,看看如何一步一步地实现Integrator块。

安装程序

在s函数中,连续的状态声明在设置方法:

声明连续状态

连续状态不能像离散状态一样被隐藏。原因有很多,例如,Simulink解算器使用它们来计算可变时间步长解算器所采取的步骤。万博1manbetx

有关DirectFeedthrough标志的详细信息,请参阅上一篇关于离散状态的文章。

初始化条件

与离散状态一样,您需要初始化连续状态:

连续状态初始化

输出

输出方法,则可以读取连续状态的值并将其分配给输出端口:

连续状态法的输出

衍生工具

这里是最重要的部分。当你有连续状态时,你不应该写block.ContStates.Data,初始化除外。相反,您可以指定状态的导数并将其写入block.Derivatives.Data. 对于积分器块,输入是输出的导数:

使用连续状态更新方法

下次调用output方法时,解算器将集成中指定的值block.Derivatives.Data并将结果存储在block.ContStates.Data

结论

关于连续状态,需要了解的重要一点是,块向解算器提供状态的导数。解算器负责积分,并将积分结果返回给块。

对于这样的示例,请看演示模型msfcndemo_limintm.mdl

现在轮到你了

通过留下一个评论这里


|

评论

如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。