【问题标题】:Simulink/StateFlow error with my Clock我的时钟出现 Simulink/StateFlow 错误
【发布时间】:2016-07-03 21:12:06
【问题描述】:

我使用 StateFlow 在 Simulink 中创建了这个状态机图:

有两种状态 (S1,S2),其中一种 (S1) 有 3 个嵌套的并行 FSM ,每个状态有 4 个状态 (SS1, SS2, SS2, SS4) ,我在这 3 个中都设置了一个默认状态FSMs (SS1),以及主要的两种状态(默认 S2)。

为了测试主 FSM (S1,S2) ,我对所有输入/事件都使用了信号生成器。其中一个输入是方波,它是我的主 FSM (1 Hz) 的时钟事件,模拟持续时间为 50 秒。

我遇到的问题是我可以在信号生成器中看到我有一个方波,但是当我把范围放在那个时钟上时我看到一个方波(从 0 到 49.5 秒然后下降到 0)。

我的时钟呢?什么没有正确地喂养我的 FSM?

这是 FSM:

正交子状态是:

详细说明:

在 S1 和 S2 之间

具有时钟信号的信号生成器之一是:

另一个有以下信号:

【问题讨论】:

  • 您使用的是什么求解器,正在使用什么步长?另外,为什么您将 Clock 定义为从 0->2 开始,然后将其转换为布尔值(本质上是 0->1)?
  • 求解器是 ode3。关于时钟,我想您必须使用转换器,以便它们是布尔值,因为我定义了三个事件时钟和另外两个“上升沿”输入。我不确定它们是否必须是布尔值。 0-2 是由 simulink 创建的,我也不知道为什么......我把 1 的幅度放在 50Hz 方波

标签: matlab simulink stateflow


【解决方案1】:

问题是您使用 ode3 的默认步长。使用固定步长求解器时,auto 步长计算为(StopTime-StartTime)/50。在您的情况下,这给出了 1 的步长。

由于在 t = 0,1,2,3,...49,Clock 的值为 2,这就是您在范围中看到的。 在 t =50 时,Clock 的值为 0,这就是您在作用域中看到的。

您需要转到Simulaton->Model Configuration Parameters 下拉菜单的Solver Panel。 然后打开Additional Options选项,把步长改小一点,比如0.01。

或者(取决于您的其他要求)您可以使用可变步长求解器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    相关资源
    最近更新 更多