Refine, Test, and Debug a Subsystem
This example shows how to refine and test a controller subsystem using a test harness. Test harnesses provide a development and testing environment that leaves the main model design intact. You can test a functional unit of your model in isolation without altering the main model. In the example, the main model is a controller-plant model of an air conditioning/heat pump unit. The controller must operate according to several requirements.
Open the Model
In the example model:
The controller accepts the room temperature and specified temperature inputs.
The controller output is a bus with signals that control the fan, heat pump, and the direction of the heat pump (heat or cool).
The plant accepts the control bus. The heat pump and the fan signals are Boolean, and the heat pump direction is specified by +1 for cooling and -1 for heating.
Temperature Condition States
The test covers four temperature conditions. Each condition corresponds to one operating state with fan, pump, and pump direction signal outputs.
Create a Harness for the Controller
1. Right-click the
Controller subsystem and select Test Harness > Create for ‘Controller’.
2. Set the harness properties in the Basic Properties tab:
Clear Save test harness externally
Sources and Sinks:
Clear Add separate assessment block
Select Open harness after creation
3. Click OK to create the harness.
Inspect and Refine the Controller
1. In the test harness, double-click Controller to open the subsystem.
2. Connect the chart to the Inport blocks.
3. In the test harness, click Save to save the test harness and model.
Add Test Inputs and Test the Controller
1. Navigate to the top level of
2. Create a test input for the harness with a constant
Tset and a time-varying
Troom. Connect a Constant block to the
Tset input and set the value to
3. Add a Sine Wave block to the harness model to simulate a temperature signal. Connect the Sine Wave block to the conversion subsystem input
4. Double-click the Sine Wave block and set the parameters:
Phase (rad): 0
Sample time: 1
Select Interpret vector parameters as 1–D
5. Connect Inport blocks to the Data Store Write inputs.
6. Click Model Settings to open the Configuration Parameters dialog box, in the Data Import/Export pane, select Input and enter
u is an existing structure in the MATLAB base workspace. Then, click Apply.
7. In the Solver pane, set Stop time to
3600. Click OK.
8. Open the Scope in the test harness and change the layout to show three plots.
9. Click Run to simulate.
Debug the Controller
1. Observe that the controller output,
1 during the
IDLE condition where
|Troom - Tset| < DeltaT_fan. This is a bug because
fan_cmd should be
fan_cmd control output must be changed for
2. In the harness model, open the Controller subsystem.
3. Open controller_chart.
4. In the
fan_cmd is set to return
fan_cmd to return
IDLE is now:
fan_cmd = 0;
pump_cmd = 0;
pump_dir = 0;
5. Simulate the harness model again and observe the outputs.
fan_cmd now meets the requirement to equal