主要内容

状态流对象在执行过程中如何交互

在执行过程中,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_bedroomSecond_bedroom。当Family_suite变为活动状态时,并行状态将根据它们的执行顺序(由每个状态右上角的数字表示)被唤醒。基态同时保持活跃。有关更多信息,请参见平行州的执行命令输入图表或状态

从状态动作调用函数

而副态Checked_in是否激活,触发输入事件room_service。这个动作相当于叫客房服务。你的酒店账单取决于你的房间类型和你要求客房服务的次数。

当图表在输入事件中检测到上升或下降边时room_service,Checked_In状态执行此事件的操作。状态增加本地数据对象服务并调用MATLAB®函数费用。该函数将客房服务请求的总数作为输入,并将当前酒店账单作为输出返回。有关更多信息,请参见在超级状态下使用事件动作控制图表执行

具有历史节点的状态的执行

而副态Checked_in是否激活,触发输入事件fire_alarm,相当于触发火灾警报。你离开大楼,在外面指定的等候区等候。然后触发输入事件all_clear,这相当于发送了一个解除警报的信号,可以让你回到酒店内之前的位置。

当图表接收到事件广播时fire_alarm,从Check_inWaiting_area发生。历史的交叉点Check_inChecked_in,Executive_suite记录每个状态下最后一个活跃的次状态。从最内层的子状态开始,活动状态按升序变为非活动状态。后Check_in变得不活跃,Waiting_area变得活跃。

当图表接收到事件广播时all_clear,从Waiting_area的先前活动的子状态Check_in发生。Waiting_area的次状态之前变得不活跃Check_in从。开始,按照等级的递减顺序变得活跃Check_in

有关更多信息,请参见状态流程图如何响应事件退出状态,输入图表或状态

另请参阅

(金宝app模型)|(金宝app模型)|(金宝app模型)|(金宝app模型)

相关的话题