状态流对象在执行过程中如何交互
在执行过程中,Stateflow®对象相互交互以模拟真实世界的行为。本示例使用酒店入住流程来解释statflow图中的常见图形对象和非图形对象在执行期间如何交互。
酒店入住流程模型
此模型包含名为酒店
。图表接收来自四个方面的输入事件手动开关(金宝app模型)你切换到的块:
入住酒店
呼叫室服务
触发火灾警报
火警后发出警报信号
一个Mux(金宝app模型)Block将这些输入事件组合成一个输入向量,该输入向量连接到图表顶部的触发端口。
该图表还接收一个名为room_type
从一个多端口切换(金宝app模型)块。这个信号的值对应于你想住的房间类型。可能的选项有“执行”
对于高管套房来说,“家庭”
家庭套房,还有“单身”
一个单人间。
在模拟过程中,应支付的总金额(包括客房服务费用)将显示在显示(金宝app模型)块。
的酒店
图表包含图形对象(如状态和历史节点)和非图形对象(如数据和事件)。若要查看标记此图表中对象的图像,请参见Stateflow对象。
在启动模拟时,图表直到在其中一个输入事件中检测到上升沿或下降沿才会唤醒。
当您切换“手动切换”块时,您将触发一个唤醒图表的输入事件。当图表处于唤醒状态时,它会读取图表输入的值room_type
,执行任何有效的状态或转换动作,并输出的新值费
显示块。
在完成所有可能的执行阶段之后,图表将回到睡眠状态并等待下一个输入事件。
表初始化
启动模拟并触发其中一个输入事件。这个动作对应的是进入酒店并在前台停下。
因为图表属性在初始化时执行(输入)图表禁用时,图表将保持休眠状态,直到在其中一个输入事件中检测到上升或下降边。然后图表将被唤醒并执行其默认转换。默认转换到状态Check_in
发生,使该状态为活动状态。然后,默认转换到子状态Front_desk
发生,使该状态为活动状态。然后图表就休眠了。有关更多信息,请参见在初始化时执行图表和输入图表或状态。
国与国之间转换
而副态Front_desk
是否激活,触发输入事件check_in
。此操作对应于入住酒店。你拿起你的包,从前台走到你的房间,然后把你的包放下。
在图表中,check_in
事件保护来自子状态的传出转换Front_desk
到次州Checked_in
。当触发该事件时,转换生效。的退出动作Front_desk
设置本地数据对象的值move_bags
变为1,亚态变为非活跃态。然后,Checked_in
变为活动,并设置入口操作move_bags
为0。有关更多信息,请参见状态流程图如何响应事件,退出状态,输入图表或状态。
默认转换路径的评估
在图表执行条目
的操作Checked_in
状态时,它计算到其中一个子状态的默认转换路径。变为活动的子状态对应于房间类型。如果你选择行政套房,基本费用是1500美元。如果你选择家庭套房,基本费用是1000美元。如果您选择单人间,基本费用是500美元。
图表按以下顺序测试默认转换路径的分支:
如果图表输入
room_type
=“执行”
,顶部转换有效。条件操作设置图表输出费
到1500和亚态Executive_suite
变得活跃。如果图表输入
room_type
=“家庭”
,中间过渡是有效的。条件动作将费用设置为1000和次状态Family_suite
变得活跃。如果图表输入
room_type
=“单身”
,底部转换有效。条件动作将费用设置为500和次状态Single_room
变得活跃。
有关更多信息,请参见一套流程图的执行顺序。
具有独占子州的州的执行
如果触发输入事件check_in
而数值的图表输入room_type
是“执行”
,亚态Executive_suite
变得活跃。这种亚状态对应的是待在高管套房。这套套房有独立的卧室和用餐区,所以你可以在任何时候只在一个区域的套房。当你到达行政套房时,你首先进入卧室。当你点客房服务时,你进入用餐区用餐。当你想把食物从用餐区拿走时,你再叫客房服务,然后回到卧室。
国家Executive_suite
具有排他(OR)分解。这个州有两个次州,卧室
和Dining_area
。当Executive_suite
首先变为活动,默认转换为卧室
发生,使该次状态激活。输入事件的广播room_service
触发从卧室
来Dining_area
,使卧室
不活跃的,Dining_area
活跃。随后播出的room_service
触发返回的转换Dining_area
来卧室
,使卧室
主动和Dining_area
不活跃的。有关更多信息,请参见输入图表或状态。
使用并行子状态执行状态
如果触发输入事件check_in
而数值的图表输入room_type
是“家庭”
,亚态Family_suite
变得活跃。这种亚状态对应的是住在家庭套房。当你的家人到达套房时,家庭成员可以在两间卧室里度过时光。例如,父母可以在第一间卧室看电影,而孩子们在第二间卧室睡觉。
国家Family_suite
具有并行(AND)分解。这个州有两个次州,First_bedroom
和Second_bedroom
。当Family_suite
变为活动状态时,并行状态将根据它们的执行顺序(由每个状态右上角的数字表示)被唤醒。基态同时保持活跃。有关更多信息,请参见平行州的执行命令和输入图表或状态。
从状态动作调用函数
而副态Checked_in
是否激活,触发输入事件room_service
。这个动作相当于叫客房服务。你的酒店账单取决于你的房间类型和你要求客房服务的次数。
当图表在输入事件中检测到上升或下降边时room_service
,Checked_In
状态执行在
此事件的操作。状态增加本地数据对象服务
并调用MATLAB®函数费用
。该函数将客房服务请求的总数作为输入,并将当前酒店账单作为输出返回。有关更多信息,请参见在超级状态下使用事件动作控制图表执行。
具有历史节点的状态的执行
而副态Checked_in
是否激活,触发输入事件fire_alarm
,相当于触发火灾警报。你离开大楼,在外面指定的等候区等候。然后触发输入事件all_clear
,这相当于发送了一个解除警报的信号,可以让你回到酒店内之前的位置。
当图表接收到事件广播时fire_alarm
,从Check_in
来Waiting_area
发生。历史的交叉点Check_in
,Checked_in
,Executive_suite
记录每个状态下最后一个活跃的次状态。从最内层的子状态开始,活动状态按升序变为非活动状态。后Check_in
变得不活跃,Waiting_area
变得活跃。
当图表接收到事件广播时all_clear
,从Waiting_area
的先前活动的子状态Check_in
发生。Waiting_area
的次状态之前变得不活跃Check_in
从。开始,按照等级的递减顺序变得活跃Check_in
。
有关更多信息,请参见状态流程图如何响应事件,退出状态,输入图表或状态。
另请参阅
手动开关(金宝app模型)|Mux(金宝app模型)|多端口切换(金宝app模型)|显示(金宝app模型)