创建父工作模式和子工作模式
在 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 | 无。 |
添加表示快速充电的状态。
在
Charge和Discharge状态中,删除during动作。展开
Charge和Discharge状态,使它们最多可包含三个子状态。要调整状态大小,请点击任一角并向外拖动。在
Charge中,添加名为FastCharge的子状态。子状态必须完全被父状态包围。子状态和父状态的边框不能重叠。在
FastCharge中,添加during动作,该动作将数据charge递增4。

添加分别表示慢速充电和暂停充电的两个状态。
添加名为
SlowCharge的子状态。添加将charge递增1的during动作。添加从
FastCharge到SlowCharge的转移,该转移在charge超过80时执行。添加名为
Full的子状态。添加从
SlowCharge到Full的转移,该转移在charge等于100时执行。

添加表示分别正常放电和暂停放电的两个状态。
在
Discharge中,添加名为Powered的子状态。添加将charge递减3的during动作。添加另一个名为
Empty的子状态。添加将sentPower设置为0的entry动作。添加在
Powered和Empty之间的转移,该转移在charge小于或等于3时执行。

对模型进行仿真
观察图如何在子状态之间转移。
在 Simulink 编辑器中,确保 Manual Switch 模块设置为
1。在仿真选项卡中,点击运行以对模型进行仿真。在第一个时间步,
Charge和FastCharge都激活。随着charge的增加,图转移到子状态SlowCharge和Full。在符号窗格中,charge从不超过100。返回到顶层 Simulink 模型。通过双击 Manual Switch 模块切换该模块的值。
进入图。图激活状态
Discharge和子状态Powered。当charge递减到3以下时,图从Powered转移到Empty。在符号窗格中,charge从不低于0。
电池模型现在更逼真。然而,设计仍有问题。例如,如果所连接设备需要少于 3.5 瓦的功率,则电池输出不会发生变化。
在教程的下一步,您将创建一个流程图,使电池系统的功率输出根据所连接设备的需求而变化。