状态机操作员组
*运算符组*是触发模型内部操作的条件 国家。
当需要配置更复杂的模型行为时,将使用操作员组。 有关运算符组逻辑的详细信息,请参阅 有限自动机运行的逻辑.
运算符组仅支持Julia语言中的操作,并且可以包含多个以任何顺序交替的部分。 例如:
during: du1
entry: en1
during: du2
在这种情况下,当状态被激活时,代码’entry:en1`将被执行。 之后,在每个后续步骤中,在状态保持活动的同时,将执行`during’运算符组的组合代码,表示为`"du1;du2"'。 这意味着’du1’和`du2’被组合并按顺序执行,就好像它们在同一个`during’内连接在一起一样。
您可以为运算符组使用短名称—分别为`during`, 枚举时,重要的是不重复相同的单词。 *不正确*枚举的示例:
|
状态块中的Julia代码可以是多行的,并且一直持续到关键字`entry`,during
,`exit`或`on`出现在行的开头。 例如:
during:
if x > 10
y = 1
else
y = 2
end
exit: y = 3
State*without*运算符组中的代码在激活状态时和在状态保持活动状态时的每个步骤中执行。 因此,它结合了"进入"和"期间"部分的典型操作,但不包括与停用状态相关的逻辑(如"退出"部分所做的那样)。 |
退出组
'exit’用于确定退出状态时执行的操作。 这些操作在状态变为非活动状态时执行一次,并在启动退出此状态的转换的所有操作完成后执行。 退出状态后,`during’语句不再执行,因为状态不再处于活动状态。 例如,有以下有限状态机:
在这里,状态机在第一步中激活状态"A",在第二步中,它按以下顺序执行操作:
y2 = 2
y1 = 1
y3 = 3
On组
'on—-在活动状态下发生指定动作时执行。 `On’操作员组允许您使用 时间逻辑。 例如:
这里:
-
'on after(5,sec’确定执行将从第五秒开始(并在6,7等之后运行。 秒)。
-
'y=0’确定变量’y`应设置为'0'。
运算符组的逻辑
在状态机中,操作符`entry`、during
、`exit`和`on`的转换和组的操作顺序如下:
用于执行运算符组的逻辑类型 |
参赛作品 |
期间 |
出口;出口 |
上 |
执行的顺序 |
'进入`在状态被激活时执行,即在状态机转换到新状态的时刻执行。 此阶段发生在执行任何其他语句组之前。 在此步骤不会执行`during'。 |
`期间"在状态机操作的每个步骤执行,只要状态保持活动状态。 但是,如果在当前步骤中发生退出,则不执行’during'。 |
'exit’在退出当前状态之前执行,结束其活动。 在执行’exit’之后,一个新的状态被激活,对此`entry’立即执行。 |
`on`在满足指定条件时被激活(例如, 时间逻辑),如果当前状态是活动的。 |
激活功能 |
entry可用于初始化变量、配置参数或执行为当前状态下的操作做准备所必需的任何其他操作。 |
'during’可用于执行定期检查、更新变量值或执行重复计算。 |
'exit’可用于重置变量的值或在退出状态之前完成计算。 |
'on’它们允许您集成时态逻辑的元素,以便您可以确定何时应该在状态内执行操作。 |
与交通的互动 |
"进入"只有在成功过渡到新状态时才被激活。 如果没有发生到状态的转换,那么不执行`entry`语句组。; |
在执行’期间’部分之前,状态机可以检查切换到另一状态的条件。 如果满足转换条件,则’during’中的操作根本不会开始执行,而是状态机继续执行当前状态的`exit`。; |
只有在成功完成转换条件并准备转换到新状态时,才会激活"退出"。 如果转换未完成,则不执行`exit’语句。 |
'on’仅在当前活动状态内工作。 如果满足切换到新状态的条件,那么转换发生在`on`执行开始之前。 切换到’on`后,将不再执行。 但是,与在每个步骤(第一个步骤除外)执行的`during`不同,`on`操作将仅在条件(时间逻辑运算符)为真的步骤执行。 |