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