文档

使用状态表示操作模式

创建状态

通过在编辑器中为特定的图表(块)绘制状态来创建状态。遵循以下步骤:

  1. 选择State工具:

  2. 将指针移动到绘图区域。

    在绘图区域中,指针变为状态形状(带有椭圆形角的矩形)。

  3. 在特定位置单击以创建状态。

    创建的状态显示为问号(?)标签在左上角。

  4. 单击问号。

    问号处出现文本光标。

  5. 为状态输入一个名称,并在完成后单击状态的外部。

状态的标签指定其必需的名称和可选的操作。看到标签州了解更多细节。

移动和调整状态大小

要移动一个状态,请执行以下操作:

  1. 单击并拖动状态。

  2. 在新的位置释放它。

要调整状态大小,请执行以下操作:

  1. 把你的指针放在州的一个角上。

    当你的指针在一个角落,它显示为一个双端箭头(仅限PC;指针的外观因其他平台而异)。

  2. 单击并拖动状态的角以调整状态的大小并释放鼠标左键。

创建子状态和超级状态

一个亚态是一种状态,只有当称为其父状态的另一状态处于活动状态时,该状态才能处于活动状态。有子态的态被称为超级大国.要创建子状态,请单击State工具并将新状态拖拽到希望成为超状态的状态中。一个Stateflow®图表在指定的父状态中创建子状态。你可以用这种方式任意深度地嵌套状态。若要更改子状态的父状态,请将其从图表中的当前父状态拖出,然后将其拖放到新父状态中。

请注意

父状态必须在图形上足够大以容纳其所有子状态。在将新的子状态拖入父状态之前,可能需要调整其父状态的大小。您可以通过将超状态声明为子图来绕过对大图形大小状态的需求。看到使用子图封装模态逻辑获取详细信息。

组状态

何时对一个州进行分组

将一个状态分组,以便将该状态内的所有图形对象移动到一起。当对一个状态进行分组时,图表将该状态及其内容视为单个图形单元。这种行为简化了图表的编辑。例如,移动分组状态会移动该状态中的所有子状态和函数。

如何对国家进行分组

您可以通过右键单击某个状态并进行选择来对其进行分组分组和子图>集团在上下文菜单中。该状态显示为灰色阴影,表明它现在已分组。

何时取消状态组

在执行这些操作之前,必须取消对状态的分组:

  • 选择状态内的对象

  • 将其他图形对象移动到该状态

    如果尝试将对象(如状态和图形函数)移动到分组状态,则会看到无效的交集错误消息。同样,具有无效交集的对象具有红色边框。

如何解除状态组

您可以右键单击某个状态,然后清除它,从而取消对该状态的分组分组和子图>集团在上下文菜单中。国家的背景不再是灰色的。

指定亚状态分解

通过设置超级状态的分解,可以指定超级状态包含并行(AND)状态还是独占(or)状态。当一个状态处于活动状态时,其子状态都处于活动状态,则该状态具有并行(AND)分解。只有一个子状态处于活动状态的状态具有排他(OR)分解。空状态的分解是排他的。

要更改状态的分解,请选择该状态,右键单击以显示该状态分解上下文菜单,并选择或(独家)(平行)菜单上的。

您还可以指定图表的状态分解。在这种情况下,状态流图将其顶级状态视为子状态。图表创建具有互斥分解的状态。要指定图表的分解,取消选择任何选定的对象,右键单击以显示图表的分解分解上下文菜单,并选择或(独家)(平行)菜单上的。

基态的出现表明了它们的超态的分解。独占子状态有实线边界,平行子状态有虚线边界。平行子状态在其右上角也包含一个数字。数字表示子状态相对于其兄弟子状态的激活顺序。

为并行状态指定激活顺序

可以使用两种方法之一指定激活顺序:显式排序或隐式排序。

  • 默认情况下,当您创建新的状态流图表时,明确的要求适用。在本例中,您可以逐个州指定激活顺序。

  • 您还可以通过让图表根据位置对平行状态排序来覆盖显式排序。这种模式被称为隐式排序

有关更多信息,请参见并行状态的显式排序并行状态的隐式排序

请注意

并行状态的激活顺序显示在其右上角。

更改状态属性

使用“状态”对话框查看和更改状态的属性。进入“状态”对话框。

  1. 右键单击状态并选择属性

    出现“状态属性”对话框。有关属性的说明,请参见可以在常规窗格中设置的属性可以在日志窗格中设置的属性

  2. 修改属性设置,然后单击以下按钮之一:

    • 应用以保存更改并保持“状态”对话框打开

    • 取消返回到以前的设置

    • 好吧保存更改并关闭对话框

    • 帮助在HTML浏览器窗口中显示文档

可以在常规窗格中设置的属性

一般“状态属性”对话框的窗格显示如下所示。

属性中设置这些属性一般窗格。

财产

描述

名字

状态流程图名称;只读;单击此超文本链接可将状态显示在前台。

执行顺序

设置并行(AND)状态的执行顺序。此属性不会出现在排他(OR)状态中。看到并行状态的执行顺序

创建监控数据

选择此选项以创建状态活动数据。看到关于活动状态数据

内联选项

选择以下选项之一来控制生成代码中状态函数的内联:

  • 汽车

    基于内部启发式内联状态函数。

  • 内联

    总是在父函数中内联状态函数,只要该函数不是递归的一部分。看到生成代码中的内联状态函数(万博1manbetx仿真软件编码器)

  • 函数

    为每个状态创建单独的静态函数。

标签

状态的标签,其中包括状态及其相关操作的名称。看到标签州

可以在日志窗格中设置的属性

日志记录“状态属性”对话框的窗格显示如下所示。

属性中设置这些属性日志记录窗格。

财产

描述

日志自我活动

将自活动值保存到MATLAB中®仿真期间的工作空间。

测试点

将状态指定为一个测试点,该测试点可以在模型仿真期间使用浮动范围进行监控。您还可以将测试点值记录到MATLAB工作空间对象中。看到监控状态流图中的测试点

日志的名字

指定与已记录的自活动相关联的名称。万博1manbetx动态仿真模块®软件默认使用信号名称作为其日志名称。若要指定自定义日志记录名称,请选择自定义从列表框中,并在相邻的编辑字段中输入新名称。

将数据点限制在最后

将记录的自活动限制为最近的样本。

大量毁灭

通过跳过样本来限制自我活动记录。例如,抽取因子为2可以节省每一个其他样本。

可以在文档窗格中设置的属性

文档“状态属性”对话框的窗格显示如下所示。

属性中设置这些属性文档窗格。

财产

描述

描述

文字描述或评论

文档链接

输入URL地址或通用MATLAB命令。的例子是www.tianjin-qmedu.commailto: email_address,编辑/规范/数据/ speed.txt

标签州

状态的标签指定了该状态所需的名称,以及在进入、退出状态或在活动状态下接收事件时执行的可选操作。

状态标签有以下一般格式。

名字/条目:输入操作期间:在行动退出:退出操作绑定:数据事件event_or_message_name在event_or_message_name操作

本格式中斜体部分的含义如下:

关键字

条目

描述

不适用

名字

对带有可选斜杠的状态的唯一引用

条目

输入操作

在进入特定状态时执行的操作(作为向该状态进行转换的结果)

在行动

当状态在活动状态下接收到事件时执行的操作,并且没有从该状态进行有效的转换

退出前女友

退出操作

当状态退出时执行的操作,因为从状态中取出了转换

绑定

数据事件

将指定的数据或事件绑定到此状态。绑定的数据只能被这个状态或它的子状态修改,但可以被其他状态读取。绑定事件只能由这个状态或它的子状态广播。

event_or_message_name

关于event_name动作

指定的事件或消息

当状态处于活动状态并且指定的事件发生或消息存在时执行的操作。

有关更多信息,请参见事件如何在状态流图中工作消息如何在状态流图中工作

输入名称

最初,一个州的标签是空的。状态流程图通过显示一个?在状态的标签位置(左上角)。通过输入状态名称开始标记状态,步骤如下:

  1. 单击状态。

    该状态变为高亮颜色,并且在该状态的左上角出现一个问号字符。

  2. 点击?编辑标签。

    出现一个编辑光标。现在可以自由地键入标签了。

    在州标签的第一行输入州名。名称区分大小写。为避免命名冲突,不要为兄弟状态分配相同的名称。但是,您可以将相同的名称分配给不共享相同父节点的状态。

    标记状态后,在状态外面单击。否则,继续输入操作。若要重新编辑标签,请单击要编辑的字符位置附近的标签文本。

输入操作

在标签中输入状态名称后,您可以为以下任何一种操作类型输入操作:

  • 输入操作-用关键字在新行开始条目,后面是冒号,后面是一行或多行上的一个或多个操作语句。要分隔同一行中的多个操作,请使用逗号或分号。

    您可以在与州名相同的行上开始输入操作。在本例中,以正斜杠开始输入操作(/)而不是entry关键字。

  • 退出操作-用关键字在新行开始退出前女友,后面是冒号,后面是一行或多行上的一个或多个操作语句。要分隔同一行中的多个操作,请使用逗号或分号。

  • 在行动-用关键字在新行开始,后面是冒号,后面是一行或多行上的一个或多个操作语句。要分隔同一行中的多个操作,请使用逗号或分号。

  • 绑定操作-用关键字在新行开始绑定后接冒号,后接一行或多行上的一个或多个数据或事件。要分隔同一行中的多个操作,请使用逗号或分号。

  • 在行动-以关键字开头,后面是空格和事件或消息的名称,后面是冒号,后面是一行或多行上的一个或多个操作语句,例如

    ev1上:exit();

    要分隔同一行中的多个操作,请使用逗号或分号。如果您希望不同的事件触发不同的操作,请输入多个块中的状态标签。每个块指定特定事件或消息的操作,例如:

    On ev1: action1();在ev2上:action2();

您为某个状态输入的操作的执行仅取决于它们的操作类型,而不取决于您在标签中输入操作的顺序。如果你知道为语句显式指定操作类型,图表将该语句视为条目操作。

提示

您还可以在状态的属性对话框中编辑标签。看到更改状态属性

这个话题有帮助吗?