0

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

在此处输入图像描述

在此处输入图像描述

4

3 回答 3

1

有关具体信息,请参阅@am304 给出的链接,但简而言之,

  • 在您的第一张图片中,您有一个Transition Action,它在转换发生时执行(以及任何状态退出操作之后 - 如果您有任何 for State A),

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

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

于 2018-11-17T00:45:30.487 回答
1

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

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

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

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

于 2019-02-24T15:58:01.733 回答
1

一旦条件被评估为真,但在确定转换目标有效之前,条件动作就会被执行。如果未指定条件,则隐含条件评估为真并执行条件操作。仅在采用完整的转换路径后才会执行转换操作。它们在确定转换目标有效并且条件(如果指定)为真之后执行。

于 2020-01-20T20:50:29.400 回答