一种状态描述无功系统的运行模式。在一个Stateflow®图表,状态用于顺序设计以创建状态转换图。
各州可以处于活动状态或无效。状态的活动或不活动可以根据事件和条件来改变。事件的发生驱动通过使状态变为活动或非活动状态的状态转换图。在执行期间的任何时候,都存在活动和非活动状态。
要管理多级状态复杂性,请在状态流程图中使用层次结构。通过层次结构,您可以在系统中表示多个级别的子组件。
在以下示例中,图表中出现了三个层次的层次结构。在另一个状态的边界内绘制一个状态表明内部状态是外部状态(或超级架)的子状态。外部状态是内部状态的父母。
在本例中,图表是状态的父级Car_done
.国家Car_done
是父母的状态Car_made
和car_shipped
州。国家Car_made
也是父母的吗Parts_Assembled.
和绘
州。你也可以说状态Parts_Assembled.
和绘
是孩子Car_made
状态。
要以文本形式表示statflow层次结构,请使用斜杠字符(/)
表示图表并使用一段时间(.)
将状态层次结构中的每个层次分开。下面的列表是前面例子中对象层次结构的文本表示:
/ Car_done
/ Car_done
.Car_made
/ Car_done
.car_shipped
/ Car_done
.Car_made
.Parts_Assembled.
/ Car_done
.Car_made
.绘
状态可以包含所有其他statflow对象。状态流程图表示法支持在带有包容性的状态流程图中表示金宝app图形对象层次结构。一个国家是一个超级大国如果它包含其他状态。一个国家是一个亚态如果它被另一个国家所控制。既不是超州也不是另一个州的子州的州,其父州就是州流程图本身。
状态还可以包含非图形数据、事件和消息对象。此包含的层次结构出现在模型资源管理器中。您可以通过指定父对象来定义数据、事件和消息包含。
每个州(或图表)都有一个分解它规定了状态(或图表)可以包含何种类型的子状态。超态的所有子态必须与超态分解的类型相同。状态分解可以是互斥的(OR)或并行的(AND)。
具有实心边界的子状态表示独占(OR)状态分解。使用此分解来描述相互排斥的操作模式。当一个状态有独占(OR)分解时,一次只能有一个子状态是活动的。
在以下示例中,任一州一种
或状态B.
可以活跃。如果状态一种
是活动的,任一状态A1
或状态A2
可以在给定时间处于活动状态。
使用虚线边框的变化表示并行(和)分解。使用此分解描述并发操作模式。当状态有平行(和)分解时,所有代表均在同一时间都处于活动状态。
在以下示例中,当状态一种
是活跃的,A1
和A2
既活跃在一起。
在并行状态中的活动本质上是独立的,如下面的示例所示。
在以下示例中,当状态一种
变得活跃,两个国家B.
和C
同时变得活跃。何时C
任一状态变为活动状态C1.
或状态C2.
可以活跃。
状态标签出现在状态矩形的左上角,其通用格式如下:
姓名/ 入口:输入操作期间:在行动退出:退出操作在event_name:event_name行动在message_name.:message_name行动绑定:事件
下面的例子演示了状态标签的组件。
状态标签中的每个操作都显示在遵循的子主题中。有关国家行动的更多信息,请参阅状态流程图的执行.
状态标签以状态的名称开头,然后是可选的/
的性格。在上例中,州名为在
和从
.有效的州名由字母数字字符组成,可以包括下划线(_
) 特点。有关更多信息,请参阅命名状态垃圾对象的指南.
层次结构在命名状态方面提供了一些灵活性。当前面有祖先状态时,在状态标签上输入的名称必须是唯一的。statflow层次结构中的名称是作为状态标签输入的文本,前面是用句点分隔的父状态的名称。每个状态都可以在标签中显示相同的名称,只要它们在层次结构中的全名是唯一的。
以下示例显示了各州的独特命名是有用的。
每一个州都有一个独特的名字,因为它在图表中的位置。美国各州的全称FAN1
和FAN2
是:
poweron.fan1.on.
PowerOn.FAN1.Off
poweron.fan2.on.
poweron.fan2.off.off.
在名称之后,您可以输入带有关键字标签的状态的可选操作语句,该关键字标签标识操作类型。您可以指定none、some或all。每个关键字后面的冒号是必需的。州名后面的斜杠是可选的,只要后面跟着一个回车。
对于每种类型的操作,您可以通过将每个操作与回车,分号或逗号分隔,输入多个操作。您可以通过添加额外来指定多个事件或消息的操作在
event_name
或在
message_name.
行。
如果您输入名称和斜杠,然后直接输入操作,操作将被解释为条目
行动。如果您仅指定,则此速记非常有用条目
行动。
该表总结了不同的状态操作类型。
国家行动 | 缩写 | 描述 |
---|---|---|
条目 |
EN. |
当状态变为活动状态时执行。 |
退出 |
前任 |
当状态处于活动状态并发生状态外的转换时执行。 |
在 |
杜 |
当状态处于活动状态并发生特定事件时执行。 |
捆绑 |
没有一个 | 绑定事件或数据对象,以便只有该状态及其子项可以广播事件或更改数据值。 |
|
没有一个 | 在状态处于活动状态时执行,它收到广播event_name . |
|
没有一个 | 执行消息时执行message_name. 可用。 |
|
没有一个 | 执行时间:
有关更多信息,请参阅 |
|
没有一个 | 执行时间:
有关更多信息,请参阅 |
|
没有一个 | 执行时间:
有关更多信息,请参阅 |
|
没有一个 | 执行:
有关更多信息,请参阅 |
条目
行动进入操作在状态变为活动状态时执行。条目动作由前缀组成条目
(或缩写EN.
)然后是冒号(:
)和一个或多个操作。要分隔多个条目操作,请使用分号或逗号。您还可以在单独的行中输入操作。
在前面的示例中,输入操作id = x + y
当图表采用默认转换且状态A变为活动状态时执行。看输入图表或州.
退出
行动当状态处于活动状态时执行退出操作并发生出局的转换。退出行动由前缀组成退出
(或缩写前任
)然后是冒号(:
)和一个或多个操作。要分隔多个退出操作,请使用分号或逗号。您还可以在单独的行中输入操作。
在前面的例子中,exit动作time_out
当图表从状态A转换到状态B或C时执行时执行。查看退出状态.
在
行动在执行操作期间,当状态是活动的,事件发生,没有有效的转换到另一个状态或当前状态可用。在动作期间由前缀组成在
(或缩写杜
)然后是冒号(:
)和一个或多个操作。要分隔多个操作期间,请使用分号或逗号。您还可以在单独的行中输入操作。
在前面的例子中,在动作期间switch_on ()
当状态C处于活动状态时执行,因为没有到另一个状态的有效转换。看状态流程图的执行.
捆绑
行动控件可以将数据和事件绑定到状态捆绑
行动。一种捆绑
行动包括前缀捆绑
后跟冒号(:
)和一个或多个事件或数据。要分隔多个事件和数据,请使用分号或逗号。您还可以在单独的行上输入事件和数据。
只有一个状态及其子状态可以更改绑定到该状态的数据或广播事件。其他状态可以读取绑定数据或侦听绑定事件,但不能更改绑定数据或发送绑定事件。
无论绑定状态是否为活动状态,绑定操作都将应用于图表。在前面的例子中,绑定操作绑定:id,time_out
国家一种
绑定数据id
和事件time_out
州一种
.这个绑定可以防止图表中的任何其他状态(或它的子状态)发生改变id
或广播事件time_out
.
如果一个状态包含更改数据或广播绑定到另一个状态的事件的操作,则会发生编译时错误。例如,这个图表包含两个产生错误的状态操作。
国家行动 | 错误的原因 |
---|---|
绑定:id 在州B. |
只有一个状态可以改变数据id ,这势必是州a |
条目:time_out 在州C |
只有一个州可以广播该事件time_out ,这势必是州a |
将函数调用事件绑定到状态也绑定了它所调用的函数调用子系统。当进入绑定状态时,函数调用子系统是启用的;当退出绑定状态时,函数调用子系统是禁用的。有关此行为的更多信息,请参见通过使用绑定动作控制函数调用子系统.
MATLAB中的独立状态流图中不支持绑定操金宝app作®.
在
行动当状态处于活动状态并收到事件或消息时执行操作。关于行动由前缀组成在
其次是一个独特的事件event_name
或消息message_name.
,冒号(:
)和一个或多个操作。要分隔多个on操作,请使用分号或逗号。您还可以在单独的行中输入操作。
您可以为多个事件或消息指定操作。例如,如果您想要不同的事件触发不同的动作,请输入多个在
状态Action标签中的Action语句:
在ev1:Action1();在EV2:Action2();
ev1
和ev2
在同一时间发生,那么action1 ()
首先执行action2 ()
执行第二个。看状态流程图的执行.