本文最后更新于 2026年8月22日。
Simulink 引用模型(Referenced Model)创建系统Mask、配置实例变量完整流程
⚠️ 重要区分
普通子系统Mask ≠ 模型系统Mask(System Mask)
模型引用(Model块)只能给被引用的独立slx模型本身创建【System Mask】,不能直接封装顶层里的Model模块;最终实现:顶层双击Model块弹出自定义参数面板,每个实例独立赋值。
方案总览
- 打开被引用子模型(xxx.slx)
- 在子模型【模型工作区】创建模型参数(Argument)
- 为子模型创建 Create System Mask(系统掩码)
- 绑定Mask参数 ↔ 模型Argument
- 顶层模型放置Model块引用它,双击即可配置每个实例独立变量
步骤1:准备被引用模型(子模型 ref_model.slx)
- 打开独立模型
ref_model.slx(就是你要被Model块引用的模型) - 打开 Model Explorer → Model Workspace
- 添加变量(示例:
Kp, Ki) - 勾选变量右侧【Argument】复选框(关键!)
- 只有标记为Argument,才能被外部Model块实例传参、被System Mask接管
子模型内部Gain、MATLAB Function直接使用
Kp、Ki
步骤2:创建【模型系统掩码 System Mask】
两种入口(任选其一)
- 顶部菜单栏 建模(Modeling) → Component → Create Model Mask
- 在Model Explorer模型工作区界面:Create System Mask
- 弹出Mask Editor(掩码编辑器)
❌ 错误操作:不要选中任何模块右键Create Mask,那是子系统mask,不是模型mask!
步骤3:Mask编辑器配置参数映射
切换到 Parameters & Dialog
- 左侧拖入
Edit(编辑框)控件到对话框 - 右侧属性配置
- Prompt:界面显示文字,例如
比例系数Kp - Name:必须和模型Argument名字完全一致:Kp
- Value:填写默认值(如
1.0) - ✅ 勾选 Evaluate
- Prompt:界面显示文字,例如
- 重复添加Ki等所有需要对外暴露的参数
- 【Icon & Ports】可以自定义模块图标文字
- 点击OK,保存子模型
ref_model.slx
步骤4:顶层模型使用Model块引用
- 顶层模型拖入 Model(模型引用)模块
- 设置
Model name = ref_model - 双击Model块,会弹出你自定义的Mask对话框!
- 在这里给当前实例设置独立Kp、Ki
- 同一个子模型可以放多个Model块,每个实例参数互不干扰
两种实现方式对比(重点避坑)
方式A:System Mask(推荐,标准工程用法)✅
- 对象:独立slx引用模型本身
- 优点:双击Model块直接弹出参数面板;支持代码生成;多实例独立参数;兼容保护模型;AUTOSAR开发首选
- 依赖:模型工作区变量勾选 Argument
方式B:不使用Mask,手动InstanceParameters(不推荐)
- 在Model块参数里填写
InstanceParameters={'Kp=2','Ki=0.1'} - 缺点:没有可视化对话框,只能手写表达式,维护麻烦
高频踩坑清单
- 双击Model块没有弹出mask界面
✅ 确认:打开的是子模型slx创建System Mask,不是顶层Model块右键mask;变量必须勾选Argument;保存子模型! - 报未定义变量 Kp
- 变量名大小写严格一致
- 子模型Model Workspace变量勾选Argument
- Mask参数Name和Argument名称完全相同
- 多个Model块修改参数互相影响
不要使用Base Workspace全局变量;必须使用模型Argument+System Mask,保证实例隔离 - 无法代码生成/报错参数作用域
禁止在InitFcn动态创建变量;全部使用Model Workspace Argument;不要使用普通子系统mask套模型引用
命令行快速创建(可选)
% 打开子模型
open_system('ref_model.slx');
% 创建系统mask
create_system_mask('ref_model');
% 编辑mask
edit_system_mask('ref_model');
补充:从子系统一键转为带Mask的引用模型
如果你现在是Subsystem:
右键子系统 → Subsystem & Model Reference → Convert to Referenced Model
生成独立slx,然后按上面流程添加Argument、创建System Mask。
如果你需要,我可以给你一份可直接复刻的最小Simulink示例模型参数清单。