文档

导出功能模型

关于导出功能模型

万博1manbetxSimulink提供从Simulink导出函数的功能®通过控制模型外部的逻辑调用的模型。这样的模型称为导出函数模型,它们的功能块完全由函数调用子系统、函数调用模型块或其他导出函数模型组成。这些块是通过根级传递的函数调用触发器来调用的轮廓尺寸块。通过根级提供模型输入来执行这些功能轮廓尺寸块或通过在顶级模型中引用该模型来调用函数调用。这些功能的执行遵循导出-功能模型的需求

图中显示了一个导出函数模型和生成的函数。

导出-功能模型的需求

要建立一个用于导出功能的模型,首先要满足这些需求。这些需求确保模型的可执行组件仅由函数调用块组成。

  • 模型求解器必须是固定步长离散求解器。

  • 配置每个根级轮廓尺寸块触发函数调用子系统以输出函数调用触发器。这些轮廓尺寸块不能连接到计算机异步任务规范块。

  • 导出功能模型生成与外部环境集成的功能。万博1manbetxSimulink不生成step函数或terminate函数,这些模型中的所有块都必须在函数调用上下文中执行。因此,模型在根级必须只包含以下块:

    • 函数调用块,例如函数调用子系统S-functions,万博1manbetx仿真软件的功能块。函数调用模型块只有在其模型参数的情况下才能被放置在根级配置参数>解算器>任务设置和样本时间选项>周期性样本时间约束被设置为确保样本时间无关

    • 轮廓尺寸外港

    • 块的样本时间为Inf

    • 合并数据存储内存

    • 虚拟连接块(函数调用分裂多路复用器多路分配器总线的创造者总线选择器信号规范,以及包含列出的任何块的任何虚拟子系统。)

  • 函数调用子系统中的块必须支持代码生成。万博1manbetx如果这些块位于周期函数调用子系统中,并且在相应的函数调用根级指定了离散采样时间,那么它们可以使用绝对时间或运行时间轮廓尺寸块。

  • 连接到根级的数据信号轮廓尺寸和根级外港块不能是虚拟总线。

  • 数据记录和信号查看器块,如范围块,在根级和函数调用块中是不允许的。

导出函数模型中函数调用子系统的示例时间

在导出函数模型中,每个函数调用子系统都有两个块,您必须在其中指定示例时间。这些块是函数调用的根级轮廓尺寸街区与城市触发块在函数调用子系统内部。该表显示了如何指定这些示例时间。

继承样例时间的函数调用根级导入块(-1指定)

函数调用根级轮廓尺寸指定离散采样时间的块

触发块的功能调用子系统采样时间类型设置为周期

不允许配置。

设定采样时间触发要继承的块(-1)或函数调用根级的示例时间轮廓尺寸块。子系统以指定的速率执行。如果export-function模型在普通模拟模式中用作引用模型,则应用定期的函数调用运行时检查。

这些子系统可以包含使用运行时间的块(例如,离散时间积分器)和使用绝对时间的块(例如,数字时钟).

无法设置模型配置参数固定步长(基本样本时间)汽车

触发块的功能调用子系统采样时间类型设置为触发

没有样品时间规格。

没有样品时间规格。子系统以指定的速率执行。

无法设置模型配置参数固定步长(基本样本时间)汽车

顶级模型函数调用启动器中的采样时间

向函数调用根级输出函数调用信号的块轮廓尺寸调用出口函数模型的块函数调用发起者.当顶级模型引用导出函数模型时,向被引用模型提供函数调用输入的块就是顶级模型中的函数调用启动器。

驱动引用的导出函数模型中的函数调用块的顶级模型函数调用启动器可以有不同的示例时间。在将函数调用启动器块提供给所引用的导出函数模型之前,还可以使用不同的示例时间对它们进行多路复用。在“配置参数”对话框的“求解器”窗格中,清除将每一个离散的速率视为一个单独的任务复选框,具有较小样本时间的函数调用启动器块首先执行。

函数调用发起者的样本时间必须是输出函数模型中相应数据输入的样本时间的整数倍。启动器必须在函数调用根级别的样本时间的整数倍的模拟时间中调用导出函数模型中的函数调用子系统轮廓尺寸子系统的块。

当您在顶级模型中mux函数调用启动器块时,它们所调用的函数调用块不会接收到启动器的名称。

控制输出功能调度使用样本时间

您可以使用模型中每个导出函数调用的采样时间来控制触发器的调度。在下面的示例中,函数调用触发器的顺序由其相应导出函数块的采样时间确定。

在本例中,函数调用是基于函数调用端口上指定的示例时间调度的。基于彩色编码显示,onesecond(F0)执行每一个0.1时间步长函数twoseconds(F1)执行0.2时间的步骤。

您可以在根级函数调用输入端口上指定示例时间。

使用示例时间,您可以更细粒度地控制模型中函数调用触发器的调度方式。

当两个块的值不同时样品时间参数时,优先级较低的块优先执行。如果优先级参数相等时,速度较快的块首先执行。如果优先级这两个块的采样时间是相同的,端口号较低的块首先执行。

函数调用根级导入块的执行顺序

您可以显示排序后的执行顺序来解释模拟结果。此显示对生成的代码没有影响。要显示已排序的执行顺序,请选择显示>>排序执行顺序.在下面的示例中,请注意两个函数调用触发器的排序顺序。根据排序后的顺序显示标签,fcIn1(F0)执行fcIn2(F1)当两者都有一个样品击中在同一时间步。

顶部模型中引用的导出函数模型显示了对象的局部执行顺序轮廓尺寸外港模型中的块。

万博1manbetx模型比较轮廓尺寸块属性以确定它们的相对执行顺序。万博1manbetxSimulink按照以下顺序检查块属性:

  1. 优先级(优先级低的优先级优先执行)

  2. 采样时间(较小的采样时间先执行)

  3. 端口号(较小的端口号先执行)

当两个块的值不同时优先级参数时,优先级较低的块优先执行。如果优先级参数相等时,速度较快的块首先执行。如果优先级这两个块的采样时间是相同的,端口号较低的块首先执行。这个例子展示了相对执行顺序是如何计算的。

请注意

当上模型的仿真模式为加速器快速的加速器,S万博1manbetximulink不会对函数调用根级别的执行顺序执行运行时检查轮廓尺寸引用导出函数模型中的块。

例1。确定相对执行顺序

假设一个导出函数模型有五个函数调用根级轮廓尺寸块,A到E,具有表中所示的块属性。为了确定它们的相对执行顺序,Simulink比较它们的示例时间(如果不同且非继承),万博1manbetx优先级参数,端口号。

函数调用根级尺寸。 一个 B C D E
优先级 10 30. 40 40 30.
样品时间 1 0.2 0.1 0.1 1
端口号 5 4 3. 2 1

A块在所有5个块中优先级最低。一个执行。

使用相同的逻辑,B和E执行在A之后,但在C和d之前。由于B和E具有相同的优先级,Simulink比较它们的示例时间来确定执行顺序。万博1manbetxE的样本时间是-1(继承的),它比0.2, B. E的采样时间在B. E之前执行。

C和D具有相同的优先级和相同的不同的、非继承的样本时间。D(2)的端口号小于C (3), D在C之前执行。

它们的相对执行顺序轮廓尺寸那么,block就是A, E, B, D,和C。

引用的导出-功能模型的调度限制

如果顶级模型引用了导出函数模型,则在导出函数模型中有对函数调用子系统的限制。这些限制确保了独立模拟结果的一致性。

  • 在顶部模型中,相同的函数调用发起者必须输出使用相同的示例时间发起的函数调用。不能在相同的示例时间内使用两个函数调用启动器。您不能禁用此限制。

  • 来自顶层模型的函数调用输入必须遵循函数调用的执行顺序轮廓尺寸块在引用的导出函数模型中。您可以禁用此限制。

  • 函数调用根级的示例时间轮廓尺寸块必须被继承(-1)或匹配驱动它的函数调用启动器块的示例时间。如果禁用此限制,则函数调用的示例时间为根级别轮廓尺寸块必须被继承(-1的采样时间的整数倍函数调用发起程序块。

若要禁用限制,请清除复选框模型配置参数>模型参考>为引用的模型启用严格的调度检查

如果顶级模型在任何时间步上无序地调用引用的模型函数,则会出现错误。有关已排序执行顺序的信息,请参见控件并显示已排序的顺序

函数调用子系统之间的数据传输

了解函数调用子系统之间传输数据的时间有助于理解和解释模拟结果。

为了显示仿真过程中哪个子系统首先执行,在子系统的输入端口上用不同的符号标注信号线:

  • 佐赫指示所有源函数调用子系统在函数调用块读取此信号之前执行。

  • 1 / z指示所有源函数调用子系统在读取此信号的函数调用块之后执行。

  • 混合的指示一些源函数调用子系统在读取此信号的函数调用块之前执行,而一些函数调用子系统在读取此信号的函数调用块之后执行。

在框图中,请注意每个块的排序执行顺序。我们可以看到输入端口三机一体的子系统FCSS3(F1),源子系统FCSS1(F0)执行FCSS3(F1)。因此,一个徽章佐赫被添加到三机一体.同样的,FCSS2(F2)后执行FCSS3(F1)。因此,Simul万博1manbetxink添加了一个1 / z旁边In3的子系统FCSS3(F1)。港口In2输入信号来自于FCSS1(F0)和FCSS2(F2)。因此,它有一个徽章混合的在它旁边。

你可以锁轮廓尺寸块在函数调用子系统中,以确保数据完整性。如果你的函数调用子系统有轮廓尺寸锁存的块,然后是根级数据轮廓尺寸只在所有数据时才锁存导出函数模型的块轮廓尺寸它正在馈送的块是闩锁的。有关更多信息,请参见锁存输入用于函数调用子系统输出的反馈信号

当引用导出函数模型或具有异步函数调用输入的模型时,如果引用模型中提供的所有函数调用块输入都被锁定,则引用模型的数据输入将被锁定。

请注意

默认情况下,数据传输信号在生成的代码中不受保护。防止由于目标环境中的抢占或使用自定义存储类实现保护而导致这些信号中的数据损坏。

导出-功能模型的工作流

最常见的工作流是通过模拟测试函数调用行为,并使用独立的代码生成来生成函数。

独立的模拟

当函数调用排序足够简单,可以指定为模型输入时,独立模拟是首选的工作流。对于独立模拟,为函数调用和数据根级创建数据集轮廓尺寸块。有关函数调用输入的更多信息,请参见指定函数调用的输入

您还可以指定函数调用子系统的执行顺序。有关更多信息,请参见函数调用根级导入块的执行顺序

指定函数调用的输入

您可以为函数调用和数据根级创建数据集轮廓尺寸模拟>模型配置参数>数据导入/导出>输入

对于函数调用输入,指定一个时间向量来指示事件发生的时间。

  • 时间向量数据类型必须是双精度且单调递增的。

  • 所有时间数据必须是模型样本时间的整数倍。

  • 要在给定的时间步骤中指定多个函数调用,请相应地重复时间值。例如,要指定t = 1时的3个事件和t = 9时的2个事件,在时间向量中列出3次1和2次9,T = [1 1 1 9 9]'

正常的数据输入可以使用任何其他支持的格式,如万博1manbetx输入数据的形式

考虑以下带有一个函数调用输入端口的导出函数模型fcIn1一个数据输入In2

配置参数>数据导入/导出窗格中,设置输入参数t,你

t列向量是否包含事件的时间轮廓尺寸块。是一个输入值与时间的表In2块。

该表描述了如何指定向量t

根级轮廓尺寸继承的样本时间块(-1指定)

根级轮廓尺寸指定离散采样时间的块

函数调用子系统触发器端口采样时间类型周期

不适用

使用空矩阵([]).函数调用子系统在根级的每个样本时间点执行轮廓尺寸阻止调用它。

函数调用子系统触发器端口采样时间类型为触发

使用非递减列向量。列向量中的每个元素必须是模型的基本采样时间的整数倍。函数调用子系统按照列向量指定的时间执行。

如果你指定一个空矩阵([])时,函数调用子系统将不执行。

使用非递减列向量。列向量中的每个元素必须是函数调用根级的离散采样时间的整数倍轮廓尺寸块。函数调用子系统按照列向量指定的时间执行。

或者,指定一个空矩阵([]),函数调用子系统在每次遇到样例时执行。

使用模型参考的顶部模型模拟

出口函数模型比较常见的仿真流程是通过引用出口函数模型。当函数调用排序过于复杂而无法在独立模拟中使用数据集指定时,创建一个驾驭顶级模型来模拟目标环境行为。使用这个顶级模型为出口函数模型提供输入。有两种形式可以模拟调度环境的行为:

  • 通用函数调用启动器,在其中您可以完全控制调度过程。使用Stateflow®或s函数来创建任意的调用序列。

    请注意

    万博1manbetxSimulink不模拟抢占函数调用。

  • 具有不同示例时间的多个函数调用发起者:使用Simulink调度进行模拟,当Simulink中的速率单调调度行为与目标操作系统行为类似万博1manbetx时,这是非常有用的。

请注意

在顶级模型模拟中使用导出功能模型时,不要在模拟期间更改模型的启用/禁用状态。在模拟开始时启用它,并使用函数调用来调用它。

独立的代码生成

对于独立的代码生成,指定一个ERT代码生成目标,例如ert.tlc,并选择代码>C / c++代码>构建模型生成的代码。在生成的代码中,每个函数调用根轮廓尺寸生成一个void-void函数。每个函数调用根的函数名轮廓尺寸块是块的输出函数调用信号的名称。如果没有信号名,则函数名派生自根的名称轮廓尺寸块。构建模型会生成一个模型初始化函数,但不会生成模型步骤函数或启用/禁用函数。

要为引用的导出函数模型定制模型初始化函数名,请打开顶部模型并完成以下步骤:

  • 选择模型配置参数>代码生成>接口

  • 点击配置模型函数

  • 在“模型接口”对话框中,设置功能规范特定模型C原型并点击验证

  • 属性中键入函数名初始化函数名称文本框,单击应用

  • 再次生成代码以查看新函数名。

嵌套模型导出功能

嵌套的导出函数模型为您的模型提供了一个额外的组织层。下面的模型展示了如何在组件级别或单个特性级别导出功能。

请注意

导出函数模型不能包含具有异步函数调用输入的模型,但可以包含函数调用子系统和函数调用模型。具有异步函数调用输入的模型可以包含导出函数模型、函数调用子系统或函数调用模型。

导出函数模型与异步函数调用输入模型的比较

具有异步函数调用输入的模型可以使用导出函数模型功能。您主要在Simulink环境中使用这些模型,在该环境中,Simulink调度万博1manbetx器调用生成的函数。

导出功能模型 具有异步函数调用输入的模型
定义 这些模型具有函数调用根级别轮廓尺寸未连接到计算机的块异步任务规范块。这些轮廓尺寸块触发带有函数调用触发器输入的函数调用子系统或参考模型。 这些模型具有函数调用根级别轮廓尺寸块连接到异步任务规范块。这些轮廓尺寸块触发带有函数调用触发器输入的函数调用子系统或参考模型。
根级块 根级别只允许在函数调用上下文中执行的块。 也允许在非函数调用上下文中执行块。
数据传输 使用数据传输指标来解释模拟结果。导出函数模型中的数据传输在生成的代码中默认不受保护。有关详细信息,请参见函数调用子系统之间的数据传输 使用率转换块来保护以不同速率运行的函数调用子系统之间传输的数据。有关更多信息,请参见率转换
模拟的支持万博1manbetx 这些模型支持所有仿真模式中万博1manbetx的独立仿真和顶级模型仿真。 这些模型在所有仿真模式中支万博1manbetx持顶级模型仿真,在正常、加速和快速加速模式中支持独立仿真。
代码生成支持万博1manbetx 支持顶级模型和独立代码生成。万博1manbetx 支持顶级模型和独立代码生成。万博1manbetx

另请参阅

相关的话题

这个话题有用吗?