Synchronize Changes Between Test Harness and Model
A test harness provides an isolated environment to test design changes. You can synchronize changes from the test harness to the main model, or from the main model to the test harness. Synchronization includes these model elements:
Component under test (CUT) — CUT block and blocks, signals, and other entities in the CUT.
Block parameters — Values of parameters associated with the block. To see the parameters of a block, right-click on the block and select Block Parameters from the context menu.
Optionally, the active configuration set of the model or test harness. See Manage Configuration Sets for a Model for information on configuration sets
To synchronize the active configuration set and model workspace parameters between the test harness and main model, select Update Configuration Parameters and Model Workspace data on rebuild in the Advanced Properties tab of the Create Test Harness dialog box.
You do not need to synchronize base workspace data because it is available to both the test harness and main model. Subsystem model test harnesses always sync with their underlying models.
Set Synchronization for a New Test Harness
When you create a test harness, you specify when changes in the test harness are
synchronized with the main model. Synchronization can occur automatically or manually.
If you plan to try different component designs in the test harness, use manual
synchronization to avoid overwriting the component in the main model. Depending on the
type of component under test (CUT) in your harness, you can select from different
synchronization types. These options are available in the Create Test Harness dialog box
or by using the SynchronizationMode
property of sltest.harness.create
.
For all synchronization types, you can simulate the main model even if a test harness is open. You can also create harnesses for model components other than the current component under test and its nested subsystems. You can have more than one harness owned by the same model open at the same time.
Note
Synchronization copies subsystems from the main model to the subsystem test harness model and from the subsystem test harness model to the main model. Simulink® block copy callbacks run both when the main model synchronizes to the subsystem test harness and when the subsystem test harness synchronizes to the main model. Synchronization for subsystems does not synchronize code or state mappings.
If you create a test harness in software-in-the-loop (SIL) or processor-in-the-loop (PIL) mode for a Model block, the block mode in the test harness is changed to SIL or PIL, respectively. This mode is not updated to the main model when you close the test harness.
If you use a SIL or PIL block in the test harness, consider setting the test harness to rebuild every time it opens. Regularly rebuilding the test harness keeps the generated code referenced by the SIL/PIL block as a reflection of the main model.
The locking information in the table indicates whether you can change the model, harness, or CUT in the model or harness when the test harness is open. Synchronization differs depending on whether one test harness or more than one test harness is open. See the Description column of this table for information.
Synchronization Type | Description | Availability | Model, CUT, and Harness Locking When Harness Is Open |
---|---|---|---|
Synchronize on harness open and close | When you open only one test harness, the harness components and parameters synchronize from the model to the test harness. When you close the only open test harness, the same elements synchronize from the harness to the model. When you open multiple harnesses, synchronization occurs from the model to the harness, but if any harnesses remain open, synchronization does not occur when you close a harness. | Available for:
Not available for:
| When only one harness is open, CUTs in the main model are unlocked, but CUTs in subsystems are locked.. Subsystem CUTs in the harness are unlocked. When more than one harness is open, the CUTs in model harnesses, subsystem harnesses, library harnesses, and MATLAB functions are locked. |
Synchronize on harness open | When you open one or more test harnesses, the harness components and parameters synchronize from the model to the test harness. | Available for:
Not available for:
| When only one harness is open, CUTs in the main model and harness are unlocked, but CUTs in subsystems in the main model and harness are locked. When more than one harness is open, the CUTs in model harnesses, subsystem harnesses, library harnesses, and MATLAB functions are locked. |
Synchronize only during push and rebuild | When only one harness is open, synchronization occurs when you click Push Changes or Rebuild Harness. Clicking Push synchronizes the changes from the test harness to the model. Clicking Rebuild synchronizes changes the from the model to the test harness. When more than one harness is open, synchronization occurs only when you rebuild the model. Push synchronization is not supported. | Available for:
Not available for:
| When one or more harnesses are open, the main model, harness, and all types of CUTs in the model and harness, including subsystems, are unlocked. |
Synchronize only during rebuild | When one or more harnesses are open, synchronization occurs only when you click Rebuild Harness. Changes synchronize from the model to the test harness. | Available for:
Not available for:
| The main model, harness, and all types of CUTs in the model are unlocked. All types of CUTs in the harness are unlocked, except SIL/PIL verification mode components, which are locked and masked. |
Change Synchronization of an Existing Test Harness
To change a test harness synchronization mode:
Close the test harness.
In the main model, click the harness badge on the block or the Simulink canvas.
In the test harness thumbnail preview, click the Harness operations icon and select Properties.
Change the Synchronization Mode in the properties dialog box.
If you use the command line, set the SynchronizationMode
property
with sltest.harness.set
.
Synchronize Configuration Set and Model Workspace Data
To synchronize the active configuration set and workspace parameters between the test harness and main model, select Update Configuration Parameters and Model Workspace data on rebuild in the harness creation or harness properties dialog box.
Check for Unsynchronized Component Differences
If your test harness does not synchronize changes, you can check for unsynchronized component differences between the test harness and main model. Checking for unsynchronized differences can be useful if:
You are making tentative design changes in the test harness and want to check that the main model component is not overwritten.
You have made design changes to the main model and want to check which test harnesses must be rebuilt.
From the test harness window, select Check Harness to check for
differences. If the component differs, you can push changes from the test harness to the
main model, or rebuild the test harness from the main model. Also see the sltest.harness.check
function.
Consider these conditions when checking for unsynchronized differences:
sltest.harness.check
only includes the block diagram, block parameters, and mask parameters in the comparison between the test harness and main model. Port options, compiled attributes, hidden parameters, and Model block data logging parameters are not included in the comparison.If the component contains a Simscape™ Solver Configuration block, the check result always shows that the component differs between the test harness and main model. The Solver Configuration block is affected by Simscape blocks outside the component, and therefore always differs between the test harness and main model.
Rebuild a Test Harness
Rebuild a test harness to reflect the latest state of the main model. In the test harness, select Rebuild Harness. In addition to updating the component under test and block parameters, this operation rebuilds harness conversion subsystems. If the test harness does not have conversion subsystems, rebuilding adds them.
Rebuilding can disconnect signal lines. For example, if signal names changed in the
main model, signal lines in the test harness can be disconnected. If lines are
disconnected, reconnect signal lines to the component under test or conversion
subsystems. If you specified to use existing generated code for a SIL/PIL subsystem
using sltest.harness.create
or sltest.harness.set
, the
harness rebuild uses that code instead of regenerating it.
For more information, see Create or Import Test Harnesses and Select Properties
and sltest.harness.rebuild
.
Push Changes from Test Harness to Model
After changing your system in the test harness, if only one harness is open, you can push changes to the main model. In the test harness, select Push Changes. This process overwrites the component in the main model. Pushing changes to the model is not supported when more than one harness is open.
Check Component and Push Parameter to Main Model
This example shows a basic workflow of updating a parameter in a test harness, checking the synchronization between the test harness and main model, and pushing the parameter change from the test harness to the main model.
This example also includes programmatic steps.
Open the model sf_car
. The model includes a transmission shift controller algorithm and simplified powertrain and vehicle dynamics.
model = "sf_car";
open_system(model);
Update the Mask Parameter in the Test Harness
1. Open the test harness. Click the badge on the shift_logic
chart and select the ShiftLogic_InportHarness
test harness. The test harness is set to synchronize only when you push to or rebuild from the main model.
To open the test harness from the command line, use:
chart = "sf_car/shift_logic"; harness = "TestDownshiftPointsHarness"; sltest.harness.open(chart,harness);
2. Double-click the shift_logic
subsystem. For Delay before gear change (tick), enter 4
and click OK.
To change the value from the command line, use:
shiftLogicMask = Simulink.Mask.get("TestDownshiftPointsHarness/shift_logic"); maskParamValue = shiftLogicMask.Parameters.Value; shiftLogicMask.Parameters.Value = "4";
3. Check the synchronization between the test harness and the main model. At the command line, run the sltest.harness.check
function.
[comparison,details] = sltest.harness.check(chart,harness);
The results show that the component under test is different in the test harness due to the updated mask parameter.
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.'
Update the Parameter to the Main Model
1. In the test harness, on the Harness tab, click Push Changes.
2. In the main model, double-click the shift_logic subsystem. The parameter value is updated.
To push the change using the command line, use:
sltest.harness.push(chart,harness)
3. Update the main model and test harness.
set_param(model,SimulationCommand="update"); set_param(harness,SimulationCommand="update");
4. Re-check the synchronization between the test harness and the main model by running the sltest.harness.check
function a second time.
[comparison,details] = sltest.harness.check(chart,harness);
The results show that the component under test is the same between the test harness and the main model.
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 the model without resaving it.
close_system(model,0);
See Also
sltest.harness.check
| sltest.harness.push
| sltest.harness.rebuild