主要内容

并行执行状态

您可以通过在父图或父状态中启用并行分解,将 Stateflow® 图设置为在同一时间步激活层次结构的某级别中的所有状态。

当使用并行分解的图或状态被激活时,该图或状态的每个直接子级也被激活。这些子状态称为并行状态,在画布上以虚线边框显示。

例如,在下图中,状态 ParentAParentB 使用并行分解。当每个父状态都被激活时,两个子状态也被激活。

在每个时间步,图按顺序(由每个状态右上角的数字指示)为层次结构的某级别中的每个并行状态执行动作和计算转移。例如,当 ParentB 被激活时,图同时进入 ChildCChildD。由于 ChildC 的执行顺序为 1,它将 y 设置为 3。然后,在同一时间步,ChildDy 覆盖为 4

您可以通过右键点击状态,再点击执行顺序,然后选择新顺序来更改执行顺序。

在此示例中,您使用并行状态来完成一个不完整的电池系统模型。该电池系统包含两个独立组件:

  • 可充电主电池

  • 不可充电应急电池,它在主电池电量为空时维持基本功能

打开模型

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

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

图包含两个非并行状态,表示主电池和应急电池。每个电池都包含表示充电、放电或待机工作模式的嵌套子状态。此外,电池使用输入、输出和局部数据:

  • isCharging:表示电池系统是否连接到电源的输入数据。它确定主电池的激活状态。

  • deviceDemand:表示所连接设备的功率需求的输入数据。

  • maxWatts:表示主电池的最大功率输出的局部数据。

  • sentPower:表示主电池的输出瓦数的局部数据。如果 deviceDemand 小于 maxWatts,则它等于 deviceDemand。否则,它等于 maxWatts

  • mainChargeemergencyCharge:将每个电池电量表示为百分比的局部数据。

有关主电池工作的详细信息,请参阅教程的前述步骤。

启用并行分解

您可以通过右键点击父组件并选择分解 > 并行为子状态启用并行执行。

由于 MainBatteryEmergencyBattery 状态没有父状态,图被视为父级。通过右键点击画布的空白部分并选择分解 > 并行来启用图的并行分解。两个图的边框变为虚线,表示它们是并行状态。

广播和接收事件

在 Stateflow® 图中,您可以通过广播事件使组件能够触发图或模型中其他组件的行为。例如,在一个具有两个并行状态的图中,您可以在一个状态中广播事件,以在另一个状态中引发转移。

要从状态或转移广播事件,请使用 send 运算符,格式如下:

send(event_name,receiving_state)

要在转移中接收事件广播,请在转移标签中输入事件的名称。事件不需要方括号或花括号。转移必须为接收状态的直接或间接子级。

电池系统的原始项目要求规定,当主电池电量为空时,应急电池应放电,当主电池开始充电时,应急电池应移至待机状态。通过从主电池广播事件来切换应急电池的工作模式。

1.在状态 MainBattery 中,在子状态 Empty 的 entry 动作中,将名为 toggleOn 的事件广播到状态 EmergencyBattery

entry:
sentPower=0;
send(toggleOn,EmergencyBattery);

2.在状态 MainBattery 中,在子状态 Charge 的 entry 动作中,将名为 toggleOff 的事件广播到状态 EmergencyBattery

entry:
sentPower=3.5;
send(toggleOff,EmergencyBattery);

3.在状态 EmergencyBattery 中,双击从 StandbyDischarge 的转移并输入标签 toggleOn

4.双击从 DischargeStandby 的转移并输入标签 toggleOff

5.在符号窗格中,点击解析未定义的符号按钮以将 toggleOntoggleOff 定义为局部事件。在 entry 动作和转移中,toggleOntoggleOff 变为橙色,表示事件。

对模型进行仿真

模型将两个值记录到仿真数据检查器:

  • MainBatteryEmpty 状态的活动,其中 1 表示被激活,而 0 表示未激活。

  • EmergencyBattery 的激活子状态的名称。

对模型进行仿真并观察这些值。

  1. 返回到顶层 Simulink 模型。Manual Switch 模块更改主电池的工作模式。当值为 1 时,电池充电。当值为 0 时,电池放电。

  2. 要对模型进行仿真,请在仿真选项卡中点击运行。Chart 模块显示图的执行。

  3. 双击 Manual Switch 模块以对电池放电。在几秒后,当主电池转移到 Empty 时,双击 Manual Switch 模块以对电池充电。将此过程重复几次。

  4. 要停止仿真,请在仿真选项卡中,点击停止

  5. 要打开仿真数据检查器,请在仿真选项卡中,点击数据检查器

  6. 要显示 Empty 状态的活动,请在检查选项卡中,点击 MainBattery.Discharge.Empty:IsActive

  7. 要显示 EmergencyBattery 状态的激活子状态,请在检查选项卡中,点击 EmergencyBattery:ActiveChild

当主电池电量为空时,应急电池放电。当主电池离开 Empty 状态并开始充电时,应急电池移至待机状态。

另请参阅

主题