模型引用的要求和限制
在引用模型之前,请考虑模型引用要求和限制。通过提前了解要求和限制,您可以做好相关准备以便成功引用模型。
模型重用
您可以在模型层次结构中多次引用一个模型,除非引用模型具有以下任一属性:
模型引用另一个设置为单实例的模型。
模型包含 To File 模块。
模型包含内部信号或状态,其存储类不支持多实例模型。内部信号和状态的存储类必须设置为
Auto
或Model default
,并且内部数据的默认存储类必须是多实例存储类。模型使用以下任一 Stateflow® 结构体:
导出的 Stateflow 图形函数
机器级别的数据
引用模型在加速模式下执行,并且包含未内联或已内联但未设置选项
SS_OPTION_WORKS_WITH_CODE_REUSE
的 S-Function。模型包含函数调用子系统,且该子系统:
被 Simulink® 强制用作函数
被宽信号调用
如果引用模型具有任一上述属性,则模型层次结构中只能显示模型的一个实例。模型必须将每个顶层模型允许的实例总数设置为“一个
”。
模型封装
您可以在引用模型中使用封装模块。此外,您可以封装引用模型(请参阅Create and Reference a Masked Model)。
要成功使用封装,请考虑以下要求和限制:
如果封装指定引用模型的名称,则封装必须直接提供引用模型的名称。您不能使用工作区变量来提供名称。
Model 模块的封装工作区不可用于引用模型。引用模型使用的任何变量都必须解析为以下任一工作区:
引用模型定义的工作区
MATLAB® 基础工作区
封装回调不能添加 Model 模块、更改 Model 模块名称或更改 Model 模块仿真模式。
引用模型中的 S-Function
不同类型的 S-Function 为模型引用提供不同级别的支持。
S-Function 类型 | 普通模式下的模型引用 | 加速模式下的模型引用和受保护模型 |
---|---|---|
1 级 MATLAB S-Function | 不支持 | 不支持 |
2 级 MATLAB S-Function | 支持 | 支持 - 需要 TLC 文件 |
手写 C MEX S-Function | 支持 - 可以与 TLC 文件内联 | 支持 - 可以与 TLC 文件内联 |
S-Function Builder | 支持 | 支持 |
代码继承工具 | 支持 | 支持 |
当您在引用模型中使用 S-Function 时,请考虑以下要求和限制。
S-Function 考虑事项 | 要求和限制 |
---|---|
采样时间继承 | 如果 S-Function 依赖于继承的采样时间,则 S-Function 必须显式声明对继承的采样时间的依赖。要控制采样时间继承,请根据 S-Function 是允许还是阻止继承,以不同方式使用 |
加速模式下的模型引用 | 如果加速模式引用模型包含的 S-Function 需要使用 Target Language Compiler (TLC) 文件进行内联,则该 S-Function 必须使用 在下列情况下,引用模型不能使用非内联 S-Function:
加速模式下的引用模型不能使用 Simulink Coder™ 软件生成的 S-Function。 |
普通模式下的模型引用 | 在特定情况下,当 C S-Function 出现在以普通模式执行的引用模型中时,不能成功执行。有关详细信息,请参阅S-Functions in Normal Mode Referenced Models。 要指定是否可以在普通模式引用模型中使用 S-Function,请使用 要使 S-Function 在普通模式下使用引用模型的多个实例,S-Function 必须显式指出它支持多个 |
受保护模型 | 如果受保护模型包含的 S-Function 需要使用 Target Language Compiler (TLC) 文件进行内联,则该 S-Function 必须使用 |
模型架构要求和限制
元素 | 要求和限制 |
---|---|
Goto 和 From 模块 | Goto 和 From 模块不能跨越模型引用边界。 |
迭代子系统 | 如果引用模型包含 Assignment 模块,则仅当 Assignment 模块也包含在一个迭代子系统中时,才能将此 Model 模块放入另一个迭代子系统中。 |
可配置子系统 | 在包含 Model 模块的可配置子系统中,请勿在更新过程中更改可配置子系统选择的子系统。 |
InitFcn 回调 | 顶层模型中的 |
打印引用模型 | 您不能从顶层模型打印引用模型。 |
信号要求和限制
信号 | 要求和限制 |
---|---|
从 0 或 1 开始的索引信息的传播 | 在两种情况下,Simulink 不会将从 0 开始或从 1 开始的索引信息传播到连接至以下模块的引用模型根级端口:
Assignment 是接受索引的模块。For Iterator 是生成索引的模块。 这两种情况会导致缺少传播,从而使 Simulink 无法检测不兼容的索引连接。在这两种情况下: |
异步采样率 | 仅当引用模型同时满足以下条件时,才能使用异步采样率:
|
用户定义的输入或输出数据类型 | 引用模型只能输入或输出用户定义的定点数据类型或者由 |
总线 | 如果使用虚拟总线作为引用模型的输入或输出,则总线不能包含可变大小信号元素。请参阅Use Buses at Model Interfaces。 |
信号对象 | 连接到 Model 模块的信号从功能上讲在模块内部和外部都是同一个信号。因此,该信号必须满足一个给定信号最多只能有一个关联信号对象的限制条件。有关详细信息,请参阅 |
仿真要求和限制
仿真属性 | 要求和限制 |
---|---|
连续采样时间传播 | 连续采样时间不能传播到未要求明确指定采样时间的 Model 模块。 |
采样时间和求解器 | 顶层模型的求解器控制模型层次结构中的所有连续采样时间。例如,对于定步长求解器,引用模型中的所有连续速率以顶层模型的定步长运行。有关采样时间如何影响求解器的信息,请参阅采样时间的类型。 |
状态初始化 | 如果一个模型引用了其他具有状态的模型,要初始化该模型的状态,请以结构体或带时间的结构体格式指定初始状态。 |
参数可调性 | 当您仿真引用了其他模型的模型时,在某些情况下,您将失去模块参数(例如,Gain 模块的增益参数)的某些可调性。有关详细信息,请参阅特定建模情形下的可调整性注意事项和限制。 |
代码生成要求和限制
通过预先了解代码生成要求和限制,您可以做好准备,以便为代码生成正确设置模型层次结构。请参阅Set Configuration Parameters for Code Generation of Model Hierarchies (Simulink Coder)和Code Generation Limitations for Model Reference (Simulink Coder)。