Stateflow 中的转移动作和条件动作

Transition Action and Condition Action in Stateflow

在下面的两个状态图中,第一个状态图从StateA移动到StateD时有一个动作要执行,即。 /{z=5}; 第二个必须执行操作 {z=5}; 我知道这是一个 Transition Action ,但我无法理解这两个 transition

之间有什么不同

具体信息见@am304给出的link,但简而言之,

  • 在你的第一张图片中你有一个 Transition Action,它在转换发生时执行(并且 after 任何状态退出操作 - 如果你有 State A),

  • 在您的第二张图片中,您有一个 Condition Action,它在确定与转换相关的任何条件为真时执行。您没有任何明确的条件(即没有 e1[cond1]{z = 5} 之类的东西),因此当任何事件发生时,条件都被认为是真实的。即使未进行转换,这也会执行(即它仅取决于条件。)这意味着它会在 任何状态之前发生退出操作(如果你有 State A。)

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

"transition action" /z=5; 等于目标状态 entry: z=5; 的 "entry action"。如果您有多个目标状态但想根据先前的状态和许多其他逻辑(不在您的示例中)设置一个值,它可能看起来像 "elegant" 解决方案。

在模型审查中,我们的人员花了太多时间使用 "transition actions" 来弄清楚图表中究竟发生了什么。生成的代码也很难阅读。在我们公司范围内的建模指南中,我们最终禁止使用 "transition actions",因为它们会使模型难以审查。

"condition actions" {z=5;} 与 "state actions" entry: z=5; 的组合足以满足我们需要实现的任何逻辑。

MathWorks 在未来的版本中停止过渡动作语义是一个很好的举措。

条件动作在条件被评估为真时立即执行,但在转换目标被确定为有效之前。如果未指定条件,则隐含条件的计算结果为真并执行条件操作。 过渡动作仅在采用完整的过渡路径后执行。它们在确定转换目标有效且条件(如果指定)为真后执行。