如何解决“在计算输出时更新持久变量或状态变量,因此它不能用于代数循环......”图表错误

Posted

技术标签:

【中文标题】如何解决“在计算输出时更新持久变量或状态变量,因此它不能用于代数循环......”图表错误【英文标题】:How to resolve'updates persistent or state variables while computing outputs, therefore it cannot be used in an algebraic loop....' error with Charts 【发布时间】:2019-12-03 13:29:57 【问题描述】:

我有一个带有 2 个用代码创建的图表的模型。我的第一个图表是一个测试模拟,当TimerStatus = 1; 时进入TIMER EXPIRED 状态。我的计时器图表发生错误:

当我尝试模拟时出现错误:

'ES_TestDS/Timer_principal' updates persistent or state variables while computing outputs, therefore it cannot be used in an algebraic loop. However, it is in a loop with the following blocks. For more information, see Algebraic Loops with MATLAB Function and Stateflow Blocks.

我该如何解决这个问题?我读过摩尔图,但我不知道如何将我的转换为摩尔图。

编辑 1:除了错误之外,我还有这个警告:

If the inport 'ES_TestDS/Timer_principal/Start_Timer' of subsystem 'ES_TestDS/Timer_principal' involves direct feedback, then an algebraic loop exists, which Simulink cannot remove. Consider clearing the 'Minimize algebraic loop occurrences' parameter to avoid this warning.

Stop_Timer 也一样

编辑:如果我显示我的计时器和我的图表之间的联系可能会有所帮助

【问题讨论】:

听起来模型中有一个 algebraic loop,其中包含 Simulink 无法解决的状态图,因为它包含持久变量或状态变量。您需要以某种方式打破代数循环。 【参考方案1】:

我找到了手动解决方案:

转到 Model Explorer 并将导致错误的 Chart 的 State Machine Type 设置为 Moore

删除图表中的所有entry, during, exit ... 语句

问题是如果有人知道,我仍然不知道如何使用 Matlab 代码设置状态机类型

编辑:cht.StateMachineType = 'Moore';

【讨论】:

以上是关于如何解决“在计算输出时更新持久变量或状态变量,因此它不能用于代数循环......”图表错误的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 Ajax 跨域请求不到的问题

如何解决包冲突问题

如何解决包冲突问题

如何解决ajax跨域问题

MySQL 的 10048问题,如何解决?

如何解决smartgit的冲突问题