Main Content

模型引用的要求和限制

在引用模型之前,请考虑模型引用要求和限制。通过提前了解要求和限制,您可以做好相关准备以便成功引用模型。

模型重用

您可以在模型层次结构中多次引用一个模型,除非引用模型具有以下任一属性:

  • 模型引用另一个设置为单实例的模型。

  • 模型包含 To File 模块。

  • 模型包含内部信号或状态,其存储类不支持多实例模型。内部信号和状态的存储类必须设置为 AutoModel default,并且内部数据的默认存储类必须是多实例存储类。

  • 该模型使用导出的 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 是允许还是阻止继承,以不同方式使用 ssSetModelReferenceSampleTimeInheritanceRule。有关详细信息,请参阅S-Functions That Specify Sample Time Inheritance Rules (Simulink Coder)

加速模式下的模型引用

如果加速模式引用模型包含的 S-Function 需要使用 Target Language Compiler (TLC) 文件进行内联,则该 S-Function 必须使用 ssSetOptions 宏在其 mdlInitializeSizes 方法中设置 SS_OPTION_USE_TLC_WITH_ACCELERATOR 选项。除非 S-Function 设置此选项,否则仿真目标不会内联 S-Function。

在下列情况下,引用模型不能使用非内联 S-Function:

  • 模型在模型层次结构中被多次引用。要解决此限制,请使用普通模式或:

    1. 制作引用模型的副本。

    2. 为副本指定不同名称。

    3. 在需要模型的每个位置引用不同副本。

  • S-Function 使用字符向量参数。

加速模式下的引用模型不能使用 Simulink Coder™ 软件生成的 S-Function。

普通模式下的模型引用

在特定情况下,当 C S-Function 出现在以普通模式执行的引用模型中时,不能成功执行。有关详细信息,请参阅S-Functions in Normal Mode Referenced Models

要指定是否可以在普通模式引用模型中使用 S-Function,请使用 ssSetModelReferenceNormalModeSupport SimStruct 函数。

要使 S-Function 在普通模式下使用引用模型的多个实例,S-Function 必须显式指出它支持多个 exec 实例。有关详细信息,请参阅Supporting the Use of Multiple Instances of Referenced Models That Are in Normal Mode

受保护模型

如果受保护模型包含的 S-Function 需要使用 Target Language Compiler (TLC) 文件进行内联,则该 S-Function 必须使用 ssSetOptions 宏在其 mdlInitializeSizes 方法中设置 SS_OPTION_USE_TLC_WITH_ACCELERATOR 选项。

模型架构要求和限制

元素要求和限制
GotoFrom 模块

GotoFrom 模块不能跨越模型引用边界。

迭代子系统

如果引用模型包含 Assignment 模块,则仅当 Assignment 模块也包含在一个迭代子系统中时,才能将此 Model 模块放入另一个迭代子系统中。

可配置子系统

在包含 Model 模块的可配置子系统中,请勿在更新过程中更改可配置子系统选择的子系统。

InitFcn 回调

顶层模型中的 InitFcn 回调无法更改引用模型使用的参数。

打印引用模型

您不能从顶层模型打印引用模型。

信号要求和限制

信号要求和限制
从 0 或 1 开始的索引信息的传播

在两种情况下,Simulink 不会将从 0 开始或从 1 开始的索引信息传播到连接至以下模块的引用模型根级端口:

  • 接受索引的模块(如 Assignment 模块)

  • 生成索引的模块(如 For Iterator 模块)

Assignment 是接受索引的模块。For Iterator 是生成索引的模块。

这两种情况会导致缺少传播,从而使 Simulink 无法检测不兼容的索引连接。在这两种情况下:

  • 如果引用模型的根级输入端口连接到模型中具有不同的从 0 开始或从 1 开始的索引设置的索引输入,Simulink 不会设置根级 Inport 模块的从 0 开始或从 1 开始的索引属性。

  • 如果引用模型的根级输出端口连接到模型中具有不同的从 0 开始或从 1 开始的索引设置的索引输出,Simulink 不会设置根级 Outport 模块的从 0 开始或从 1 开始的索引属性。

异步采样率

仅当引用模型同时满足以下条件时,才能使用异步采样率:

  • 外部源通过根级 Inport 模块驱动异步采样率。

  • 根级 Inport 模块输出函数调用信号。请参阅 Asynchronous Task Specification (Simulink Coder)

用户定义的输入或输出数据类型

引用模型只能输入或输出用户定义的定点数据类型或者由 Simulink.DataTypeSimulink.Bus 对象定义的数据类型。

总线

如果使用虚拟总线作为引用模型的输入或输出,则总线不能包含可变大小信号元素。请参阅在模型接口处使用总线

信号对象

连接到 Model 模块的信号从功能上讲在模块内部和外部都是同一个信号。因此,该信号必须满足一个给定信号最多只能有一个关联信号对象的限制条件。有关详细信息,请参阅 Simulink.Signal

仿真要求和限制

仿真属性要求和限制
连续采样时间传播

连续采样时间不能传播到未要求明确指定采样时间的 Model 模块。

采样时间和求解器

顶层模型的求解器控制模型层次结构中的所有连续采样时间。例如,对于定步长求解器,引用模型中的所有连续速率以顶层模型的定步长运行。有关采样时间如何影响求解器的信息,请参阅采样时间的类型

状态初始化

如果一个模型引用了其他具有状态的模型,要初始化该模型的状态,请以结构体或带时间的结构体格式指定初始状态。

参数可调性

当您仿真引用了其他模型的模型时,在某些情况下,您将失去模块参数(例如,Gain 模块的增益参数)的某些可调性。有关详细信息,请参阅特定建模情形下的可调整性注意事项和限制

代码生成要求和限制

通过预先了解代码生成要求和限制,您可以做好准备,以便为代码生成正确设置模型层次结构。请参阅Set Configuration Parameters for Code Generation of Model Hierarchies (Simulink Coder)Code Generation Limitations for Model Reference (Simulink Coder)

相关主题