Skip to main content

元素:复合状态

您可以使用此元素将多个状态组合在一起。

. 复合状态可以是正交的或非正交的。
  • 正交状态:具有两个或多个区域的复合状态。在正交状态中,内部状态被分组为区域并且区域被优先考虑。它们在运行时控制处理顺序。区域的状态根据它们的内部顺序伪并行运行。

  • 非正交状态:只有一个区域的复合状态。在非正交状态下,内部状态在运行时按顺序运行。内部状态也可以是复合状态。非正交状态的嵌套可以有任何深度,除了最里面的状态之外,没有一个状态可以有多个区域。

正交和非正交状态也可以称为 入口 行动,一个 行动,以及 出口 行动。当异常转换处于活动状态时, 出口 执行正交状态的每个区域的每个活动状态的动作。

_uml_img_orthogonal_state.png

组合状态的名称显示在矩形的左上角。区域由虚线划分。区域的优先级显示在区域的右上角。

规则

. 规则
  • 不同地区的州之间不允许过渡。

  • 复合状态可以具有一个或多个传出异常转换。您可以有效地实现错误处理,例如,使用异常转换。

  • 复合状态最多有一个完成转换。因此,每个区域包括一个开始状态和一个结束状态。当所有区域都达到其最终状态时,复合状态达到其最终状态。如果复合状态没有传出完成转换,则区域可能没有开始状态或结束状态。

  • 仅允许从分叉转移到正交状态内的状态,并且始终是无条件的。

  • 一个非正交状态可以包含另一个复合状态。在这种情况下,状态是嵌套的。

  • 非正交复合状态可以有一个指定的 入口 行动和/或 行动和/或 出口 行动。

特性

财产

描述

标识符

复合状态的名称

例子: DoorAutomaton

颜色

元素的颜色。您可以使用颜色选择对话框更改颜色。默认值:黄色

允许 ENTRY / DO / EXIT 操作

要求:选中的复合状态恰好有 地区。

也可以为以下用例分配 ENTRY、DO 和 EXIT 操作:

  • 嵌套复合状态

  • 没有内部开始或结束状态的状态

  • 没有内部传出完成或异常转换的状态

_cds_icon_checked.png:您可以分配每个 ENTRY, DO, 和 EXIT 对国家采取行动。

即使内部复合状态处于活动状态,也执行 DO 动作

该选项仅适用于最外层的复合状态,并由内部的复合状态继承。

_cds_icon_checked.png: DO 动作在运行时持续执行,即使内部复合状态之一同时处于活动状态。这 {对内部复合也执行} 注释显示在 DO 动作旁边的编辑器中,以指出此动作行为。

_cds_icon_option_deactivated.png:一旦内部复合状态之一处于活动状态,外部状态的 DO 动作就会暂停。

用户输入

行动

描述

  1. 选择一个空的复合状态。

  2. 点击 _uml_icon_transition_completion.png 象征。

    生成传出完成转换。

  3. 3. 单击现有元素(类型: 状态, 复合状态, 分叉/连接, 要么 选择)。

    在两个元素之间插入完成转换。

注意:如果您没有单击现有元素,而是单击空白区域,则会创建一个新状态。

你添加一个 _uml_icon_transition_exception.png 以同样的方式进行异常转换。

  1. 将鼠标指针移动到空的复合状态。

  2. 点击 _uml_icon_sc_area_add.png 象征。

    细分了状态,并添加了另一个区域。

    _uml_state_orthogonal.png

优先级显示在区域的右侧。首先处理优先级较低的区域。您可以更改优先级。 CODESYS 自动调整其他区域的优先级。

  1. 选择具有多个区域的复合状态。

  2. 移动分隔线。

  3. 通过双击选择分隔线。

    该线显示为蓝色。

  4. 德尔 钥匙。

    该行被删除。

删除分隔线后,两个区域(由边框分隔)合并为一个区域。

  1. 选择具有多个区域的复合状态。

  2. 单击区域中的优先级两次。

现在可以更改优先级。

更改优先级时,会自动调整其他优先级。

  1. 将鼠标指针移动到空的复合状态。

    显示状态的动作。

    _uml_img_composite_state_with_acitvated_actions.png

  2. 2. 2. 单击三个之一 _uml_icon_actions_vertical.png 符号。

  3. 点击 _uml_icon_sc_action_do.png 象征。

    状态由 DO 动作/方法扩展。

  4. 将光标悬停在具有指定 DO 操作的状态上。

  5. 点击 _uml_icon_sc_action_add.png 象征。

    新动作对象 对话框打开。

  6. 选择 行动 目的。

  7. 指定名称和实现语言。

    在状态图的 POU 下方插入一个新动作。

  8. 点击 _uml_icon_sc_action_open.png 象征。

    相应操作或方法的编辑器打开。

要求: 允许 ENTRY / DO / EXIT 操作 属性被选中。

动作对象可以是动作或方法。如果动作是一个方法,那么你还必须在 新动作对象 对话。可以在元素的属性中更改对操作对象的分配。

一个状态可以有一个 ENTRY 动作、一个 DO 动作和一个 EXIT 动作:

  • 一个 ENTRY 动作/方法可以初始化状态。当所有传入的转换都设置为时执行一次 TRUE.

  • 只要状态处于活动状态,就会执行 DO 操作/方法。该动作可以用任何实现语言进行编程。当你使用 状态图,创建层次结构。

  • EXIT 操作/方法应确保状态以有效状态退出。当状态的所有传出转换都完成时,执行一次 EXIT 动作 TRUE.

提示

您还可以在元素的属性中添加或更改操作或方法。

例子

22. 具有异常转换和完成转换的复合状态
_uml_img_composite_state_example.png


23. 没有完成转换的复合状态
_uml_img_composite_state_without_completion.png


24. 嵌套复合状态
_uml_img_nested_composite_states.png


25. 带叉子的正交状态
_uml_img_fork_join_example.png


示例:电梯升降机

26. 具有完成转换和异常转换的正交状态
_uml_img_orthogonal_state_lift.png