在执行期间,Stateflow®对象相互交互以模拟真实世界的行为。在下面的模型中,显示了不同的statflow对象,并解释了它们之间的交互。
示例模型显示了图表中常见的图形对象和非图形对象在执行期间是如何交互的。这些对象包括:
条件和条件作用
专属(或)国家
流程图
职能调用
历史交汇处
平行(和)状态
国家行动
由输入事件保护的转换
有关图表语义的详细信息,请参见图表执行的阶段.
本例使用酒店登记流程来解释状态流程图语义。
的sf_语义酒店_入住
模型由四部分组成手动开关(金宝app模型)块,一多路复用器(金宝app模型)块,一多端口交换机(金宝app模型)街区,一张酒店图表,还有一张陈列(金宝app模型)块。
块 | 意图 | 基本原理 |
---|---|---|
手动开关(金宝app模型) |
允许在模拟期间在两个设置之间切换,而无需暂停或重启。 |
在模拟过程中,您可以通过发送以下输入事件之一交互式触发图表:
|
多路复用器(金宝app模型) |
将多个输入信号组合成一个向量。 |
只有当图表作为输入向量连金宝app接到图表的触发端口时,图表才能支持多个输入事件。 |
多端口交换机(金宝app模型) |
允许在两个以上输入之间进行选择。 |
此块为图表输入数据提供值 一个手动开关块不能支持两个以上的输入,金宝app但支持一个多端口交换机块罐。 |
陈列(金宝app模型) |
显示输入信号的最新数值。 |
在模拟期间,对图表输出数据的任何更改 |
Hotel图表包含图形对象,如状态和历史节点,以及非图形对象,如条件和条件动作。
有关对象到其在图表中位置的映射,请参见状态流对象.
模拟开始时,图表将唤醒并执行其默认转换,因为在初始化时执行(输入)图表期权已开启(见在初始化时执行图表).然后图表就睡着了。
请注意
如果此选项处于禁用状态,则在您切换其中一个选项之前,图表不会唤醒手动开关阻碍。可以在“图表属性”对话框中验证此选项的设置。在图表的顶层内单击鼠标右键,然后选择性质从上下文菜单中。
图表只有在一个时才会醒来边沿触发输入事件发生:check_in
,客房服务
,火警
或一切正常
.当你切换一个手动开关块用于模拟期间的输入事件,图表检测上升或下降边并唤醒。当图表是清醒的:
的多端口交换机块为图表输入数据提供一个值room_type
.
的陈列块显示图表输出数据值的任何更改费用
.
完成执行所有可能的执行阶段后,图表返回睡眠状态。
以下各节解释了酒店图表中每个阴影区域的图表执行。
提示
单击着色区域可直接跳转到有关图表执行阶段的信息。
本节描述了Front_desk
在图表醒来之后的状态。
阶段 | 酒店情景 | 图表行为 |
---|---|---|
1 | 您的第一站是酒店的前台。 |
在图表级别,默认转换为 参考,见输入图表或状态. |
2 | 你在入住酒店后离开前台。 |
的 参考,见状态流程图如何响应事件. |
3. | 就在离开前台之前,你可以拿起你的包搬到你的房间。 |
在转换发生之前 参考,见退出一个国家. |
图表初始化建模指南。以下准则适用于图表初始化。
建模指南 | 为什么本指南适用 | 参考 |
---|---|---|
使用独占(或)分解时,当层次结构级别的两个状态时可以同时处于活动状态。 |
本指南可确保正确的图表执行。例如, |
|
使用默认转换将第一个状态标记为在独占(或)状态中变为活动状态。 |
此指南可防止图表执行期间出现状态不一致错误。 |
|
使用事件,而不是条件,保护依赖于出现的转换,而无需固有的数值。 |
由于您无法轻松量化入住酒店的数值,因此将此类事件建模为事件。 |
|
用A. |
其他类型的状态操作执行方式不同,不适用:
|
本节介绍退出后发生的情况Front_desk
状态:对单个连接的一组传出转换的评估。
阶段 | 酒店情景 | 图表行为 |
---|---|---|
1 | 您可以移动到三种类型的房间之一。 |
后 参考,见一组流程图的执行顺序. |
2 | 如果你选择的是高级套房,基本费用是1500美元。 |
如果是 |
3. | 如果您选择家庭套房,基本费用是1000。 |
如果 |
4 | 如果你选择单人房,基本费用是500英镑。 |
如果 |
用于评估输出过渡的建模指南。以下指南适用于转换语法。
本节描述在输入Checked_in
状态,无论哪个子状态变为活动状态。
阶段 | 酒店情景 | 图表行为 |
---|---|---|
1 | 到达所需的房间后,您可以完成手提袋。 |
的 |
2 | 如果你叫客房服务,你的旅馆账单会不断增加。 |
如果图表接收到活动广播
参考,见状态流程图如何响应事件. |
国家行动执行的建模指南。下面的指导方针适用于状态操作。
建模指南 | 为什么本指南适用 | 参考 |
---|---|---|
用A. |
其他类型的状态操作执行方式不同,不适用:
|
状态 |
用A. |
||
使用超状态来封装共享相同状态操作的多个子状态。 |
此指南支持重用应用于多个子状态的状态操作。您只编写状态操作一旦,而不是在每个子变量中单独写入它们。 |
创建子状态和超级状态 |
图表的这一部分描述了在状态处于活动状态时如何执行函数调用。
阶段 | 酒店情景 | 图表行为 |
---|---|---|
1 | 根据您的房间类型和客房服务请求总数,您可以跟踪您的酒店账单。 |
如果你双击函数框,你会在函数编辑器中看到这个脚本: 功能y=费用(x)如果(房间类型==1)y=1500+(x*50);否则如果(房间类型==2)y=1000+(x*25);否则y=500+(x*5);结束 |
函数调用的建模指南。以下准则适用于函数调用。
建模指南 | 为什么本指南适用 | 参考 |
---|---|---|
使用MATLAB函数在图表中执行数值计算。 |
MATLAB函数比图形函数、真值表或Simulink更擅长处理数值计算金宝app®功能。 |
通过定义MATLAB函数重用MATLAB代码 |
在功能签名中使用描述性名称。 |
描述性函数名称增强了图表对象的可读性。 |
图表的这一部分显示了如何具有独占(或)分解的状态。
阶段 | 酒店情景 | 图表行为 |
---|---|---|
1 | 当你到达行政套房时,你首先进入卧室。 请注意 行政套房有独立的卧室和用餐区。因此,您在任何时候都只能在套房的一个区域。 |
当条件时
参考,见输入图表或状态. |
2 | 当你叫客房服务时,你进入用餐区用餐。 |
当 |
3. | 当您希望从用餐区拆除的食物时,您可以再次订购客房服务,然后返回卧室。 |
当 |
4 | 如果您因火警而离开行政套房,则在发出解除警报信号后返回前一个房间。 |
如果过渡 |
排他性(OR)状态执行的建模指南。以下准则适用于独占(OR)州。
图表的这一部分显示了如何使用并行(和)分解的状态。
阶段 | 酒店情景 | 图表行为 |
---|---|---|
1 | 当您的家人到达套房时,家庭成员可以在两个卧室(例如,父母在主卧室,孩子在第二个卧室)。默认房间选择不适用。 |
当条件时
参考,见输入图表或状态. |
2 | 你可以同时占据两个房间。 |
|
并行(和)状态执行的建模指南。以下准则适用于平行(和)国家。
图表的这一部分描述了事件如何在异构(或)状态之间保护转换。
阶段 | 酒店情景 | 图表行为 |
---|---|---|
1 | 如果火灾报警的声音,您将离开酒店并搬到外面的等候区。 |
当图表接收到一个事件广播时 |
2 | 如果出现全清零,您可以离开等候区并返回酒店内的上一个位置。 |
当图表接收到一个事件广播时 中每个层次的历史连接 |
保护过渡的建模指南。下面的指南讨论了事件和条件的使用。
建模指南 | 为什么本指南适用 | 参考 |
---|---|---|
使用事件,而不是条件,保护依赖于没有数值的发生的转换。 |
由于无法轻松量化火灾警报或完全清除信号的数值,因此将此类事件建模为事件。 |
通过发送输入事件激活状态流程图 |