主要内容

连接转移以创建路径和流程图

您可以通过使用结点将多个转移连接到单个路径、分支路径或流程图。

在 Stateflow® 中,路径是将源连接到目标的一个或多个转移。您可以通过将每个转移连接到结点来创建一个具有多个转移的路径。结点是表示决策点的图形对象,在画布上显示为圆圈。例如,在以下图中,几个转移和结点形成从一个状态到另一个状态的单个路径。

当图计算路径时,它按源到目标的顺序在同一时间步计算每个连接的转移,并执行它遇到的任何条件动作。如果图遇到 false 条件,它会停止计算路径。如果图在路径中没有遇到任何 false 条件,则它从源移至目标。

例如,在上面的图中,一个具有多个转移的路径将源状态连接到目标状态。如果路径中的所有条件都为 true,则图将 x 设置为 01,然后设置为 2。然后,在同一时间步,图退出源状态并进入目标状态。

但是,如果 ac 大于 0,但 b 不是,则图改为将 x 设置为 0 并停止计算路径。

您可以创建状态或结点的多个入向或出向转移。如果一个状态或结点有多个出向转移,则图显示计算顺序。如果图沿其中一个路径移动,则它不计算其余路径。您可以通过右键点击转移,并点击执行顺序,然后选择新顺序来更改顺序。

例如,下图先计算从状态 A 到状态 B 的路径,再计算从状态 A 到状态 C 的路径。

在 Stateflow 中,流程图指其子级仅由结点和转移组成的图或状态。流程图中的所有路径都必须终止于单个共享结点。您可以在图层次结构的任何级别创建一个流程图。

在此示例中,您向可充电电池系统模型添加一个流程图。该流程图将电池系统的输出与所连接设备的需求匹配,而不超出电池的限制。

打开模型

要构建模型,请按照教程上一步的说明进行操作。或者,使用上面的打开模型按钮,打开 sfGetStartedFlowchart 模型。

双击 Chart 模块以进入 Battery 图。

状态 ChargeDischarge 表示电池系统的工作模式。每个状态都包含子状态,这些子状态表示电池充满或空时的充电和放电速率。输入 isCharging 确定激活状态。数据 sentPowercharge 表示电池的输出瓦数和电量水平。

创建流程图

当前,当电池同时放电和被供电时,它始终输出相同的瓦数。在 Powered 状态中,创建一个流程图,将电池输出与所连接设备的需求匹配,而不超出最大值。

添加表示设备需求超过电池可提供功率的路径。

  1. Discharge 状态中,删除 entry 动作。

  2. Powered 状态中,删除 during 动作。

  3. Powered 状态中,添加第一个结点。在选项板中,点击结点图标。将该结点置于 Powered 状态中。

  4. 在第一个结点右侧添加第二个结点。

  5. 在第二个结点下方添加第三个结点。

  6. 绘制从第一个结点到第二个结点的转移。添加条件 [deviceDemand>maxPower]

  7. 绘制从第二个结点到第三个结点的转移。添加动作 {sentPower=maxPower;}

添加表示功率需求在电池限制内的路径。

  1. 在第一个结点下方添加第四个结点。

  2. 绘制从第一个结点到第四个结点的转移。添加动作 {sentPower=deviceDemand;}

  3. 创建从第三个结点到第四个结点的转移。

第一个结点上的数字表示计算顺序。标注为 [deviceDemand>maxPower] 的转移有顺序标签 1,表示首先计算它。标注为 {sentPower=deviceDemand;} 的转移有顺序标签 2,表示其次计算它。

终止结点是没有任何出向转移的结点。将两条路径都连接到一个共享终止结点。在到终止结点的转移中,按输出瓦数成比例减少电池电量。

  1. 在第四个结点下方添加第五个结点。

  2. 创建从第四个结点到第五个结点的转移。添加动作 {charge=charge-sentPower;}

使用内部转移在处于激活状态的时间步计算

内部转移是 during 动作的图形等效项。当状态包含内部转移时,内部转移在处于激活状态的每个时间步都计算,但不在状态变为激活或变为非激活的时间步计算。如果一个状态同时包含内部转移和子状态之间的转移,则内部转移先计算。您可以通过绘制从一个状态的边缘转移到该状态内的对象来创建内部转移。

绘制从 Powered 状态的边缘到第一个结点的内部转移。

定义图数据

定义您在流程图中创建的数据。

  1. 符号窗格中,在 maxPower 行中的类型下,点击图标并选择 Local Data。将设置为 3.5

  2. deviceDemand 行中的类型下,点击图标并选择 Input Data

  3. charge 行中,将设置为 100

添加一个连接到 deviceDemand 输入端口的模块。

  1. 打开顶层模型。

  2. 添加 Sine Wave 模块。将输出端口连接到 Battery 图的 deviceDemand 端口。

  3. 指定正弦波从 0 开始并达到最大值 5。双击该模块打开模块对话框,然后将振幅偏置参数设置为 2.5。将相位参数设置为 -pi/4

  4. 右键点击从 Sine Wave 模块到 Battery 图的信号线并点击记录所选信号。对从 Battery 图到 Scope 模块的信号线重复此步骤。

对模型进行仿真

对模型进行仿真并观测结果。

  1. 要对模型进行仿真,请在仿真选项卡中点击运行

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

  3. 检查选项卡中,选择 Battery:1Sine Wave:1

电池的输出瓦数随着功率需求的升降而变化,最大值为 3.5。在仿真接近结束时,电池耗尽电力,输出瓦数降到 0

电池系统按预期输出功率。但是,如果电池耗尽电力,系统无法继续工作。

在教程的下一步,您将添加不可充电的应急电池,以在主电池电量为空时维持基本功能。为了对电池的同时工作情形进行建模,您需要使用并行状态和事件。

另请参阅

主题