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