主要内容

创建父工作模式和子工作模式

R2026b

在 Stateflow® 图中,您可以通过将一个状态放置在某现有状态的边框内来创建嵌套工作模式。现有状态称为父状态,它包含的状态称为子状态。

父状态的内容与较小的图类似。与图类似,父状态包含默认转移。当父状态被激活时,连接到默认转移的子状态也被激活。然后,图在子状态之间转移。当父状态被取消激活时,子状态也被取消激活。

例如,在以下救护车应急灯模型中,On 状态有子状态 Red 和 White。当 On 被激活时,救护车在有色灯之间切换,从 Red 状态开始。当 On 被取消激活时,两个灯都被取消激活。

在此示例中,您使用子状态对可充电电池系统中的可变充电速率进行建模。

打开模型

sfGetStartedBattery 模型表示可充电电池系统的控制逻辑。要构建该模型,请按照教程前述步骤的说明进行操作。

双击 Chart 模块以进入电池图。

状态 Charge 和 Discharge 表示电池系统的工作模式。输入数据 isCharging 确定激活状态。输出数据 sentPower 和局部数据 charge 表示电池的输出瓦数和电量水平。

向模型层次结构添加子状态

当前,电池系统在充满时继续充电,在电量为空时继续放电。为了表示充满、空和中间充电模式,电池系统需要额外的工作模式:

父模式 子模式 动作 退出条件
Charge FastCharge 处于激活状态时,电量水平以 4% 的速率增加 当电量水平大于 80% 时,移至 SlowCharge
Charge SlowCharge 处于激活状态时,电量水平以 1% 的速率增加。当电量水平等于 100% 时,移至 Full
Charge Full 无 无
Discharge Powered 处于激活状态时,电量水平以 3% 的速率减少。当电量水平小于或等于 3% 时,移至 Empty
Discharge Empty 执行 entry 动作时,将输出瓦数设置为 0 无。

添加表示快速充电的状态。

  1. 在 Charge 和 Discharge 状态中,删除 during 动作。

  2. 展开 Charge 和 Discharge 状态,使它们最多可包含三个子状态。要调整状态大小,请点击任一角并向外拖动。

  3. 在 Charge 中,添加名为 FastCharge 的子状态。子状态必须完全被父状态包围。子状态和父状态的边框不能重叠。

  4. 在 FastCharge 中,添加 during 动作,该动作将数据 charge 递增 4。

添加分别表示慢速充电和暂停充电的两个状态。

  1. 添加名为 SlowCharge 的子状态。添加将 charge 递增 1 的 during 动作。

  2. 添加从 FastCharge 到 SlowCharge 的转移,该转移在 charge 超过 80 时执行。

  3. 添加名为 Full 的子状态。

  4. 添加从 SlowCharge 到 Full 的转移,该转移在 charge 等于 100 时执行。

添加表示分别正常放电和暂停放电的两个状态。

  1. 在 Discharge 中,添加名为 Powered 的子状态。添加将 charge 递减 3 的 during 动作。

  2. 添加另一个名为 Empty 的子状态。添加将 sentPower 设置为 0 的 entry 动作。

  3. 添加在 Powered 和 Empty 之间的转移,该转移在 charge 小于或等于 3 时执行。

对模型进行仿真

观察图如何在子状态之间转移。

  1. 在 Simulink 编辑器中,确保 Manual Switch 模块设置为 1。

  2. 在仿真选项卡中,点击运行以对模型进行仿真。在第一个时间步,Charge 和 FastCharge 都激活。随着 charge 的增加,图转移到子状态 SlowCharge 和 Full。在符号窗格中,charge 从不超过 100。

  3. 返回到顶层 Simulink 模型。通过双击 Manual Switch 模块切换该模块的值。

  4. 进入图。图激活状态 Discharge 和子状态 Powered。当 charge 递减到 3 以下时,图从 Powered 转移到 Empty。在符号窗格中,charge 从不低于 0。

电池模型现在更逼真。然而,设计仍有问题。例如,如果所连接设备需要少于 3.5 瓦的功率,则电池输出不会发生变化。

在教程的下一步,您将创建一个流程图,使电池系统的功率输出根据所连接设备的需求而变化。

另请参阅

主题