如何解决“在计算输出时更新持久变量或状态变量,因此它不能用于代数循环......”图表错误
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';
【讨论】:
以上是关于如何解决“在计算输出时更新持久变量或状态变量,因此它不能用于代数循环......”图表错误的主要内容,如果未能解决你的问题,请参考以下文章