Stateflow快速入门系列(六): 使用激活状态数据监视图的活动

如果 Stateflow 图包含与图层次结构相关的数据,则可以使用激活状态数据来简化设计。通过启用激活状态数据,您可以:

  • 避免手动更新反映图活动的数据。
  • 在仿真数据检查器中记录并监视图活动。
  • 使用图活动数据来控制其他子系统。
  • 将图活动数据导出到其他 Simulink 模块。

例如,在以下交通信号模型中,被激活的状态决定输出信号 color 的值。您可以通过启用激活状态数据来简化图的设计。在本例中,Stateflow 图可以通过跟踪状态活动来提供交通信号的颜色,因此您不必显式更新 color 的值。

要启用激活状态数据,请选择一个要监控的状态。然后,在属性检查器中:

1.选择创建监控输出

2.选择以下活动类型之一:

  • Self activity - 指示状态是否激活的布尔值
  • Child activity - 指示哪个子状态被激活的枚举值
  • Leaf state activity - 指示哪个叶状态被激活的枚举值

3.输入激活状态数据符号的数据名称

4.(可选)对于 Child activity  Leaf state activity,输入激活状态数据类型的枚举名称

默认情况下,Stateflow 图将状态活动作为输出数据报告给 Simulink 模型。要将激活状态数据符号的作用域更改为局部数据,请使用符号窗格。

交通信号控制器建模

此示例使用激活状态数据为一对交通信号灯的控制器系统建模。

 Traffic Controller 图中,由两个平行的子图管理着控制交通信号灯的逻辑。这两个子图具有相同的层次结构,即包含三个子状态:RedYellow  Green。输出数据 Light1  Light2 对应于子图中的激活子状态。这些信号:

  • 确定动画交通信号灯的阶段。
  • 帮助统计在每个信号灯下等待的汽车数量。
  • 驱动一个 Safety Assertion 子系统,确认两个交通信号灯永远不会同时呈绿色。

要查看 Traffic Controller 图中的子图,请点击图左下角的箭头。

每个交通控制器循环遍历其子状态,从 Red  Green  Yellow,然后再返回到 Red。每个状态对应于交通信号灯循环中的一个阶段。输出信号 Light1  Light2 指示在任意给定时刻哪个状态被激活。

红灯

 Red 状态被激活时,交通信号灯循环开始。经过短暂的延迟后,控制器检查在十字路口等待的汽车。如果检测到有至少一辆汽车或者经过了一定的时间,则控制器会将 greenLightRequest 设置为 true,以此来请求绿灯。在发出请求后,控制器继续保持 Red 状态较短的一段时间,直到检测到另一个交通信号为红色,控制器才会将状态转移到 Green

绿灯

 Green 状态被激活时,控制器会将 greenLightRequest 设置为 false,以此来取消其绿灯请求。控制器将 greenLightLocked 设置为 true,以防止另一个交通信号变绿。在短暂延迟后,控制器会检查是否有来自另一个控制器的绿灯请求。如果它收到请求或经过了一定的时间,则控制器会转移到 Yellow 状态。

黄灯

 Yellow 状态变为非激活时,控制器会将 greenLightLocked 设置为 false,指示另一个交通信号灯可以安全地变绿。在转移到 Red 状态之前,控制器将保持 Yellow 状态一定的时间。然后开始下一个交通信号灯循环。

交通信号灯的时序

交通信号灯循环的时序通过几个参数来定义。要更改交通信号灯的计时,请双击 Traffic Controller 图,并在对话框中输入以下参数的新值:

  • REDDELAY - 从红灯激活到控制器检查十字路口等待车辆之间的时间长度。此值也是控制器发出绿灯请求后,交通信号灯可以变绿的最短时间长度。默认值为 6 秒。
  • MAXREDDELAY - 控制器在发出绿灯请求前检查车辆的最长时间。默认值为 360 秒。
  • GREENDELAY - 交通信号灯保持绿色的最长时间。默认值为 180 秒。
  • MINGREENDELAY - 交通信号灯保持绿色的最短时间长度。默认值为 120 秒。
  • YELLOWDELAY - 交通信号灯保持黄色的时间长度。默认值为 15 秒。

探索示例

  1. 点击左下角的箭头打开图。
  2. 符号窗格中,选择 greenLightRequested。然后,在属性检查器中的记录下,选择记录信号数据
  3.  greenLightLockedLight1  Light2 重复上一步骤。
  4. 仿真选项卡中,点击运行
  5. 仿真选项卡中的查看结果下,点击数据检查器
  6. 在仿真数据检查器中,将记录的信号显示在单独的坐标区中。布尔信号 greenLightRequested  greenLightLocked 显示为数值 0 或 1。状态活动信号 Light1  Light2 为枚举数据,其值为 GreenYellowRed  None

要在仿真过程中跟踪图活动,可以使用仿真数据检查器中的缩放和光标按钮。例如,下面列出了仿真前 300 秒内的关键时刻:

  • t=0   在仿真开始时,两个交通信号灯都为红色。Light1  Light2  RedgreenLightRequested  falsegreenLightLocked  false
  • t=6   6 秒(REDDELAY 的默认值)后,两条街道上都有汽车在等待,因此两个交通信号灯都请求绿灯。Light1  Light2 仍为 RedgreenLightRequested  truegreenLightLocked  false
  • t=12   再过 6 秒(REDDELAY 的默认值)后,信号灯 1 变为绿色,取消绿灯请求,并将 greenLightLocked 设置为 true。然后,信号灯 2 请求绿灯。Light1  GreenLight2  RedgreenLightRequested 变为 false 然后为 truegreenLightLocked  true
  • t=132   120 秒(MINGREENDELAY 的默认值)后,信号灯 1 变为黄色。Light1  YellowLight2  RedgreenLightRequested  truegreenLightLocked  true
  • t=147   15 秒(YELLOWDELAY 的默认值)后,信号灯 1 变为红色,并将 greenLightLocked 设置为 false。然后,信号灯 2 变为绿色,取消绿灯请求,并将 greenLightLocked 设置为 trueLight1  RedLight2  GreengreenLightRequested  falsegreenLightLocked 变为 false 然后为 true
  • t=153   6 秒(REDDELAY 的默认值)后,信号灯 1 请求绿灯。Light1  RedLight2  GreengreenLightRequested  truegreenLightLocked  true
  • t=267   在信号灯 2 为绿色 120 秒(MINGREENDELAY 的默认值)后,信号灯 2 变为黄色。Light1  RedLight2  YellowgreenLightRequested  truegreenLightLocked  true
  • t=282   15 秒(YELLOWDELAY 的默认值)后,信号灯 2 变为红色,并将 greenLightLocked 设置为 false。然后,信号灯 1 变为绿色,取消绿灯请求,并将 greenLightLocked 设置为 trueLight1  GreenLight2  RedgreenLightRequested  falsegreenLightLocked 变为 false 然后为 true
  • t=288   6 秒(REDDELAY 的默认值)后,信号灯 2 请求绿灯。Light1  GreenLight2  RedgreenLightRequested  truegreenLightLocked  true

重复循环,直到仿真于 t=1000 秒处结束。

  • 17
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电力电子空间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值