使用活动状态数据监视图表活动
如果你的状态流®图表包括与图表层次结构高度相关的数据,您可以通过使用简化设计活动状态数据.通过启用活动状态数据,您可以:
避免手动更新反映图表活动的数据。
在模拟数据检查器中记录和监视图表活动。
使用图表活动数据来控制其他子系统。
将图表活动数据导出到其他Simulink万博1manbetx®块。
有关更多信息,请参见创建层次结构来管理系统复杂性.
活动状态数据
使用活动状态数据输出可以简化某些状态流程图的设计。例如,在交通信号的这个模型中,激活状态决定了符号的值颜色
.当启用活动状态数据时,Stateflow可以通过跟踪状态活动来提供交通信号的颜色。明确的更新颜色
不再需要,因此您可以删除此符号并简化图表的设计。
状态流通过输出端口向Simulink提供活动状态数据,或将其作为本地数据提供给图表。万博1manbetx该表列出了可用的活动状态数据的不同模式。
活动模式 | 数据类型 | 描述 |
---|---|---|
自我的活动 | 布尔 | 状态是否活跃? |
孩子的活动 | 枚举 | 哪个子状态是活动的? |
叶态活性 | 枚举 | 哪个叶状态是活动的? |
要启用活动状态数据,请选择要监视的状态。然后,在属性检查器:
选择创建用于监视的输出复选框。
在下拉列表框中选择活动方式。
进入数据名称用于活动状态数据符号。
(可选)对于子或叶状态活动,输入枚举的名字用于活动状态数据类型。
默认情况下,Stateflow将状态活动报告为输出数据。要将活动状态数据符号的范围更改为本地数据,请使用符号窗格。
活动状态数据示例
本例使用活动状态数据为一对交通灯的控制器系统建模。
在Traffic Controller图表中,两个并行子图表管理控制交通灯的逻辑。子图表具有相同的层次结构,由三个子状态组成:红色的
,黄色的
,绿色
.输出数据Light1
而且Light2
对应子图中的活动子状态。这些信号:
确定动画交通灯的相位。
增加在每个红绿灯前等待的车的数量。
驱动一个安全断言子系统,验证两个交通灯永远不会同时绿灯。
若要查看“流量控制器”图表中的子图表,请单击图表左下角的箭头。
交通控制子图的行为
每个交通控制器循环遍历它的子状态,从红色的
来绿色
来黄色的
回到红色的
.每个状态对应红绿灯循环中的一个阶段。输出信号Light1
而且Light2
指示在任何给定时间哪个状态是活动的。
红灯
当红色的
状态变为活动状态,交通灯循环开始。在短暂的延迟后,控制员检查在十字路口等待的车辆。如果它检测到至少一辆车,或者如果一段固定的时间过去了,那么控制器就会通过设置请求绿灯greenLightRequest
来真正的
.发出请求后,控制器仍然在红色的
状态短时间,直到它检测到另一个交通信号是红色。然后控制器转换到绿色
.
绿灯
当绿色
状态变为活动状态,控制器通过设置取消绿灯请求greenLightRequest
来假
.控制器设置greenLightLocked
来真正的
,使另一个交通灯不能转绿灯。一段时间后,控制器检查来自另一个控制器的绿灯请求。如果它接收到一个请求,或者经过一段固定的时间,那么控制器将转换到黄色的
状态。
黄灯
在过渡到红色的
状态时,控制器保持在黄色的
陈述一段固定的时间。当黄色的
State变为inactive,控制器设置greenLightLocked
来假
,表示另一个红绿灯可以安全变绿。然后红绿灯循环又开始了。
交通灯的时间
几个参数定义了红绿灯循环的时间。若要更改这些参数的值,请双击流量控制器图表,并在“块参数”对话框中输入新的值。
参数 | 预设值 | 描述 |
---|---|---|
REDDELAY |
6秒 | 控制员开始检查十字路口车辆的时间长度。此外,在控制员请求绿灯后,交通灯可以变绿的最短时间。 |
MAXREDDELAY |
360秒 | 控制器在请求绿灯前检查车辆的最长时间。 |
GREENDELAY |
180秒 | 交通灯保持绿灯的最长时间。 |
MINGREENDELAY |
120秒 | 交通灯保持绿灯的最短时间。 |
YELLOWDELAY |
15秒 | 交通灯保持黄色的时间。 |
探索实例
启用日志记录
greenLightRequested
,greenLightLocked
,Light1
,Light2
.在符号窗格中,选择每个符号。然后,在属性检查器下,日志记录中,选择测井信号数据.在模拟选项卡上,单击运行.
在模拟选项卡,在审查结果,点击数据检查.
在模拟数据检查器中,在不同的轴上显示记录的信号。布尔信号
greenLightRequested
而且greenLightLocked
显示为0或1的数值。状态活动信号Light1
而且Light2
显示为值为绿色
,黄色的
,红色的
,没有一个
.
若要在模拟期间跟踪图表活动,可以使用模拟数据检查器中的缩放和光标按钮。例如,这个表详细描述了模拟的前300秒内的活动。
时间 | 描述 | 光1 |
Light2 |
greenLightRequested |
greenLightLocked |
---|---|---|---|---|---|
t= 0 | 在模拟开始时,两个交通灯都是红色的。 | 红色的 |
红色的 |
假 |
假 |
t= 6 | 6秒后(REDDELAY )时,两条街上都有汽车在等着。两个交通灯都通过设置要求绿灯greenLightRequested =真正的 . |
红色的 |
红色的 |
真正的 |
假 |
t= 12 | 再过6秒(
|
绿色 |
红色的 |
假 ,然后真正的 |
真正的 |
t= 132 | 120秒后( |
黄色的 |
红色的 |
真正的 |
真正的 |
t= 147 | 15秒后(
|
红色的 |
绿色 |
假 |
假 ,然后真正的 |
t= 153 | 6秒后( |
红色的 |
绿色 |
真正的 |
真正的 |
t= 267 | 2号灯变黄120秒( |
红色的 |
黄色的 |
真正的 |
真正的 |
t= 282 | 15秒后(
|
绿色 |
红色的 |
假 |
假 ,然后真正的 |
t= 288 | 6秒后( |
绿色 |
红色的 |
真正的 |
真正的 |
循环重复,直到模拟在t= 1000秒。