同步测试框架和模型之间的更改
测试框架提供了一个隔离的环境来测试设计变更。您可以将更改从测试框架到主模型,或者将更改从主模型同步到测试框架。同步包括以下模型元素:
被测组件 (CUT) - CUT 模块以及 CUT 中的模块、信号和其他实体。
模块参数 - 与模块相关的参数的值。要查看某个模块的参数,请右键点击该模块并从上下文菜单中选择模块参数。
可选地,模型或测试框架的活动配置集。有关配置集的信息,请参阅 管理模型的配置集
要在测试框架和主模型之间同步活动配置集和模型工作区参数,请在“创建测试框架”对话框的高级属性选项卡中选择重构时更新配置参数和模型工作区数据。
您不需要同步基础工作区数据,因为它可供测试框架和主模型使用。子系统模型测试框架始终与其底层模型同步。
为新测试框架设置同步
当您创建测试框架时,您可以指定何时将测试框架中的变更与主模型进行同步。同步可以自动或手动进行。如果您计划在测试框架中尝试不同的组件设计,请使用手动同步来避免覆盖主模型中的组件。
对于所有同步类型,即使测试框架已打开,您也可以仿真主模型。您还可以为当前测试的组件及其嵌套子系统之外的模型组件创建框架。您可以同时打开同一模型拥有的多个框架。
同步模式参数的设置为:
在框架打开和关闭时同步 - 当您打开一个或多个测试框架时,模型与框架之间会进行同步。如果只有一个框架处于打开状态,当您关闭框架时,同步操作将从框架传递到模型。当多个框架打开时,若仅关闭其中一个,则不会与建模同步。
在框架打开时同步 - 当您打开一个或多个测试框架时,模型与框架之间会进行同步。
仅在推送和重构期间同步 - 当仅有一个测试框架打开时,点击工具条中的推送更改,将从测试框架同步到模型.当您点击重新构建框架时,模型与框架之间的同步操作将自动执行。当打开多个框架时,仅当您重建模型时才会发生同步。不支持推送同步。
仅在重构间同步 - 当一个或多个框架打开时,同步仅在您点击重建框架时发生。变更从模型同步到测试框架。
注意
同步将子系统从主模型复制到子系统测试框架模型,并从子系统测试框架模型复制到主模型。当主模型同步到子系统测试框架时以及当子系统测试框架同步到主模型时,Simulink® 模块复制回调都会运行。子系统的同步不会同步代码或状态映射。
如果您为 Model 模块在软件在环 (SIL) 或处理器在环 (PIL) 模式下创建测试框架,则测试框架中的模块模式将分别更改为 SIL 或 PIL。当您关闭测试框架时,此模式不会更新到主模型。
如果您在测试框架中使用 SIL 或 PIL 模块,请考虑将测试框架设置为每次打开时重建。定期重建测试框架可以使 SIL/PIL 模块引用的生成代码作为主模型的反映。
该表显示在每种同步类型下,当一个或多个测试框架处于打开状态时,是否可以更改模型、测试框架或模型中的 CUT.
同步类型 | 支持的模型元素 | 当一个框架打开时锁定 | 当多个框架同时打开时,系统将自动锁止。 |
---|---|---|---|
在框架打开和关闭时同步 | 可以用来:
不适用于:
| 以下元素已解锁:
以下元素已被锁定:
| 以下元素已解锁:
以下元素已被锁定:
|
在框架打开时同步 | 可以用来:
不适用于:
| 以下元素已解锁:
以下元素已被锁定:
| 以下元素已解锁:
以下元素已被锁定:
|
仅在推送和重构期间同步 | 可以用来:
不适用于:
| 以下元素已解锁:
| 以下元素已解锁:
以下元素已被锁定:
|
仅在重构间同步 | 可以用来:
不适用于:
| 以下元素已解锁:
以下元素已被锁定:
注意 仅在重构间同步不适用于子系统。 | 所有元素均已解锁。 |
更改现有测试框架的同步
要更改测试框架同步模式:
关闭测试框架。
在主模型中,点击模块或 Simulink 画布上的框架徽章。
在测试框架缩略图预览中,点击框架操作图标并选择属性。
在属性对话框中更改同步模式。
如果使用命令行,请使用 sltest.harness.set
设置 SynchronizationMode
属性。
同步配置集和模型工作区数据
要同步测试框架和主模型之间的活动配置集和工作区参数,请框架创建或框架属性对话框中选择重构时更新配置参数和模型工作区数据。
检查不同步的组件差异
如果您的测试框架没有同步更改,您可以检查测试框架和主模型之间不同步的组件差异。在以下情况下,检查不同步的差异会很有用:
您正在测试框架中进行初步的设计更改,并想检查主模型组件是否被覆盖。
您对主模型进行了设计更改,并想要检查必须重建哪些测试框架。
从测试框架窗口中,选择检查框架来检查差异。如果组件不同,您可以将更改从测试框架推送到主模型,或者从主模型重建测试框架。另请参阅 sltest.harness.check
函数。
检查不同步差异时请考虑以下情况:
sltest.harness.check
在测试框架和主模型的比较中仅包含模块图、模块参数和封装参数。端口选项、编译属性、隐藏参数和 Model 模块数据记录参数不包括在比较中。如果组件包含 Simscape™ Solver Configuration 模块,则检查结果始终显示该组件在测试框架和主模型之间有所不同。Solver Configuration 模块受到组件外部的 Simscape 模块的影响,因此测试框架和主模型之间总是存在差异。
重建测试框架
重建测试框架来反映主模型的最新状态。在测试框架中,选择重新构建框架。除了更新被测组件和模块参数之外,此操作还会重建框架转换子系统。如果测试框架没有转换子系统,则重建会添加它们。
重建可能会断开信号线。例如,如果主模型中的信号名称发生变化,则可以断开测试框架中的信号线。如果线路断开,请将信号线重新连接到被测组件或转换子系统。如果您指定使用 sltest.harness.create
或 sltest.harness.set
为 SIL/PIL 子系统使用现有的生成代码,则框架重建将使用该代码而不是重新生成它。
有关更多信息,请参阅创建或导入测试框架并选择属性和 sltest.harness.rebuild
。
将测试框架的变更推送到模型
在测试框架中更改系统后,如果仅打开一个框架,则可以将更改推送到主模型。在测试框架中,选择推送更改。此过程将覆盖主模型中的组件。当打开多个框架时,不支持将更改推送到模型。
检查组件并将参数推送至主模型
此示例展示了更新测试框架中的参数、检查测试框架和主模型之间的同步以及将参数更改从测试框架推送到主模型的基本工作流程。
此示例还包括编程步骤。
打开模型 sf_car
。该模型包括变速箱换档控制器算法和简化的动力系统和车辆动力学。
model = "sf_car";
open_system(model);
更新测试框架中的封装参数
1.打开测试框架。点击 shift_logic
图上的徽章并选择 ShiftLogic_InportHarness
测试框架。仅当您推送到主模型或从主模型重建时,测试框架才会设置为同步。
要从命令行打开测试框架,请使用:
chart = "sf_car/shift_logic"; harness = "TestDownshiftPointsHarness"; sltest.harness.open(chart,harness);
2.双击 shift_logic
子系统。对于换档前延迟(勾选),输入 4
并点击确定。
要从命令行更改值,请使用:
shiftLogicMask = Simulink.Mask.get("TestDownshiftPointsHarness/shift_logic"); maskParamValue = shiftLogicMask.Parameters.Value; shiftLogicMask.Parameters.Value = "4";
3.检查测试框架和主模型之间的同步性。在命令行中,运行 sltest.harness.check
函数。
[comparison,details] = sltest.harness.check(chart,harness);
结果表明,由于更新了封装参数,测试框架中的被测组件有所不同。
comparison
comparison = logical 0
details
details = struct with fields: overall: 0 contents: 1 reason: 'The contents of harnessed component and the contents of the component in the main model are same, but they differ in terms of block or mask parameters.'
将参数更新到主模型
1.在测试框架的框架选项卡上,点击推送更改。
2.在主模型中,双击 shift_logic 子系统。参数值已更新。
要使用命令行推送更改,请使用:
sltest.harness.push(chart,harness)
3.更新主要模型和测试框架。
set_param(model,SimulationCommand="update"); set_param(harness,SimulationCommand="update");
4.通过第二次运行 sltest.harness.check
函数重新检查测试框架和主模型之间的同步。
[comparison,details] = sltest.harness.check(chart,harness);
结果表明,测试框架与主模型的被测组件相同。
comparison
comparison = logical 1
details
details = struct with fields: overall: 1 contents: 1 reason: 'The checksum of the harnessed component and the component in the main model are same.'
5.关闭模型而不重新保存。
close_system(model,0);
另请参阅
sltest.harness.check
| sltest.harness.push
| sltest.harness.rebuild