本文最后更新于 2026年7月29日。
Subsystem Reference vs Referenced Model(Simulink)
先给核心结论:
- Subsystem Reference(子系统引用):引用外部.slx文件中的普通Subsystem
- Referenced Model(模型引用,Model Reference):引用独立模型 .slx(顶层模型)
两者都是“把外部模块嵌入当前模型”,但底层机制、代码生成、仿真行为差异巨大。
1. 基础定义
① Subsystem Reference
数据源:单独slx文件里一个子系统(Subsystem)
文件结构:外部slx内部顶层必须是一个Subsystem,不能是空白顶层。
ExternalFile.slx
└── Subsystem(唯一顶层内容) ← 被Subsystem Reference加载
仿真行为:展开式仿真。仿真时会把子系统内容复制/展开到父模型,逻辑等价于直接粘贴子系统。
② Model Reference(Referenced Model)
数据源:一个完整独立顶层模型(.slx),顶层可以任意搭建。
RefModel.slx ← 标准Simulink顶层模型,直接被Model Reference模块调用
仿真行为:独立模型实例仿真,拥有独立工作空间、独立采样、独立编译单元。
2. 关键维度对比
| 对比项 | Subsystem Reference | Model Reference(Referenced Model) |
|---|---|---|
| 被引用对象 | 外部文件中的Subsystem | 独立顶层模型 |
| 编译粒度 | 和父模型合并编译,单一编译单元 | 独立编译单元,可以单独生成代码、单独编译 |
| 代码生成 | 所有代码平铺到父模型代码中,无独立模块封装 | 生成独立.c/.h文件,有独立模型接口函数 |
| 工作空间 | 共享父模型工作空间 | 拥有独立模型工作空间(Model Workspace),隔离参数 |
| 仿真模式 | 正常模式(内联展开);不支持加速器独立编译 | 支持:Normal / Accelerator / Rapid Accelerator;支持单独加速 |
| 参数隔离 | 参数和主模型混在一起,容易命名冲突 | 天然参数隔离,大型项目优势明显 |
| 触发、采样时间 | 继承父模型上下文,不支持独立采样域 | 可以拥有独立采样时间、独立触发任务(AUTOSAR非常关键) |
| 代码复用/增量编译 | 修改引用子系统 → 整个父模型重新编译 | 修改引用模型 → 仅重新编译该引用模型,增量编译友好 |
| AUTOSAR/车载项目 | 极少使用 | 首选,对应SW-C组件,可映射软件组件 |
| 支持函数调用子系统 | 支持 | 支持,且可以构建独立可调用实体 |
| 实例化 | 多个引用实例共享一份内容,但无独立上下文 | 多个实例可配置独立参数、独立运行上下文 |
3. 通俗理解
-
Subsystem Reference ≈ “外部粘贴的子系统”
只是把子系统放到单独文件方便复用,本质还是普通子系统,和你直接复制粘贴差别不大,没有边界隔离。 -
Model Reference ≈ “调用一个独立小程序”
有清晰输入输出接口、独立内存、独立编译边界,相当于一个黑盒组件。
4. 适用场景
✅ 什么时候用 Subsystem Reference
- 小型通用逻辑,不需要独立代码文件;
- 只是为了模型文件整洁,不想复制粘贴子系统;
- 不需要参数隔离、不需要增量编译;
❌ 不推荐大型项目、车载AUTOSAR、多团队协同开发。
✅ 什么时候用 Model Reference(Referenced Model)
- 车载、AUTOSAR、大型分层项目(最常用);
- 需要组件化、多人并行开发;
- 希望每个组件生成独立源代码文件;
- 需要增量编译、快速仿真加速;
- 需要参数隔离,防止全局参数冲突;
- 同一个模型多处实例化,每组实例配置不同参数。
5. 容易踩坑的典型区别
-
采样域
Model Reference内部可以有和父模型不同的采样时间;
Subsystem Reference内部采样完全融入父模型,不存在独立任务边界。 -
代码生成(嵌入式重点)
- Subsystem Reference:代码平铺,没有独立接口函数;
- Model Reference:生成
model_step()、model_initialize()标准模型入口函数,符合嵌入式单元划分思路。
- 回调函数
Model Reference拥有独立模型回调;Subsystem Reference只有子系统回调,依附主模型。
补充小知识点
Simulink里容易混淆三者:
- 普通Subsystem:当前模型内部
- Subsystem Reference:外部文件里的Subsystem
- Model Reference:外部独立顶层模型(Referenced Model)
如果你是做AUTOSAR / 安全气囊控制器这类车载模型开发,工程规范一般强制使用 Model Reference,基本不用Subsystem Reference。