ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

测试框架与模型同步

测试框架与模型同步

测试框架与模型同步

1. 概念讲解

测试框架提供隔离的环境来试验设计改动。同步(Synchronization)就是把改动在"测试框架"与"主模型"两个方向之间传递。同步覆盖三类元素:

  • 被测组件(CUT):CUT 模块及其内部的块、信号与其他实体;

  • 块参数(Block Parameters):块上参数的取值(右键块选 Block Parameters 可见);

  • 可选地:模型或测试框架的活动配置集(Configuration Set)。

基础工作区的数据不需要同步,因为框架与主模型都能访问它。子系统模型(Subsystem Model)测试框架总是与底层模型保持同步。配置集与模型工作区参数是否随重建同步,由 Create Test Harness 对话框 Advanced Properties 页中的Update Configuration Parameters and Model Workspace data on rebuild决定。

1.1 四种同步模式

创建框架时就要指定同步时机:自动还是手动。如果你打算在框架里试验不同的组件设计,应选手动同步,避免误覆盖主模型中的组件。各模式对比如下:

同步模式

方向与时机

可用对象

框架打开时的锁定

打开与关闭时同步(Synchronize on harness open and close)

打开时:模型 → 框架;关闭时:框架 → 模型

子系统(含 Stateflow 图、MATLAB Function 块)、Model 块、S-Function 块;Subsystem Reference 只同步块参数。不支持框图级、SIL/PIL、子系统模型框架

主模型与框架均解锁;模型中的子系统 CUT 被锁定,框架中的子系统 CUT 解锁

仅打开时同步(Synchronize on harness open)

仅打开时模型 → 框架

框图级、子系统、Model 引用块、S-Function 块;Subsystem Reference 只同步块参数。不支持 SIL/PIL、子系统模型框架

主模型与框架解锁;模型与框架中的子系统 CUT 都被锁定

仅推送与重建时同步(Synchronize only during push and rebuild)

Push Changes:框架 → 模型;Rebuild Harness:模型 → 框架

子系统、Model 引用块、S-Function 块;子系统模型总是此模式。不支持框图级、SIL/PIL、库中组件

主模型、框架及其中各类 CUT(含子系统)全部解锁

仅重建时同步(Synchronize only during rebuild)

仅 Rebuild Harness:模型 → 框架

框图级、Model 引用块、SIL/PIL 验证模式组件。不支持子系统、S-Function 块、库中组件

主模型与框架中各类 CUT 解锁,但 SIL/PIL 模式组件被锁定并屏蔽

两种需要特别记住的行为:

其一,对 Model 块建 SIL/PIL 框架时,框架内该块模式被改为 SIL/PIL,关闭框架时不会把这个模式改动写回主模型;其二,框架中用了 SIL/PIL 块时,建议把框架设为每次打开都重建(Rebuild harness on open),保持生成代码与主模型一致。

无论哪种模式,框架打开时你仍可以仿真主模型,也可以为其他组件建框架;但一次只能打开一个框架,因此新建框架不会自动打开。

1.2 三个核对与传递操作
  • 检查未同步差异(Check for Unsynchronized Component Differences):框架不自动同步时,可用菜单Check Harness(对应sltest.harness.check)核对框架与主模型之间的组件差异。典型用途:在框架里做试探性修改前,确认不会覆盖主模型组件;或主模型改了设计后,确认哪些框架需要重建。注意两点:check 只比较框图、块参数与掩码参数,不含端口选项、编译属性、隐藏参数与 Model 块数据记录参数;若组件含 Simscape Solver Configuration 块,由于它受组件外部 Simscape 块影响,check 永远显示组件有差异。

  • 重建(Rebuild):在框架中选Rebuild Harness,让框架反映主模型最新状态;除更新 CUT 与块参数外,还会重建信号转换子系统(原来没有则补上)。重建可能断开信号线(例如主模型信号名变了),断线后需手动把线接回 CUT 或转换子系统。

  • 推送(Push):在框架中改完系统后选Push Changes,把框架改动写回主模型——这会覆盖主模型中的组件。

2. 操作步骤 / 工作流

更改既有框架的同步模式:

  1. 关闭测试框架;

  2. 在主模型中单击块上或画布上的框架徽标;

  3. 在框架缩略图预览中单击 Harness operations 图标,选Properties;

  4. 在属性对话框中改 Synchronization Mode。命令行方式:sltest.harness.set设SynchronizationMode属性。

典型核对—推送闭环:打开框架 → 在框架中改组件/参数 → Check Harness 看差异 → 满意则 Push Changes 写回主模型,或不满意则 Rebuild Harness 从主模型刷新。

3. 示例
% sltestCar 示例:在 ShiftLogic_InportHarness 中改掩码参数并推送回主模型 open_system('sltestCar'); sltest.harness.open('sltestCar/shift_logic','ShiftLogic_InportHarness'); % 方式一:双击 shift_logic 子系统,把 "Delay before gear change (tick)" 改为 4 % 方式二:命令行改掩码参数 shiftLogicMask = Simulink.Mask.get('ShiftLogic_InportHarness/shift_logic'); shiftLogicMask.Parameters.Value = '4'; % 检查框架与主模型是否同步 [comparison,details] = sltest.harness.check('sltestCar/shift_logic', ... 'ShiftLogic_InportHarness'); % 返回 comparison=0,details.reason 提示:框图内容一致,但块或掩码参数不同 % 推送回主模型(界面:Harness 选项卡 > Push Changes) sltest.harness.push('sltestCar/shift_logic','ShiftLogic_InportHarness') % 更新两端后重新检查 set_param('sltestCar','SimulationCommand','update'); set_param('ShiftLogic_InportHarness','SimulationCommand','update'); [comparison,details] = sltest.harness.check('sltestCar/shift_logic', ... 'ShiftLogic_InportHarness'); % 返回 comparison=1,details.reason:二者校验和相同 close_system('sltestCar',0);

4. 要点与注意事项
  • 想试验多种组件设计而不污染主模型,选"仅推送与重建时同步",并养成改前先 Check 的习惯。

  • Push Changes 是覆盖操作,执行前务必确认框架中的改动就是要保留的设计。

  • Rebuild 可能断开信号线,重建后要检查连线;SIL/PIL 框架建议开 Rebuild harness on open 保持代码新鲜。

  • sltest.harness.check不报端口选项、编译属性等差异,Simscape Solver Configuration 块永远报差异,不要据此误判。

  • 配置集与模型工作区数据是否同步,由 Update Configuration Parameters and Model Workspace data on rebuild 单独控制。

  • 框架打开时主模型一般仍可仿真,但一次只能开一个框架。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进