simulink引用模型怎么创建mask设置变量

38 次阅读

本文最后更新于 2026年8月22日。

Simulink 引用模型(Referenced Model)创建系统Mask、配置实例变量完整流程

⚠️ 重要区分
普通子系统Mask ≠ 模型系统Mask(System Mask)
模型引用(Model块)只能给被引用的独立slx模型本身创建【System Mask】,不能直接封装顶层里的Model模块;最终实现:顶层双击Model块弹出自定义参数面板,每个实例独立赋值。

方案总览

  1. 打开被引用子模型(xxx.slx)
  2. 在子模型【模型工作区】创建模型参数(Argument)
  3. 为子模型创建 Create System Mask(系统掩码)
  4. 绑定Mask参数 ↔ 模型Argument
  5. 顶层模型放置Model块引用它,双击即可配置每个实例独立变量

步骤1:准备被引用模型(子模型 ref_model.slx)

  1. 打开独立模型 ref_model.slx(就是你要被Model块引用的模型)
  2. 打开 Model Explorer → Model Workspace
  3. 添加变量(示例:Kp, Ki
  4. 勾选变量右侧【Argument】复选框(关键!)
    • 只有标记为Argument,才能被外部Model块实例传参、被System Mask接管

子模型内部Gain、MATLAB Function直接使用 KpKi

步骤2:创建【模型系统掩码 System Mask】

两种入口(任选其一)

  1. 顶部菜单栏 建模(Modeling) → Component → Create Model Mask
  2. 在Model Explorer模型工作区界面:Create System Mask
  3. 弹出Mask Editor(掩码编辑器)

❌ 错误操作:不要选中任何模块右键Create Mask,那是子系统mask,不是模型mask!

步骤3:Mask编辑器配置参数映射

切换到 Parameters & Dialog

  1. 左侧拖入 Edit(编辑框)控件到对话框
  2. 右侧属性配置
    • Prompt:界面显示文字,例如 比例系数Kp
    • Name必须和模型Argument名字完全一致:Kp
    • Value:填写默认值(如1.0
    • ✅ 勾选 Evaluate
  3. 重复添加Ki等所有需要对外暴露的参数
  4. 【Icon & Ports】可以自定义模块图标文字
  5. 点击OK,保存子模型 ref_model.slx

步骤4:顶层模型使用Model块引用

  1. 顶层模型拖入 Model(模型引用)模块
  2. 设置 Model name = ref_model
  3. 双击Model块,会弹出你自定义的Mask对话框!
    • 在这里给当前实例设置独立Kp、Ki
    • 同一个子模型可以放多个Model块,每个实例参数互不干扰

两种实现方式对比(重点避坑)

方式A:System Mask(推荐,标准工程用法)✅

  • 对象:独立slx引用模型本身
  • 优点:双击Model块直接弹出参数面板;支持代码生成;多实例独立参数;兼容保护模型;AUTOSAR开发首选
  • 依赖:模型工作区变量勾选 Argument

方式B:不使用Mask,手动InstanceParameters(不推荐)

  • 在Model块参数里填写 InstanceParameters={'Kp=2','Ki=0.1'}
  • 缺点:没有可视化对话框,只能手写表达式,维护麻烦

高频踩坑清单

  1. 双击Model块没有弹出mask界面
    ✅ 确认:打开的是子模型slx创建System Mask,不是顶层Model块右键mask;变量必须勾选Argument;保存子模型!
  2. 报未定义变量 Kp
    • 变量名大小写严格一致
    • 子模型Model Workspace变量勾选Argument
    • Mask参数Name和Argument名称完全相同
  3. 多个Model块修改参数互相影响
    不要使用Base Workspace全局变量;必须使用模型Argument+System Mask,保证实例隔离
  4. 无法代码生成/报错参数作用域
    禁止在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示例模型参数清单。