This example shows the features available in Simulink® Control Design™ for linearizing models containing references to other models with a Model block.
The model scdspeed_ctrlloop
is a componentized version of the model scdspeedctrl
. In this model, the engine speed model is a component represented in the model scdspeed_plantref
which is referenced using a Model block. Open the model.
topmdl = 'scdspeed_ctrlloop';
open_system(topmdl)
By default, the Engine Model block is set to accelerator simulation mode, as indicated by the black triangles at the corners of the Model block. Linearizing the model with this block set to accelerator simulation mode numerically perturbs the entire Engine Model block. The accuracy of this linearization is very sensitive to the blocks within the Engine model. In particular, the variable transport delay block is very problematic.
To achieve an accurate linearization, set the Model block to normal simulation mode to allow the block-by-block linearization of the referenced model.
set_param('scdspeed_ctrlloop/Engine Model','SimulationMode','Normal')
The corners of the Model block are now white triangles, indicating that its simulation mode is set to normal.
Linearize the model between the speed reference signal and the speed output, and plot the resulting step response.
io(1) = linio('scdspeed_ctrlloop/Speed Reference',1,'input'); io(2) = linio('scdspeed_ctrlloop/Speed Output',1,'output'); sys_normal = linearize(topmdl,io); step(sys_normal)
Close the Simulink model.
bdclose('scdspeed_ctrlloop')
Another benefit of switching the model reference to normal mode simulation is that you can take advantage of the exact delay representations.
For more information on linearizing models with delays see the example Linearization of Models with Delays.