同步测试框架和模型之间的更改
测试框架提供了一个隔离的环境来测试设计变更。您可以将更改从测试框架到主模型,或者将更改从主模型同步到测试框架。同步包括以下模型元素:
被测组件 (CUT) — CUT 模块以及 CUT 中的模块、信号和其他实体。
模块参数——与模块相关的参数的值。要查看某个模块的参数,请右键单击该模块并从上下文菜单中选择模块参数。
可选地,模型或测试框架的活动配置集。有关配置集的信息,请参阅 管理模型的配置集
要在测试框架和主模型之间同步活动配置集和模型工作区参数,请在“创建测试框架”对话框的“高级属性”选项卡中选择“重构时更新配置参数和模型工作区数据”。
您不需要同步基础工作区数据,因为它可供测试框架和主模型使用。子系统模型测试框架始终与其底层模型同步。
为新测试框架设置同步
当你创建测试框架时,你可以指定何时将测试框架中的变更与主模型进行同步。同步可以自动或手动进行。如果您计划在测试框架中尝试不同的组件设计,请使用手动同步来避免覆盖主模型中的组件。根据框架中被测组件 (CUT) 的类型,您可以从不同的同步类型中进行选择。这些选项可在“创建测试框架”对话框中使用,也可以通过使用 sltest.harness.create
的 SynchronizationMode
属性来使用。
对于所有同步类型,即使测试框架已打开,您也可以仿真主模型。您还可以为当前测试的组件及其嵌套子系统之外的模型组件创建框架。您可以同时打开同一模型拥有的多个框架。
注意
根据打开的是一个测试框架还是多个测试框架,同步会有所不同。有关信息请参阅本表的描述列。
表中的锁定信息指示在测试框架打开时,是否可以更改模型、框架,或者模型或框架中的 CUT。
同步类型 | 描述 | 可用性 | 框架打开时模型、切割和框架锁定 |
---|---|---|---|
在框架打开和关闭时同步 | 当您仅打开一个测试框架时,框架组件和参数将从模型同步到测试框架。当您关闭唯一打开的测试框架时,相同的元素将从框架同步到模型。 当您打开多个框架时,将从模型到框架进行同步,但如果有任何框架保持打开状态,则关闭框架时不会发生同步。 | 可以用来:
不适用于:
| 当仅打开一个框架时,主模型中的 CUT 被解锁,但子系统中的 CUT 被锁定。框架中的子系统 CUT 已解锁。 当打开多个框架时,模型框架、子系统框架、库框架和 MATLAB 功能中的 CUT 将被锁定。 |
在框架打开时同步 | 当您打开一个或多个测试框架时,框架组件和参数会从模型同步到测试框架。 | 可以用来:
不适用于:
| 当仅打开一个框架时,主模型和框架中的 CUT 将被解锁,但主模型和框架中子系统中的 CUT 将被锁定。 当打开多个框架时,模型框架、子系统框架、库框架和 MATLAB 功能中的 CUT 将被锁定。 |
仅在推送和重构期间同步 | 当仅打开一个框架时,点击推送更改或重新构建框架时会发生同步。单击推送可将测试框架的更改同步到模型。单击重新编译可将更改从模型同步到测试框架。 当打开多个框架时,仅当您重建模型时才会发生同步。不支持推送同步。 | 可以用来:
不适用于:
| 当打开一个或多个框架时,主模型、框架以及模型和框架中的所有类型的 CUT(包括子系统)都将被解锁。 |
仅在重构间同步 | 当一个或多个框架处于打开状态时,仅当您点击重建框架时才会发生同步。变更从模型同步到测试框架。 | 可以用来:
不适用于:
| 主模型、框架以及模型中的所有类型的 CUT 均已解锁。框架中所有类型的 CUT 均已解锁,但 SIL/PIL 验证模式组件除外,这些组件已锁定并被屏蔽。 |
注意
如果您为 Model 模块在软件在环(SIL) 或处理器在环(PIL) 模式下创建测试框架,则测试框架中的模块模式将分别更改为 SIL 或 PIL。当您关闭测试框架时,此模式不会更新到主模型。
如果您在测试框架中使用 SIL 或 PIL 模块,请考虑将测试框架设置为每次打开时重建。定期重建测试框架可以使 SIL/PIL 模块引用的生成代码作为主模型的反映。
更改现有测试框架的同步
要更改测试框架同步模式:
关闭测试框架。
在主模型中,点击模块或 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);
更新测试套件中的 Mask 参数
1.打开测试框架。单击 shift_logic
图上的徽章并选择 ShiftLogic_InportHarness
测试框架。仅当您推送到主模型或从主模型重建时,测试框架才会设置为同步。
要从命令行打开测试框架,请使用:
chart = "sf_car/shift_logic"; harness = "ShiftLogic_InportHarness"; sltest.harness.open(chart,harness);
2.双击 shift_logic
子系统。对于换档前延迟(勾选),输入 4
并点击确定。
要从命令行更改值,请使用:
shiftLogicMask = Simulink.Mask.get("ShiftLogic_InportHarness/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.在测试框架的 Harness 选项卡上,点击 Push Changes。
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.'
close_system(model,0);
另请参阅
sltest.harness.check
| sltest.harness.push
| sltest.harness.rebuild