从状态流开始
了解使用statflow的基础知识®通过一个例子。您将学习如何建模、模拟和测试监控控制器,以确定建筑物是否使用存储在电池中的能量或来自电网的能量。您还将了解如何从头构建状态图,将状态与条件转换连接起来,添加流程图决策逻辑,然后使用动画运行模拟以确保模型正确工作。
在完成这个示例之后,您将了解Stateflow如何只是基于模型的设计(Model-Based Design)的一部分,用于建模、模拟、测试和实现真实系统。
Stateflow是一个图形化环境,允许您为监督控制、任务调度和故障管理应用程序设计和模拟决策逻辑。本视频将向您展示Stateflow的基础知识,并让您了解如何使用它来建模决策逻辑。最后,我们将向您展示下一步如何了解更多关于statflow的知识,并从今天开始使用它。让我们开始吧。
MathWorks在马萨诸塞州纳蒂克的总部安装了屋顶太阳能电池板。这些太阳能电池板可以帮助降低我们的电力成本和对化石燃料的依赖。事实上,它们提供了MathWorks大约8%的能源需求。
将太阳能电池板与电池相结合,我们就可以收集太阳能,并在需要时使用。这些太阳能电池板产生的能量每天都在变化。这使得很难找到使用收集到的能量的最佳方式。
让我们假设我们的建筑使用200千瓦,面板将为3兆瓦时的电池充电。在没有阳光的时候,它可以作为一个缓冲来为建筑供电。现在我们需要决定什么时候使用电网,什么时候使用电池,这样我们就可以减少电费。我们需要表示所有这些操作模式,并决定何时在它们之间转换。
幸运的是,我们有statflow,它可以完成所有这些工作。每天的电价都不一样。如果我们能避免昂贵的价格,电池将为我们节省最多的钱。
根据现在的时间,我们希望处于两种操作模式中的一种。我们可以使用有限状态机将其表示为两个独立的状态。我们要么用电网,要么用电量充足的电池。如果电池耗尽了,我们就会重新使用电网。任何时候只有一种操作模式处于活动状态。
我们要用状态流程图来模拟有限状态机。硬件已经在Simulink中建模了,所以我们只需加载模型并添加到其中。该模型的输入数据是每15分钟采样一次的太阳能电池板产生的功率(瓦特)。我们有一年的数据。这就是我们模拟的时间。
我们将使用这些数据来确定天气探测器是否有阳光。我们还需要知道一天中的时间。我们会根据电池电量做决定。所以我们有一个电池的计划模型,我们用一个范围来监测储存的能量。
最后,我们将求解器设置为固定步长求解器,以匹配我们的太阳数据的采样率。您可以对连续系统使用状态流。但是对于这样的决策逻辑,它通常是离散时间的。
好的,这涵盖了所有已经建成的东西。但我们需要决定什么时候使用电池,什么时候使用电网。我们怎么做呢?我们可以通过添加一个状态流图来表示我们的决策逻辑来做到这一点。
首先,我们将从statflow库中将一个图表块拖到我们的模型中。现在让我们把信号连接到图表上,这样我们就可以在内部使用它们了。由于我们的信号已经有了名称,我们可以将它们拖到图表块上。端口名称将被设置为信号名称。
当我们将另外两个信号拖到图表上时,又会添加两个端口。它开始变得有点拥挤,所以我们将调整图表块的大小。最后,我们将这个图表块重命名为Building Manager。现在我们准备好构建决策逻辑了。在里面我们可以使用刚才连接的所有信号。
我们建筑内的能源系统可以在使用电网和电池之间切换。我们将使用使用电网和使用电池两种状态来表示这两种操作模式。我们还需要通过添加默认转换来告诉statflow在模拟开始时进入哪个状态。
我们从从电网中获取电力开始。所以默认传输将进入使用电网状态。当我们在电池中收集了一些太阳能后,我们应该考虑切换到使用电池状态。所以我们将允许使用网格和使用电池状态之间的传输通过连接它们。
在statflow中,我们可以使用方括号指定条件,使用花括号指定操作。每隔15分钟,我们需要决定接下来的15分钟是使用电网还是电池。为了降低总能源成本,让我们尽可能先使用电池。
要满足200千瓦持续15分钟的电力需求,储能必须大于50千瓦时。所以我们将使用这个条件来保护从使用电网状态到使用电池状态的过渡。如果我们正在使用电池,而它储存的能量下降到50千瓦时以下,我们就会再次使用电网。
接下来,让我们指定状态操作。在statflow中,状态可以具有不同的操作类型,包括进入、期间和退出操作。如果在进入状态的过程中发生了什么,则执行进入操作。在保持状态时执行的动作。退出操作是在退出状态时执行的。
当进入使用电池状态时,我们将使用一个输入动作将电池使用率设置为200千瓦。当离开使用电池状态时,我们将使用退出操作将使用率设置为0。稍后,我们将把使用率作为输出信号,并使用它的值来调整Simulink中的电池电量。
使用这种电池是没有成本的,因为它的能量来自太阳。另一方面,当使用电网时,能源价格为每千瓦时0.20美元,这意味着能源成本每15分钟将上涨10美元。所以我们应该在进入或保持使用网格状态时增加能量消耗。另外,不要忘记为成本指定一个0的初始值。
好了,我们完成了第一个状态转换图。我们开了个好头,但还是少了点什么。每千瓦时0.20美元的能源价格仅在非高峰时段有效。高峰时段的能源价格为每千瓦时0.30美元。
我们如何适应价格的时变呢?为了追踪时间,我们只需要另一个状态转换图。我们已经知道如何在statflow中构建一个。这样,我们就可以很容易地知道基于使用时间的能源价格是多少。
现在我们有两个独立的任务,跟踪是非高峰时段还是高峰时段,以及管理能源。为了组织这两者,我们将介绍两种称为时间和能量管理器的超状态。使用状态层次结构可以帮助我们更好地组织、构建和管理statflow中的决策逻辑。
默认情况下,在任何给定级别上只能有一个状态是活动的,这意味着状态流程图具有排他性分解。这就是Stateflow警告我们没有默认转换的原因。但实际上,在这个层次上我们不需要。
我们希望同时跟踪时间和管理能源。所以让我们将图表分解转换为并行。我们称之为平行状态。但在现实中,事情必须以特定的顺序发生。状态流允许我们指定每个并行状态的执行顺序,这有助于我们避免决策逻辑中的歧义。
接下来,让我们检查这两个并行状态的执行顺序。为了能够计算能源成本,我们首先需要知道当前时间。所以执行顺序是正确的。
现在我们正在跟踪使用时间,我们可以简单地按照流程图来确定当前的能源成本。目前是高峰时段吗?如果是,那么能源成本将是15美元。如果不是,那么能源成本将是10美元。
好,回到我们的状态流程图。让我们通过添加流程图重新计算基于一天中的时间的能源成本。这一次,默认的过渡将我们带到一个结点,我们将从那里展开分支。我们可以使用in操作符来检测使用时间。
如果是在高峰时段,我们将选择第一个分支,其操作是将成本增加15。否则,我们将使用第二个分支并将成本增加10。就像并行状态一样,每个转换的正确执行顺序也很重要。例如,如果这里的执行顺序是向后的,右边的分支将永远不会被检查。
接下来,我们可以使用符号窗格来定义在图表中使用的符号。注意,我们已经有了三个输入符号,它们对应于我们从顶层模型创建的三个输入端口。让我们点击解析未定义的符号。这将自动确认我们使用的符号,并根据它们的使用方式定义它们的数据范围。特别是,每个输入和输出数据符号都将成为图表块的一个端口。
由于能量成本对我们来说很重要,我们把它变成一个输出信号,把它的数据范围改成输出数据。回到顶层模型,现在我们的状态流程图具有输出数据的输出端口。现在让我们添加一个显示块来捕获总能源成本并进行所有连接。在statflow中,我们可以很容易地监视活动状态数据以进行模拟后分析。
由于我们感兴趣的是监控一天中不同时间的能量使用情况,让我们记录这两个超状态的子活动。我们已经准备好通过单击run按钮来运行模拟。图表在模拟过程中是完全动画的,因此我们可以在运行时看到我们的状态和转换。
但是我们如何确保我们的决策逻辑正常工作呢?让我们暂停模拟并放慢动画速度。我们在这一步使用网格。我们可以看到我们处于非峰值状态。到目前为止我们的成本是$4,855。
现在,我们将向前迈进一步,看到我们收取的是非高峰价格为10美元。当我们再走一步时,我们将过渡到峰值状态,然后我们将收取15.01美元的峰值价格。最后一步,我们已经过渡到使用电池的状态。正如我们所料,我们的成本没有变化。
看起来我们的决策逻辑运行正常。让我们关闭动画并单击Continue以运行其余步骤。一旦模拟完成运行,我们可以从显示器上看到总能源成本。
让我们打开范围,看看储存的能量是如何随时间变化的。我们可以从不同的阳光条件中观察到储存能量的强烈振荡。使用电池作为缓冲单元,我们成功地从太阳能电池板获得了更稳定的能源。
接下来,让我们打开模拟数据检查器。Stateflow为我们保存了活动状态数据的整个历史。顶部显示器显示当前小时。是高峰还是低谷?底部显示告诉我们正在使用的能源,电网或电池。
在仔细研究这些状态活动之后,我们注意到我们的决策逻辑存在一个问题。让我们关注这特别的一天。从它来回切换的情况可以看出,电池积聚不了多少能量,所以那天一定是阴天。因此,我们不得不在高峰时段以非常昂贵的价格重新使用电网。
在这一点上,我们后悔在能源价格低的时候使用电池。为了解决这个问题,我们可以添加一些附加条件。让我们等到峰值状态再使用电池。或者如果我们处于非高峰状态,我们可以只在外面阳光充足的时候使用电池。
这样就可以更有效地利用我们一天中收集到的有限的太阳能。这就是在statflow中修改决策逻辑的简单程度。在实践中,我们可以根据需要迭代整个设计过程,直到我们有一个优化的设计。
现在让我们重新运行模拟。通过这种明智的决策逻辑,总能源成本下降了2%。同样,这是因为现在我们在恶劣天气下对电池的使用更加保守。
同时,更保守的使用模式会导致电池储存能量的峰值更高。在现实中,我们应该在过度使用电池和过于保守使用电池之间找到平衡。无论哪种情况,statflow都可以帮助我们评估决策逻辑并识别潜在的缺陷。
我们已经使用statflow根据系统的当前状态来建模和模拟决策逻辑。你也可以。现在您已经了解了使用Stateflow是什么样子的,是时候学习它了。
学习statflow的最好方法是使用它。因此,启动Stateflow OnRamp,它将教你基本知识。它是免费的,只需要几个小时。欢迎来到statflow。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。