Engee 文档

状态机操作员组

*操作员组*是触发模型动作的条件。 国家

sf state 1 new cn

当需要配置更复杂的模型行为时,将使用操作员组。 有关运算符组逻辑的详细信息,请参阅 有限自动机运行的逻辑.

运算符组仅支持Julia语言中的操作,并且可以包含多个以任何顺序交替的部分。 例如:

during: du1
entry: en1
during: du2

在这种情况下,当状态被激活时,代码将被执行 条目:en1. 之后,在每个后续步骤中,在状态保持活动状态的同时,将执行运算符组的组合代码。 期间,表示为 "du1;du2". 这意味着 杜1杜2 它们被组合并按顺序执行,就好像它们在相同的范围内连接在一起一样 期间.

可以对运算符组使用短名称 — 期间, en参赛作品出口;出口 相应地(并结合它们)。 操作员组的名称 期间, 参赛作品出口;出口 您可以用逗号分隔它们。:

sf x 1

列出时,重要的是不要重复相同的单词。 *不正确*枚举的示例:

en, during, entry: foobar

状态块中的Julia代码可以是多行的,并且一直持续到关键字出现在行的开头。 参赛作品, 期间, 出口;出口. 例如:

during:
    if x > 10
        y = 1
    else
        y = 2
    end
exit: y = 3
State*without*运算符组中的代码在激活状态时和在状态保持活动状态时的每个步骤中执行。 因此,他结合了特定于部分的操作。 参赛作品期间,但它不包括与停用状态相关的逻辑(正如部分所做的那样 出口;出口).

参赛组

参赛作品 (输入)-用于确定进入状态时执行的操作。 指定的操作 参赛作品,在每次状态变为活动状态时执行。

乐队在

期间 (期间)-用于确定在模型计算步骤的每个阶段(第一个阶段除外)执行的操作(如果状态为活动状态)。 指定的操作 期间,在状态为活动状态时执行。

退出组

出口;出口 (exit)-用于确定退出状态时执行的操作。 这些操作在状态变为非活动状态时执行一次,并在启动退出此状态的转换的所有操作完成后发生。 退出状态后,操作人员 期间 不再运行,因为状态不再处于活动状态。 例如,有以下有限状态机:

exit order

在这里,状态机在第一步中激活状态"A",在第二步中,它按以下顺序执行操作:

y2 = 2
y1 = 1
y3 = 3

On组

-在活动状态下发生指定动作时执行。 操作员组 允许您使用 时间逻辑 状态内的。 例如:

stateflow on after 2

这里:

  • 后(5秒) 确定执行将从第五秒开始(并在6,7等之后运行。 秒)。

  • y=0 定义需要分配给变量的内容 y 意义 0.

运算符组的逻辑

在状态机中,处理转换和运算符组的顺序为 参赛作品, 期间, 出口;出口,而 它发生如下:

用于执行运算符组的逻辑类型

参赛作品

期间

出口;出口

执行的顺序

参赛作品 它在状态被激活时执行,即在状态机转换到新状态的时刻执行。 此阶段发生在执行任何其他语句组之前。 期间 他们不会在这一步执行。

期间 它在状态机操作的每个步骤执行,同时状态保持活动状态。 但是,如果在当前步骤中发生退出,则 期间 未执行。

出口;出口 它在退出当前状态之前执行,结束其活动。 完成后 出口;出口 一个新的状态被激活,对此立即执行以下操作 参赛作品.

它们在满足指定条件时被激活(例如, 时间逻辑),如果当前状态是活动的。

激活功能

参赛作品 它可用于初始化变量、配置参数或执行为当前状态下的操作做准备所需的任何其他操作。

期间 它可用于执行定期检查、更新变量值或执行重复计算。

出口;出口 它可用于重置变量的值或在退出状态之前完成计算。

它们允许您集成时态逻辑的元素,以便您可以确定何时应该在状态内部执行操作。

与交通的互动

参赛作品 它只有在成功过渡到新状态时才被激活。 如果没有发生到状态的转换,则运算符组 参赛作品 未执行;

在完成该部分之前 期间 状态机可以检查转换到另一状态的条件。 如果满足过渡条件,则在 期间 它们根本不会开始执行,而是状态机继续执行 出口;出口 当前状态;

出口;出口 只有当成功满足转换条件并且正在准备转换到新状态时,它们才会被激活。 如果过渡未完成,则运算符 出口;出口 不被执行。

它只在当前活动状态内工作。 如果满足了切换到新状态的条件,那么转换发生在执行开始之前。 . 过渡后 它将不再被执行。 然而,不像 期间,在每个步骤(第一个除外)执行的操作 它们将仅在条件(时间逻辑的运算符)为真的步骤执行。

有用的连结