导出函数模型是Simulink金宝app®为可以与外部环境和调度程序集成的独立函数生成代码的模型。函数的定义使用功能呼叫子系统,函数调用模型,金宝app仿真软件的功能, 和S函数块。
下面的导出函数模型包含用功能呼叫子系统块。有关创建此模型的分步过程,请参见创建一个导出功能模型.
从这个模型生成的代码有两个独立的函数,一个用于延迟函数,另一个用于平方函数。
/* * File: export_function_model.c *为Simulink模型'export_f金宝appunction_model'生成代码。export_function_call_100ms (void) /*采样时间:[0.1s, 0.0s]output_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. txt ();output_10ms = export_function_model_U。input_10ms * export_function_model_U.input_10ms;}
在为函数的代码生成代码之前,为您的模型进行模拟和测试模型的四个常见进程在为函数生成代码之前差异。
当函数呼叫排序简单到要被指定为模型输入时,使用输入矩阵的仿真是测试导出功能模型的首选方法。看使用输入矩阵测试出口函数模型仿真.
当函数调用排序过于复杂而无法使用输入矩阵指定时,创建一个测试模型(利用)来模拟目标环境的行为。使用此测试模型向导出函数模型提供函数调用输入。看使用函数调用生成器测试导出函数模型仿真,使用进度编辑器测试输出-功能模型仿真和使用状态溢图测试出口函数模型仿真.
在顶级,导出功能模型仅限于以下块:
inport.
外港
去
从
功能呼叫子系统
函数调用模型
函数调用拆分
金宝app功能
初始化功能
重置功能
终止函数
数据存储内存
公共汽车创造者
总线选择器
Mux
多路分配器
合并
信号规范
S函数
要想导出功能模型成功地生成功能代码,必须满足以下需求。
模型配置参数:
解算器类型设置为固定步
.
解算器设置为汽车
或者离散的
.
代码生成系统目标文件设置为ert.tlc
.选择ert.tlc
需要嵌入式编码器®许可证。
对于函数调用模型块,周期性样本时间约束的引用模型集确保样本时间无关
.
根级函数调用inport.块:
输出函数调用复选框选中。
无法从中接收信号异步任务规范块。
根级数据inport.和外港块无法连接到虚拟总线数据信号。
根级函数调用子系统块和函数调用模型块:
块中的所有内部块必须支持代码生成。金宝app
如果触发器块采样时间类型设置为:
触发
,内部块必须具有采样时间设置为-1
.
周期
,根级函数调用inport.块必须具有它的采样时间设置为指定的离散时间,所有内部块都必须有采样时间设置为-1
或指定的离散时间。
在导出功能模型中,您可以指定root级功能调用的采样时间inport.块和扳机块在根级内部功能呼叫子系统块或函数呼叫模型块。下表显示了如何指定这些示例时间。
扳机块采样时间类型 | 扳机块采样时间 | inport.块采样时间 | 模拟过程中的函数调用速率 |
|
未指定,参数处于非活动状态。 | 1(继承) |
对于模拟,函数调用发起者连接到inport.块设置模拟速率。 |
指定的离散时间 |
函数调用启动器,在测试模型中,连接到inport.块的采样时间必须等于指定的离散时间inport.块。 对于模拟,组件以指定的离散速率执行。如果函数呼叫源使用不同的示例,则Simulink会显示错误消息。金宝app |
||
如果导出函数模型是从模型块。 |
-1(继承)或指定的离散时间inport.块。 | 1(继承) |
不允许使用此配置。金宝appSimulink显示错误消息。 |
指定的离散时间。 |
对于仿真,组件在指定的离散采样时间执行。如果函数调用源使用不同的示例时间,Simulink将显示一条错误消息。金宝app |
通过指定函数调用的样本时间和优先级inport.块您可以控制执行顺序功能呼叫子系统和功能呼叫模拟期间的模型.或者,您可以使用日程编辑器或状态流®测试调度的图表。看使用进度编辑器测试输出-功能模型仿真和使用状态溢图测试出口函数模型仿真.
指定模拟执行的样本时间。右键单击一个函数调用inport.块,然后选择块的参数.
选择“信号属性”选项卡。在采样时间框中,输入离散时间。
指定模拟的块优先级。右键单击一个函数调用inport.块,然后选择特性.
在优先级框中,输入优先级值。
显示模拟块的执行顺序。在调试选项卡上,选择信息覆盖,然后从下拉对话框中选择执行订单.此显示对生成的代码没有影响。
在以下出口函数模型中,功能呼叫子系统2与采样时间为inport.第2块设置为0.01
(10毫秒)运行之前功能呼叫子系统1与采样时间为inport.区块1设置为0.1
(100毫秒)。
金宝appSimulink比较函数调用inport.块属性以确定它们的相对执行顺序,使用以下规则:
优先级 - 更高的优先级(较低数量)首先执行
采样时间——先执行较小的采样时间
端口号-较小的端口号首先执行
当两个块的值不同时优先级参数,首先执行具有较高优先级的块。如果是优先级参数相等,块具有更快的速率(较小的采样时间)首先执行。如果优先级对于两个块相同,采样时间是相同的,并且首先执行较低端口号的块。
请注意
当顶部模型的仿真模式是加速器或快速加速器时,Simulink不会对根级函数调用的执行顺序执行运行时仿真检查金宝appinport.引用的导出功能模型中的块。
假设一个导出函数模型有5个根级函数调用inport.块,a到e,具有块属性,如表所示。要确定其相对执行顺序,Simulink会比较其金宝app优先级参数,采样时间(如果不同和非继承)和端口号。
根级函数调用inport.块 | 一个 | B | C | D | E |
---|---|---|---|---|---|
优先级 | 10. | 30. | 40 | 40 | 30. |
采样时间 | -1 | 0.2 | 0.1 | 0.1 | -1 |
端口号 | 5 | 4 | 3. | 2 | 1 |
块A具有所有五个块的最高优先级。首先执行。
b和e在c和d之前之后执行。由于b和e具有相同的优先级,Simulink将其采样时间与确定执行顺序进行比较。金宝appe有一个样本时间-1
(继承的),它比0.2
, B. E的采样时间在B. E之前执行。
C和D具有相同的优先级和相同的不同的、非继承的样本时间。D(2)的端口号小于C (3), D在C之前执行。
这些函数调用的相对执行顺序inport.方块是A, E, B, D和C。
您可以锁存输入数据inport.块内功能呼叫子系统块,以确保数据完整性。要锁存输入数据,请选择锁存输入用于函数调用子系统输出的反馈信号复选框。
在以下模型中,输入数据inport.块在函数调用子系统中ReadDsAndcal1.
是闩锁的(由<李>
),并且不能在子系统执行期间更改。的数据存储读取和数据存储写在每个函数调用子系统中调用块。第一个和第二个函数调用写入数据,最后一个函数调用将数据读到数据存储内存块。
请注意
root -数据inport.块连接到内部inport.如果连接到根级块的所有块都已闩锁,则块也将闩锁。有关更多信息,请参见锁存输入用于函数调用子系统输出的反馈信号.
请注意
默认情况下,数据传输信号在生成的代码中不受保护。使用自定义存储类,以防止由于目标环境中当前任务的抢占而在这些信号中防止数据损坏。
嵌套的导出功能模型提供了一个额外的组织层。下面的模型有两个引用的导出功能模型,它们是从模型块。
请注意
导出函数模型不能包含具有异步函数调用输入的引用模型,但可以包含函数调用子系统和函数调用模型。具有异步函数调用输入的模型可以包含导出函数模型、函数调用子系统或函数调用模型。
您可以使用功能呼叫子系统块或函数调用模型导出功能模型中的块。如果你使用函数调用模型块,您还可以创建模型的多个实例。
定义你的算法与模型,其中包含扳机块。集触发类型到函数调用
.
从a中引用模型模型块。结果是一个函数调用模型。
连接函数呼叫inport.块并选择输出函数调用复选框。添加信号inport.和外港块。更新模型(Ctrl-D)。结果是一个带有函数调用模型的导出函数模型。
复制引用的模型和端口块以创建模型的第二个实例。执行顺序显示第一个实例在第二个实例之前运行。
具有异步函数调用输入端口的模型可以使用导出函数模型功能。您主要在Simulink环境中使用这些模型,其中Simulink调度器调用函金宝app数。
比较特征 | 出口函数模型 | 具有异步函数调用输入的模型 |
---|---|---|
定义 | 这些模型有根级函数调用inport.未连接到异步任务规范块。这些inport.块触发函数调用子系统或函数调用模型(模型块与扳机块)。 | 这些模型有根级函数调用inport.块连接到异步任务规范块。这些inport.阻止触发功能呼叫子系统或功能呼叫模型。 |
根级块 | 只允许在函数调用上下文中执行的块在根级别。 | 还允许在非函数调用上下文中执行的块。 |
数据传输 | 使用数据传输指标来解释模拟结果。导出函数模型中的数据传输在生成的代码中默认不受保护。有关详细信息,请参见函数调用子系统的锁存输入数据. | 使用率转换块以保护以不同速率运行的函数呼叫子系统之间传输的数据。有关更多信息,请参见率转换. |
模拟的支持金宝app | 这些模型支持所有仿真模式下金宝app的独立仿真和测试模型仿真。 | 这些模型支持所有仿真模式下金宝app的测试模型仿真,以及Normal、Accelerator和Rapid Accelerator模式下的独立仿真。 |
代码生成的支持金宝app | 支持顶级模型和独立代码生成。金宝app | 支持顶级模型和独立代码生成。金宝app |