人在仿真软件万博1manbetx

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

如何保持信号的值?

昨天,我在给MathWorks的新员工进行培训,其中一个与会者问我如何在Simulink中持有一个值。万博1manbetx

当然,我的回答是,在Simulink中有许多方法来保存值。万博1manbetx我给他举了几个例子,今天在这篇文章中分享。

期望的行为

我想创建一个有两个输入的子系统,u持有,以及一个输出y.当持有输出是否为真y等于输入吗u.当持有是零,输出y保持不变,保持最后的输出值。

以下是输入和输出信号的示例:

例如信号

让我们看看几种获得这种行为的方法

方法1:切换和延时

我在客户模型中观察到的保持价值的最常见方法是使用开关和一个单位延迟,或内存

漂亮,干净和简单!

使用Switch和Delay块保持信号

方法2:启用子系统

就我个人而言,我最喜欢的保存信号值的方法是使用启用子系统,外港财产输出时禁用设置为举行

使用启用的子系统保持信号

我喜欢这个方法,因为它几乎不需要任何块。

方法3:如果动作子系统和延迟

这个版本与第一个方法类似,但是我们用一种安排来替换Switch如果行动子系统和一个合并块。

使用If动作子系统保持信号

就我个人而言,我不经常使用这种语法,主要是因为它需要更多的块。

方法4:Stateflow

另一种获取我们正在寻找的行为的简单方法是使用Stateflow

使用statflow持有信号

生成的代码呢?

在选择实现时,需要考虑许多因素。我最喜欢的一个指导方针是由本博客的一位读者建议清晰地显示预期的功能.我将让你自己判断哪一个执行最清楚地显示了持有信号的意图。

许多用户关心的另一个问题是:代码是什么样子的?

在本例中,所有方法都会生成类似的代码。为了使本文的代码更容易阅读,我设置了三个信号或兴趣的存储类(持有uyExportedGlobal)。

开关和延迟:

等待信号代码

***注意:为了获得上述代码,我启用了模型配置中的内联参数。否则交换机的阈值为可调参数。

启用子系统:

等待信号代码

如果行动子系统:

等待信号代码

***注意:为了获得上面的代码,我手动将If Action子系统的Function Packaging选项设置为Inline。否则,由于两个子系统是相同的,编码器将生成一个可重用的函数。

Stafelow:

等待信号代码

现在轮到你了

你喜欢用什么方法来保存信号的值?是否有其他功能需要多种实现?请留下留言让我们知道这里的评论

|

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。