状态机运算符组
*操作组*是在状态内启动模型操作的条件。
操作符组用于需要配置更复杂的模型行为时。有关操作员组背后逻辑的更多信息,请参阅有限自动机逻辑 。
操作符组只支持 Julia 语言操作,并可包含以任意顺序交错排列的多个部分。例如
during: du1
entry: en1
during: du2
在这种情况下,当状态被激活时,将执行代码`entry: en1`。此后,在状态保持激活状态的每个后续步骤中,将执行以 du1; du2
表示的 during
运算符组的组合代码。这意味着,`du1`和`du2`将被合并并按顺序执行,就像它们在一个`during`中连接在一起一样。
可以使用操作符组的简短名称 — 枚举时,重要的是不要重复使用同一个词。一个*不正确*列举的例子:
|
状态块中的 Julia 代码可以是多行的,并一直持续到在行首遇到 entry
、during
、exit
或 on
关键字为止。例如
during:
if x > 10
y = 1
else
y = 2
end
exit: y = 3
无操作符组的状态代码在状态激活时和状态保持激活时的每一步都会被执行。因此,它结合了 "进入 "和 "期间 "部分的动作特征,但不包括与停用状态相关的逻辑(如 "退出 "部分)。 |
组退出
exit` - 用于定义退出状态时执行的操作。这些操作会在状态变为非活动时执行一次,并在启动退出该状态的所有转换操作完成后发生。退出状态后,"期间 "操作符不再被执行,因为状态不再处于活动状态。例如,有如下有限自动机:
在这里,有限自动机将在第一步激活状态 "A",并在第二步按以下顺序执行动作:
y2 = 2
y1 = 1
y3 = 3
小组
on
- 当指定的操作在活动状态下发生时执行。操作符组 on
允许在状态内使用时间逻辑。例如
在这里
-
on after(5, sec)
指定从第 5 秒开始执行(也会在 6 秒、7 秒等之后执行)。 -
y = 0
指定将变量y
设为0
。
运算符组的操作逻辑
在状态机中,转换和 entry
、during
、exit
及 on
操作符组的操作顺序如下:
操作符组执行逻辑类型 |
进入 |
期间 |
退出 |
在 |
执行顺序 |
进入 "在状态激活时执行,即在有限自动机进入新状态时执行。这一步发生在执行任何其他运算符组之前。在这一步不执行`during`。 |
只要状态保持激活, |
在退出当前状态之前会执行 |
如果当前状态处于激活状态,则在满足给定条件(如时态逻辑)时激活 |
激活功能 |
|
during`可用于执行定期检查、更新变量值或执行重复计算。 |
exit`可用于在退出状态前重置变量值或完成计算。 |
on`允许整合时间逻辑元素,这样就可以确定何时应在状态中执行操作。 |
与转换的交互 |
只有在成功过渡到新状态时, |
在执行 |
只有当过渡条件成功满足时, |
on`语句只在当前激活状态下运行。如果满足了过渡到新状态的条件,过渡会在 |