在图中重用逻辑
您可以通过在状态或转移中调用自定义函数来重用 Stateflow® 图中的逻辑。Stateflow 图支持以下自定义函数:
图形函数包含由结点和转移组成的流程图。
Simulink® 函数包含 Simulink 子系统。
MATLAB® 函数包含 MATLAB 代码。
在此示例中,您创建一个 MATLAB 函数,该函数使可充电电池系统模型能够在插入充电器时处理变化的电源输入。
打开模型
sfGetStartedFunction 模型表示可充电电池系统的控制逻辑。要构建该模型,请按照教程前述步骤的说明进行操作。

双击该 Chart 模块。

图包含两个并行状态,表示可充电主电池和不可充电应急电池。每个电池都包含表示充电、放电或待机工作模式的嵌套子状态。
当主电池电量耗尽时,它会发送事件来激活应急电池的放电模式。当主电池开始充电时,它会激活应急电池的待机模式。
图使用以下数据:
isCharging- 输入数据,表示电池系统是否连接到充电器。此数据确定主电池的激活状态。deviceDemand- 表示所连接设备的功率需求的输入数据,以瓦特为单位。maxPower- 局部数据,表示主电池的最大功率输出,以瓦特为单位。sentPower- 输出数据,表示主电池向连接设备提供的功率,以瓦特为单位。receivedPower- 输入数据,表示充电器提供给主电池的功率,以瓦特为单位。mainCharge和emergencyCharge- 局部数据,表示每个电池的电量水平。
创建 MATLAB 函数
目前,即使充电器提供的功率更多或更少,电池系统的充电速度不会随之更快或更慢。添加 MATLAB 函数,这样就允许电池在最小值和最大值范围内接收可变输入功率。
要创建 MATLAB 函数,请在选项板中点击 MATLAB 函数图标
。将该函数放置在画布的空白部分。编辑器会提示您输入函数标签。函数标签使用以下格式指定 MATLAB 函数的返回值、名称和输入:
[return_val1,return_val2,....] = function_name(input1,input2,...)具有单个返回值的函数标签不需要花括号。
输入函数标签,它输入当前电量、充电器提供的额外电量和最大输入电量。返回更新后的电池电量。
charge=updateCharge(current,added,max)
要编辑 MATLAB 函数,请双击函数标签下方的函数任何部分。函数编辑器将打开并显示以下标头:
函数编辑器从图中的函数标签复制该标头。如果您更改标头,函数标签也会更改。function charge=updateCharge(current,added,max)
在函数编辑器中,编写将电池充电速度限制在最大值和
0之间的函数。function charge=updateCharge(current,added,max) if added>max charge=current+max; elseif added<0 charge=current; else charge=current+added; end
将 MATLAB 函数添加到状态动作
在状态 FastCharge 和 SlowCharge 中使用 MATLAB 函数。
要返回 Stateflow 编辑器,请在资源管理器栏中点击“向上到父级”按钮
。在状态
FastCharge中,修改during动作以使用该函数。对于最大输入电量,请使用4,即图当前添加到mainCharge的值。during:mainCharge=updateCharge(mainCharge,receivedPower,4);在状态
SlowCharge中,修改during动作以使用该函数。对于最大输入电量,请使用1,即图当前添加到mainCharge的值。during:mainCharge=updateCharge(mainCharge,receivedPower,1);
对模型进行仿真
模型将以下值记录到仿真数据检查器:
充电器提供给电池系统的功率。该值在
-6和6之间变化。主电池的电量水平。
主电池的活动充电模式的名称。
对模型进行仿真并使用仿真数据检查器观察 mainCharge 的值在仿真期间如何变化。
当主电池快速充电时,电量水平随着提供的功率增加和减少,最大为 4,最小为 0。当主电池缓慢充电时,电量水平随着提供的功率增加和减少,最大为 1,最小为 0。
