主要内容

导出功能模型概述

导出函数模型是Simulink金宝app®为可以与外部环境和调度器集成的独立函数生成代码的模型。函数定义为函数调用子系统,函数调用模型金宝app仿真软件的功能,功能块。

下面的导出函数模型包含定义的两个函数函数调用子系统块。有关创建此模型的逐步过程,请参见创建一个导出函数模型

从这个模型生成的代码有两个独立的函数,一个是延迟函数,另一个是平方函数。

/* * export_function_model.c *为Simulink模型'export_functio金宝appn_model'生成的代码。*/ {export_function_model_Y. */ void function_call_100ms(void) /*采样时间:[0.1s, 0.0s] */ {export_function_model_Y. 0output_100ms = export_function_model_DW.UnitDelay_DSTATE;export_function_model_DW。UnitDelay_DSTATE = export_function_model_Y。Output_100ms + 1.0;} void function_call_10ms(void) /*采样时间:[0.01s, 0.0s] */ {export_function_model_Y. 0output_10ms = export_function_model_U。* export_function_model_U.input_10ms;}

导出功能模型的工作流

在为函数生成代码之前,如何模拟和测试模型是创建导出函数模型的四个常见过程的不同之处。

当函数调用排序足够简单,可以指定为模型输入时,使用输入矩阵进行模拟是测试导出函数模型的首选方法。看到使用输入矩阵测试导出函数模型仿真

当函数调用排序太复杂而不能用输入矩阵指定时,可以创建一个测试模型(harness)来模拟目标环境行为。使用此测试模型为导出函数模型提供函数调用输入。看到使用函数调用生成器测试导出函数模型仿真使用调度编辑器测试导出函数模型仿真而且使用状态流程图测试导出-功能模型仿真

允许块

在顶层,导出函数模型仅限于虚拟块,即具有常量()采样时间,以及以下区块:

  • 轮廓尺寸

  • 外港

  • 总线的创造者

  • 总线选择器

  • 总线元件

  • 输出总线元件

  • 函数调用子系统

  • 模型带有函数调用输入端口

  • 金宝app仿真软件的功能

  • 初始化函数

  • 重置功能

  • 终止函数

  • 数据存储内存

  • 合并

  • 功能带有函数调用输入端口

  • 函数调用分裂

  • 显示

  • 范围

看到非虚拟块和虚拟块

导出功能模型的需求

要使导出函数模型成功生成函数代码,必须满足以下要求。

配置参数:

  • 解算器类型设置为固定步

  • 解算器设置为汽车离散

  • 代码生成系统目标文件设置为ert.tlc.选择ert.tlc需要一个嵌入式编码器®许可证。

  • 对于函数调用模型块,周期采样时间约束对于所引用的模型设置为确保采样时间独立

根级函数调用轮廓尺寸块:

  • 输出函数调用选中复选框。

  • 对象的信号无法接收异步任务说明块。

根级数据轮廓尺寸而且外港块无法连接到虚拟总线数据信号。

根级函数调用子系统块和函数调用模型块:

  • 块中的所有内部块必须支持代码生成。金宝app

  • 如果触发因素采样时间类型设置为:

    • 触发,内部块必须有样品时间设置为-1

    • 周期,即根级函数调用轮廓尺寸Block必须有样品时间设置为指定的离散时间,所有内部块必须具有样品时间设置为-1或者指定的离散时间。

函数调用子系统的采样时间

在导出函数模型中,可以为根级函数调用指定采样时间轮廓尺寸block和触发块内部的根级别函数调用子系统块或函数调用模型块。下表显示了如何指定这些采样时间。

触发采样时间类型 触发样品时间 轮廓尺寸样品时间 模拟期间的函数调用率

触发

未指定,参数为非活动。

1(继承)

为了进行模拟,函数调用启动器连接到轮廓尺寸块设置模拟速率。

指定离散时间

函数调用启动器,在测试模型中,连接到轮廓尺寸块的采样时间必须等于指定的离散时间轮廓尺寸块。

对于模拟,组件以指定的离散速率执行。如果函数调用源使用了不同的示例,Simulink将显示错误消息。金宝app

周期

类引用导出函数模型,则应用定期函数调用运行时检查模型块。

对象的指定离散时间轮廓尺寸块。

1(继承)

不允许进行此配置。金宝appSimulink显示错误消息。

指定的离散时间。

对于模拟,组件在指定的离散采样时间执行。如果函数调用源使用不同的采样时间,Simulink将显示错误消息。金宝app

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

通过为函数调用指定采样时间和优先级轮廓尺寸在模拟过程中,您可以控制函数调用子系统和函数调用模型的执行顺序。或者,您可以使用日程编辑器或状态流®用于测试调度的图表。看到使用调度编辑器测试导出函数模型仿真而且使用状态流程图测试导出-功能模型仿真

  1. 指定模拟执行的采样时间。右击函数调用轮廓尺寸方块,然后选择块的参数

  2. 选择Signal Attributes选项卡。在样品时间框,输入离散时间。

  3. 指定模拟的块优先级。右击函数调用轮廓尺寸方块,然后选择属性

  4. 优先级框中,输入优先级值。

  5. 显示模拟的块执行顺序。在调试选项卡上,选择信息覆盖,然后在下拉对话框中选择执行顺序.此显示对生成的代码没有影响。

在下面的导出函数模型中,函数调用子系统2样品时间轮廓尺寸Block 2设置为0.01(10毫秒)运行前函数调用子系统样品时间轮廓尺寸第1块设置为0.1(100毫秒)。

确定相对执行顺序

金宝appSimulink比较函数调用轮廓尺寸Block属性使用以下规则确定它们的相对执行顺序:

  1. 优先级-高优先级(较小的数字)先执行

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

  3. 端口号-较小的端口号优先执行

  4. 如果OrderFunctionsByDependency参数设置为“上”,具有相同采样时间的块将根据块所连接的函数的相对数据依赖关系进一步排序。

看看效果如何OrderFunctionsByDependency参数,考虑以下模型。

三个函数调用子系统,编号为1、2和3。1号的采样时间为100毫秒。2号和3号的采样时间为10毫秒。数字3的输出连接到数字2的输入。驱动编号1、编号2和编号3的import块分别用F2、F0和F1进行注释。

轮廓尺寸块1最后执行,因为它的采样时间比轮廓尺寸区块2和区块3,它们有相同的采样时间。如果OrderFunctionsByDependency设置为“关闭”轮廓尺寸块2在之前执行轮廓尺寸根据他们的端口号来划分Block 3。执行顺序为2,3,1。

OrderFunctionsByDependency参数设置为“关闭”默认情况下。要打开它,使用这个命令。

set_param (ModelName“OrderFunctionsByDependency”,“上”)
OrderFunctionsByDependency设置为“上”轮廓尺寸块3在之前执行轮廓尺寸块2,因为函数调用子系统2和3之间的数据依赖关系。执行顺序为3,2,1。

三个函数调用子系统,编号为1、2和3。1号的采样时间为100毫秒。2号和3号的采样时间为10毫秒。数字3的输出连接到数字2的输入。驱动编号1、编号2和编号3的import块分别用F2、F1和F0标注。

注意OrderFunctionsByDependency参数仅影响为其设置的模型。参数不会传播到引用的模型中。

的值时,两个块具有不同的值优先级参数表示优先级高的块首先执行。如果优先级参数相等,则速率较快(采样时间较小)的块首先执行。如果优先级两个块的采样时间相同,端口号较低的块先执行。例外情况是块和之间存在数据依赖关系OrderFunctionsByDependency设置为“上”,在这种情况下,依赖块在它所依赖的块之后执行。

请注意

当顶层模型的仿真模式为加速或快速加速时,Simulink不会对根级函数调用的执行顺序进行运行时仿真检查金宝app轮廓尺寸引用的导出函数模型中的块。

假设导出函数模型有五个根级函数调用轮廓尺寸块,A到E,块属性如表所示。这些块没有数据依赖关系,或者OrderFunctionsByDependency设置为“关闭”.为了确定它们的相对执行顺序,Simulink比较它们的执行顺序金宝app优先级参数、采样时间(如果不同且非继承)和端口号。

根级函数调用轮廓尺寸 一个 B C D E
优先级 10 30. 40 40 30.
样品时间 1 0.2 0.1 0.1 1
端口号 5 4 3. 2 1
  • Block A在五个Block中优先级最高。A先执行。

  • B和E执行在A之后,C和d之前。因为B和E具有相同的优先级,Simulink比较它们的采样时间来确定执行顺序。金宝appE的采样时间为-1(继承的),小于0.2时,B的采样时间E执行于B之前。

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

这些函数调用的相对执行顺序轮廓尺寸积木是A, E, B, D, C

函数调用子系统的锁存输入数据

可以闩锁输入数据轮廓尺寸块内函数调用子系统块,以确保数据完整性。来锁存输入数据轮廓尺寸块参数,选择用于函数调用子系统输出的反馈信号的闩锁输入

在下面的模型中,为轮廓尺寸块在函数调用子系统ReadDSAndCal1锁存(由<李>),并且在子系统执行期间不能更改。的数据存储读取而且数据存储写块在每个函数调用子系统中调用。第一个和第二个函数调用写入数据,最后一个函数调用将数据读取到数据存储内存块。

请注意

根级数据轮廓尺寸块连接到内部轮廓尺寸如果连接到根级块的所有块都被锁存,则该块也被锁存。有关更多信息,请参见用于函数调用子系统输出的反馈信号的闩锁输入

请注意

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

嵌套的导出函数模型

嵌套的导出函数模型提供了额外的组织层。下面的模型有两个引用的导出函数模型模型块。

请注意

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

带有多实例函数调用模型的导出函数模型

你可以使用函数调用子系统块或函数调用模型块在导出函数模型中。如果使用函数调用模型块,您还可以创建模型的多个实例。

  1. 的模型定义算法触发块。集触发类型函数调用

  2. 引用模型模型块。结果是一个函数调用模型。

  3. 连接一个函数调用轮廓尺寸块,并选择输出函数调用复选框。添加信号轮廓尺寸而且外港块。更新模型(Ctrl-D)。结果是一个带有函数调用模型的导出函数模型。

  4. 复制引用的模型和端口块,以创建模型的第二个实例。这两个实例由不同的根级函数调用调用轮廓尺寸块在不同的任务。

导出函数模型和带有异步函数调用输入的模型

导出函数模型功能可用于具有异步函数调用输入端口的模型。您主要在Simulink环境中使用这些模型,其中Simulink调度器将调用金宝app函数。

比较的特点 导出功能模型 具有异步函数调用输入的模型
定义 这些模型具有根级函数调用轮廓尺寸对象未连接到的块异步任务说明块。这些轮廓尺寸块触发函数调用子系统或函数调用模型(模型块与触发块)。 这些模型具有根级函数调用轮廓尺寸连接到的块异步任务说明块。这些轮廓尺寸块触发函数调用子系统或函数调用模型。
根级块 只有在函数调用上下文中执行的块才允许位于根级。 也允许在非函数调用上下文中执行块。
数据传输 使用数据传输指标来解释模拟结果。导出函数模型中的数据传输在生成的代码中默认不受保护。详情请参见函数调用子系统的锁存输入数据 使用率转换块,以保护以不同速率运行的函数调用子系统之间传输的数据。有关更多信息,请参见率转换
模拟的支持金宝app 这些模型支持所有仿真模式下金宝app的独立仿真和测试模型仿真。 这些模型支持所有仿真模式下金宝app的测试模型仿真,以及正常、加速和快速加速模式下的独立仿真。
代码生成支持金宝app 支持顶级模型和独立代码生成。金宝app 支持顶级模型和独立代码生成。金宝app

另请参阅

相关的话题