Main Content

使用并行分解对同步子系统建模

要实现并发运行的工作模式,请在 Stateflow® 图中使用并行状态。例如,作为复杂系统设计的一部分,您可以使用并行状态对同时被激活的独立组件或子系统建模。

状态分解

图或状态的分解类型指定图或状态包含互斥状态还是并行状态:

  • 互斥状态表示互斥的工作模式。在同一层级上不能有两个互斥状态同时被激活或执行。Stateflow 图用实线矩形表示每个互斥状态。

  • 并行状态表示独立的工作模式。虽然并行状态会依次执行,但可以有两个或多个并行状态同时处于激活状态。Stateflow 图用虚线矩形表示每个并行状态,其中的数字表示其执行顺序。

通过在状态层次结构的不同层级设置状态分解,您可以在 Stateflow 图中组合互斥和并行状态。默认的状态分解类型是 Exclusive (OR)。要将分解类型更改为 Parallel (AND),请右键点击父状态并选择分解 > 并行 (AND)。要将分解类型改回 Exclusive (OR),请右键点击父状态并选择分解 > 互斥(OR)

气温控制器建模

此示例使用并行分解对一个空调控制器进行建模,该控制器将物理被控对象中的气温保持在 120 度。

在顶层,空调控制器图有两个互斥状态:PowerOffPowerOn。该图使用互斥 (OR) 分解,因为控制器无法同时处于打开和关闭状态。

控制器使用两个风扇来工作。当气温升至 120 度以上时,启动第一个风扇。当气温升至 150 度以上时,启动第二个风扇以提供额外的冷却。图将这些风扇建模为顶层状态 PowerOn 的并行子状态 FAN1FAN2。由于风扇作为独立的组件运行,根据所需冷却量的多少打开或关闭,PowerOn 使用并行 (AND) 分解来确保在控制器打开时两个子状态都被激活。

除工作阈值不同以外,这些风扇由具有相同子状态和转移配置的状态建模,表示两种风扇工作模式 OnOff。由于两个风扇都不能同时处于打开和关闭状态,FAN1FAN2 具有互斥 (OR) 分解。

PowerOn 中,称为 SpeedValue 的第三个并行状态表示一个独立子系统,它计算在每个时间步内循环启动的风扇数。当 FAN1On 状态被激活时,布尔表达式 in(FAN1.On) 的值为 1。否则,in(FAN1.On) 等于 0。同样,in(FAN2.On) 的值指示 FAN2 是处于循环打开还是关闭状态。这些表达式的总和表示在每个时间步中打开的风扇的数量。

指定并行状态的执行顺序

即使 FAN1FAN2SpeedValue 同时处于激活状态,这些状态在仿真过程中也是依次执行的。状态右上角的数字指定执行顺序。以下是此执行顺序的基本原理:

  • FAN1 应首先执行,因为它循环打开的温度低于 FAN2 打开的温度。无论 FAN2 是打开还是关闭,它都可以打开。

  • FAN2 以第二顺位执行,因为它循环打开的温度高于 FAN1 打开的温度。它仅在 FAN1 已打开时才能打开。

  • SpeedValue 最后执行,因而可以观测 FAN1FAN2 的最新状态。

默认情况下,Stateflow 根据您将并行状态添加到图的顺序来分配并行状态的执行顺序。要更改某并行状态的执行顺序,请右键点击该状态并从执行顺序下拉列表中选择值。

探索示例

此示例包含一个名为 Air Controller 的 Stateflow 图和一个名为 Physical Plant 的 Simulink® 子系统。

根据物理被控对象的气温,图打开风扇,并向子系统输出正在运行的风扇的数量 airflow。此值根据以下规则确定冷却活动因子 $k_{\mathrm Cool}$

  • airflow = 0 - 没有风扇运行。气温不会降低,因为 $k_{\mathrm{Cool}} = 0$

  • airflow = 1 - 一个风扇运行。气温降低,冷却活动因子 $k_{\mathrm{Cool}} = 0.05$

  • airflow = 2 - 两个风扇运行。气温降低,冷却活动因子 $k_{\mathrm{Cool}} = 0.1$

Physical Plant 子系统块根据以下公式更新工厂内的气温 $temp$

$$temp(0) = T_{\mathrm{Initial}}$$

$$temp'(t) = (T_{\mathrm{Ambient}}-temp(t)) \cdot (k_{\mathrm{Heat}}-k_{\mathrm{Cool}}),$$

其中:

  • $T_{\mathrm{Initial}}$ 是初始温度。默认值为 70°。

  • $T_{\mathrm{Ambient}}$ 是环境温度。默认值为 160°。

  • $k_{\mathrm{Heat}}$ 是被控对象的热传递因子。默认值为 0.01。

  • $k_{\mathrm{Cool}}$ 是对应于 airflow 的冷却活动因子。

新温度决定仿真的下一个时间步的冷却量。

相关主题