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