Stateflow中的过渡动作和条件动作

时间:2018-11-16 08:14:19

标签: matlab charts simulink statechart stateflow

在下面的两个状态图中,第一个状态表从StateA移到StateD时要执行一个动作。 / {z = 5}; 第二个必须执行动作{z = 5}; 我了解这是一个过渡行动,但我无法理解这两个过渡之间有什么区别

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:1)

有关特定信息,请参见@ am304给出的链接,但简要来说,

  • 在您的第一张图片中,您有一个Transition Action,它会在过渡发生时执行(并且在所有状态退出操作后 -如果您有State A的任何内容,

  • 在第二个图像中,您有一个Condition Action,当确定与转换关联的任何条件为true时执行。您没有任何明确的条件(即没有e1[cond1]{z = 5}之类的条件),因此,当发生任何事件时,该条件就被视为成立。即使未进行转换(即仅取决于条件),该操作也将执行。这意味着它会在任何状态退出动作之前 发生(如果您有State A的任何内容。)

鉴于上述情况,在您的特定情况下(即State A没有退出操作,并且过渡没有条件),两者将给出相同的结果。

答案 1 :(得分:1)

条件条件一经评估为真,但在确定转换目标有效之前,将执行条件操作。如果未指定任何条件,则隐式条件的评估结果为true,并执行条件操作。 过渡动作仅在采用完整的过渡路径之后才执行。它们在确定转换目标有效之后执行,并且条件(如果指定)为true。

答案 2 :(得分:0)

“转移动作” /z=5;等于目的地状态entry: z=5;的“进入动作”。如果您有多个目标状态,但想基于先前的状态和许多其他逻辑(在您的示例中未设置)来设置值,则它看起来可能像是一个“优雅”的解决方案。

在模型审查中,我们的员工花费了太多时间使用“过渡动作”来弄清楚图表中发生了什么。生成的代码也很难阅读。在我们公司范围内的建模指南中,我们严格禁止使用“过渡动作”,因为它们会使模型难以审核。

将“条件动作” {z=5;}与“状态动作” entry: z=5;结合起来足以满足我们需要实现的任何逻辑。

对于MathWorks,在将来的版本中停止过渡动作语义将是一个好举动。