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