通过使用状态来表示操作模式
一个状态描述反应式系统的工作模式。在状态流中®图中,状态用于顺序设计以创建状态转换图。
在模拟过程中,状态可以是激活的或非激活的。状态的活动取决于事件和条件。事件通过使状态变为活动或非活动来驱动状态转换图的执行。有关更多信息,请参见状态流程图的执行.
要表示系统中的多级组件,可以通过在超状态中嵌套底态来创建状态层次结构。有关更多信息,请参见使用状态层次结构设计多级状态复杂性.
为了对互斥操作模式建模,在一个状态中启用排他性(OR)分解,以便最多有一个子状态同时处于活动状态。要实现并发运行的操作模式,可以在状态中启用并行(AND)分解,以便其所有子状态同时处于活动状态。有关更多信息,请参见使用状态分解定义排他和并行模式.
例如,在这个图表中,各州集成软件包
而且定时关机
表示空气控制系统的开和关模式。在这个州集成软件包
即平行基态FAN1
而且FAN2
表示一对风扇的工作模式。每一种状态都包含排他性的子状态,称为在
而且从
.有关此示例的详细信息,请参见利用并行性对同步子系统建模.
创建状态
向状态流图中添加一个状态:
打开图表。
在对象面板中,单击State图标.
在图表画布上,单击新状态的位置。
为状态输入一个标签,然后单击状态之外。标签指定状态的名称和状态在模拟期间执行的任何可选操作。有关更多信息,请参见定义状态中的动作.
创建状态后,可以使用状态流编辑器更改状态的大小、位置和内容:
若要调整状态大小,请单击并拖动状态的角落。
若要移动状态,请单击并拖动状态的内部。
若要编辑状态标签,请单击要编辑的字符位置附近的标签文本。
提示
父状态在图形上必须足够大,以容纳它的所有子状态,因此在将新的子状态拖拽到父状态之前,您可能需要调整父状态的大小。或者,您可以将超状态转换为子图。有关更多信息,请参见使用子图封装模态逻辑.
定义状态中的动作
状态的标签指定状态的名称以及状态在模拟期间执行的任何可选操作。一个状态标签出现在状态的左上角,由以下一般格式组成:
名称入口:entry_actions during: during_actions exit: exit_actions on event_name: on_event_actions on message_name: on_message_actions bind: event_name, data_name
状态动作可以以任何顺序出现。对于每种类型的操作,您可以通过在单独的行上输入每个语句来指定多个语句。或者,要分隔同一行上的多条语句,可以使用逗号或分号。你也可以结合条目
,在
,退出
执行相同语句的操作。有关更多信息,请参见通过组合状态操作消除冗余代码.
提示
如果直接在状态名之后添加语句,图表将这些语句解释为组合条目
而且在
行动。
国家的名字
状态标签以状态名开始,后面跟着一个可选的斜杠(/
).州名区分大小写,由字母数字和下划线组成。有关更多信息,请参见命名状态流对象的指南.
为了避免命名冲突,不要给兄弟状态分配相同的名称。但是,如果每个州的全名是唯一的,则可以对多个州使用相同的州名。状态的全名由状态层次结构中的祖先名称序列组成,以句点分隔。例如,在前面的例子中,状态FAN1
而且FAN2
由这些唯一的全名来标识:
PowerOn.FAN1.On
PowerOn.FAN1.Off
PowerOn.FAN2.On
PowerOn.FAN2.Off
输入操作
要添加条目
行动中,输入条目
或在
,后面跟着冒号(:
)和一个或多个语句。当状态变为活动状态时,图表执行这些语句。例如,在这个图表中条目
州内行动定时关机
的值。气流
当空气控制系统关闭时为零。有关更多信息,请参见输入图表或状态.
在行动
要添加在
行动中,输入在
或杜
,后面跟着冒号(:
)和一个或多个语句。当状态为活动状态且没有有效转换到另一状态时,图表执行这些语句。例如,在这个图表中在
州内行动集成软件包
计算的值气流
当空气控制系统开启时。有关更多信息,请参见状态流程图的执行.
退出操作
要添加退出
行动中,输入退出
或前女友
,后面跟着冒号(:
)和一个或多个语句。当状态处于活动状态并且发生状态外的转换时,图表执行这些语句。例如,在这个图表中退出
州内行动集成软件包
的值。气流
当空气控制系统关闭时为零。有关更多信息,请参见退出状态.
在行动
要添加在
行动中,输入在
,后面跟着事件或消息的名称、冒号(:
),以及一条或多条语句。当状态处于活动状态并接收到指定的事件或消息时,图表执行这些语句。有关更多信息,请参见通过广播事件同步模型组件而且通过发送消息与状态流程图通信.
你可以指定在
针对多个事件或消息的操作。例如,此状态包含不同的在
事件的操作E1
而且E2
.
如果多个事件同时发生,则相应的在
操作按照它们在状态标签中出现的顺序执行。有关更多信息,请参见状态流程图的执行.
提示
您可以使用隐式事件(例如改变
,输入
,或退出
)和时间逻辑运算符(例如后
,在
,之前
,或每一个
)触发在
状态中的动作。有关更多信息,请参见使用隐式事件控制图表行为而且使用时序逻辑控制图表执行.
绑定操作
要添加绑定
行动中,输入绑定
,后面跟着冒号(:
)和一个或多个事件或数据对象的名称。如果要分隔多个事件和数据,请使用分号或逗号,或者在不同的行中输入事件和数据。例如,在这个图表中,状态一个
包含一个绑定
绑定事件的操作E
数据对象x
给国家。
一个绑定
无论状态是激活还是非激活,操作都将应用。其他状态可以读取绑定数据或侦听绑定事件,但只有状态及其子状态可以更改绑定数据的值或广播绑定事件。否则,将发生编译时错误。
将函数调用事件绑定到状态也绑定了该事件调用的函数调用子系统。函数调用子系统在绑定状态为活动时启用,在绑定状态为非活动时禁用。有关更多信息,请参见使用绑定动作控制函数调用子系统.
如果图表包含将相同数据或事件绑定到多个状态的操作,则会发生编译时错误。
独立的MATLAB状态流程图®不支持金宝app绑定
行动。
组状态
您可以通过对状态的内容进行分组来简化图表的编辑,使它们充当单个图形单元。例如,移动分组状态也会移动该状态中的子状态、过渡和其他图形对象。要对状态进行分组,右键单击状态并选择组子图>集团在上下文菜单中。
在选择状态内的对象或将其他图形对象移动到状态之前,必须取消对状态的分组。例如,试图将状态或图形函数移动到分组状态会导致无效交集错误.若要取消状态分组,请右键单击状态并清除组子图>集团在上下文菜单中。
在“状态流编辑器”中,分组状态比未分组状态颜色更深。例如,在这个图表中,状态FAN1
是分组而国家FAN2
没有分组。
为状态指定属性
下面列出的属性使您能够指定状态如何与状态流程图中的其他组件交互。属性中修改这些属性属性检查器、“模型资源管理器”或“状态属性”对话框。
使用属性检查器:
在建模选项卡,在设计数据中,选择属性检查器.
在“状态流编辑器”中,选择状态。
在属性检查器,编辑状态属性。
使用模型资源管理器:
在建模选项卡,在设计数据中,选择模型浏览器.
在模型层次结构窗格中,选择状态。
在对话框窗格中,编辑状态属性。
使用“状态属性”对话框:
在“状态流编辑器”中,右键单击状态。
选择属性.
在属性对话框中,编辑状态属性。
还可以通过使用以编程方式修改状态属性Stateflow。状态
对象。有关statflow编程接口的详细信息,请参见statflow API概述.
的名字
州名。此属性是只读的。当您在“模型资源管理器”和“状态属性”对话框中单击状态名称超链接时,“状态流编辑器”将状态显示到前台。
执行顺序
并行(AND)状态的执行顺序。此属性对于排他(OR)状态不出现。有关更多信息,请参见平行州的执行命令.
创建用于监视的输出
是否为该状态创建活动状态数据输出端口。看到通过活动状态数据监视状态活动.
函数内联选项
在生成的代码中显示状态函数。选项包括:
汽车
—内部计算决定了生成代码中状态函数的外观。内联
-对状态函数的调用被替换为代码,只要该函数不是递归的一部分。函数
—状态函数作为单独的静态函数实现。
有关更多信息,请参见生成代码中的内联状态函数(金宝app仿真软件编码器).属性中不可用此属性属性检查器.
标签
状态的标签。有关更多信息,请参见定义状态中的动作.属性中不可用此属性属性检查器.
记录自我活动
是否开启信号记录功能。在仿真过程中,信号记录将状态的自活动保存到MATLAB工作空间。有关更多信息,请参见状态和数据的日志模拟输出.
日志的名字
用于记录状态活动的信号名称。
若要使用状态名称,请选择
使用州名
.若要指定不同的名称,请选择
自定义
并输入自定义日志记录名称。
最后限制数据点
是否将记录的数据点数量限制为指定的最大值。例如,如果将最大数据点数设置为5000,则图表只记录模拟生成的最后5000个数据点。
大量毁灭
是否通过使用指定的抽取间隔跳过样本来限制记录的数据量。例如,如果将抽取间隔设置为2,则图表每隔记录一次样本。
测试点
是否将状态设置为可以在模拟期间使用浮动范围监视的测试点。您还可以将测试点的值记录到MATLAB工作区。有关更多信息,请参见在状态流程图中监视测试点.
描述
状态描述。
文档链接
链接到该州的在线文档。您可以在“MATLAB命令窗口”中输入web URL地址或MATLAB命令,以HTML文件或文本的形式显示文档。当你点击文档链接, Stateflow计算链接并显示文档。
另请参阅
对象
工具
- 模型浏览器(金宝app模型)