测试框架与模型同步
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. 操作步骤 / 工作流
更改既有框架的同步模式:
关闭测试框架;
在主模型中单击块上或画布上的框架徽标;
在框架缩略图预览中单击 Harness operations 图标,选Properties;
在属性对话框中改 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 单独控制。
框架打开时主模型一般仍可仿真,但一次只能开一个框架。