人在仿真软件万博1manbetx

万博1manbetxSimulink &基于模型的设计

导出功能模型

我开始写这篇文章的目的是谈论新的初始化函数重置功能终止函数块,与之密切相关国家的读者国家的作家在R2016b中引入的区块。

然而,我很快意识到,这些新特性与一种模型架构类型密切相关,我几乎从未在这个博客上讨论过:导出功能模型

生成代码

让我们以下面的模型为例。它包含一个偏差和单位延迟块执行0.001秒和一个数学函数块执行0.01秒。

简单的示例模型

大家可能都知道,使用Embedded Coder可以从Simulink模型生成C代码。万博1manbetx使用默认的嵌入式编码器系统目标文件,你会得到如下代码:

从简单示例模型生成的代码

如您所见,代码由一个Initialize函数和一个Step函数组成。阶跃函数被设计为按模型基本速率(在我们的例子中是0.001)调用。完美地在单任务上下文中执行代码。

如果您愿意,您可以要求Simulink万博1manbetx将每一个离散的速率视为一个单独的任务

多任务

在这种情况下,生成的代码将由一个函数组成。然后,您就可以实现调度器并按您想要的方式调用每个费率。

多任务的代码

导出功能

每个速率有一个函数是有用的,但是如果您想要对代码的执行有更多的控制呢?例如,您可能希望将一个速率划分为多个任务,并为每个任务分配不同的优先级。

为此,嵌入式编码器提供了一种可能性导出功能.导出函数提供了对生成函数的直接控制,以及模拟它们的调度和优先级的能力。

为了与导出函数的概念兼容,您的模型必须是以特定的方式建造:要导出函数的系统顶层必须只包含函数调用子系统、Inports和Outports。这样,每个子系统将生成一个函数。

对于我们的示例模型,我们可以这样重新排列它:

导出功能子系统

对于模拟,必须显式地执行不同任务的调度,例如使用上图中的statflow。当需要生成代码时,可以右键单击子系统并导出函数:

导出功能子系统模型

代码如下所示:

导出功能子系统代码

你可以将这些代码包含在你手写的调度程序中。如上所述,这将允许您将一个速率划分为多个功能或任务。

导出功能模型

对于大型项目,也可以创建导出功能模型

在这种情况下,顶级模型将仅用于模拟,您将为子模型生成代码。万博1manbetxSimulink将自动识别模型的设计目的是导出功能,代码将与上面子系统生成的代码类似。

导出功能模型

接下来是什么?

下周,我们将看到新的初始化函数重置功能终止函数块可以在导出函数模型中使用,以模拟函数或任务的关闭和重新启动。

|

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。