Simulin万博1manbetxk上的家伙

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

万博1manbetxSimulink子系统作为状态流状态

今天,我想强调一个新特性,它使Stateflow中的连续时间建模更清晰、更有力:万博1manbetxSimulink子系统作为状态.

出身背景

在您不知道的情况下,对于许多版本,可以在Stateflow中进行连续时间建模。

对于需要对具有离散模式或离散事件的电厂进行建模的模拟,可以方便地在Stateflow中对电厂进行建模。要查看这样的示例,我建议查看弹跳球,或牛顿克拉德尔例子。

根据我收到的技术支持模型,当用户需要用离散模式对连续设备建模时,他们通常会使用S万博1manbetximulink块对连续方程建模,并在Stateflow中实现模式切换逻辑。这方面的一个例子是万博1manbetxR2017a中的离合器示例,看起来是这样的:

来自R2017a的离合器示例

如果您曾经尝试对这样的系统进行建模,您很可能会在某个时候遇到如下错误。原因是状态流逻辑需要连续系统的输出,连续系统由状态流图控制,从而创建一个循环。

数据依赖冲突

正如您在下面的示例中所看到的,使用Simulink子系统作为状态,我们现在可以在Statefl万博1manbetxow中使用块建模的连续算法,从而避免所有这些数据依赖性挑战

万博1manbetxSimulink子系统作为状态

为了演示这个特性,我决定在一个上下移动的板上模拟一个盒子。当板材缓慢移动时,箱体和板材一起移动。如果金属板快速移动,盒子可能会离开金属板,在空中自由下落。

在第一种情况下,系统动力学可以建模为:

把盒子和盘子放在一起

在第二种情况下,这看起来像:

车牌上的箱号

为了在Stateflow中包含这两个子系统,我添加了两个Simulink状态,并将上面显示的子系统粘贴到每个子系万博1manbetx统中。子系统的输入和输出块将自动成为状态流程图的输入和输出。

万博1manbetxSimulink子系统作为状态

然后我需要命名每个积分器块的状态。下一步将使用这些名称在切换模式时传输状态。

命名状态

完成后,我可以定义在这两种模式之间切换的逻辑。

当负方向上的加速度大于重力时,盒子将开始飞行。相反方向上,如果盒子下降,其位置变小或等于板块,它将着陆并再次开始与板块一起移动。要定义这些转换,我可以使用图表的输入和输出,以及明确的状态如上所述命名。

每次切换发生时,我们都会转移状态,以便激活子系统中的积分器块使用被停用子系统中积分器块的最后一个值进行初始化。

最终图表

就这么简单!如果没有Simulink子系统作为状态,对该系统进行建模将需要更多的块和布线。万博1manbetx

我现在可以使用PID控制器来控制板的运动。

最终模型

如果我应用高频正弦运动,结果显示长方体在板上跳跃:

最终结果

现在轮到你了

为了了解Simulin万博1manbetxk子系统作为状态如何影响建模语义,我建议比较中的离合器示例R2017aR2017b。这应该可以清楚地看出此功能是如何简化语义的。

尝试一下,在下面的评论中告诉我们您的想法。

|

评论

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