Main Content

Change Subsystem Reference Component Dynamically Using InitFcn

This example shows how to dynamically change the subsystem reference component using the Initialization Function. InitFcn is used to change the implementation of the model without having to change the contents. This example model simulates the front and rear wipers of a vehicle. The front wiper is sensor-based and it senses rain and fog. The rear wiper is controlled by the driver.

Explore the Model

Inputs: The wipers are turned on during rain or fog. Double-click Turn on Fog Sensor or Turn on Rain Sensor component on the top left corner of the model to select the type of input. Based on the selection, the sensor input variable SensorInput is created in the model workspace.

Wiper speed controller: During simulation the InitFcn is executed and calls the switchSensor function. This function reads the variable SensorInput from the model workspace and changes the subsystem to slexRainSensor or slexFogSensor according to your input selection. The subsystem reference component (Rain or Fog) converts the input voltage into speed levels low, medium, and high. The wiper speed controller converts the front and rear wiper speed levels into the appropriate speed in cycles per second.

Use this code in the InitFcn call back

function wiperController(bd, option)
 switch option
     case 'PostLoad'
         createWiperConstants(bd);
     case 'Init'
         switchSensor(bd);
     otherwise
 end
end
function switchSensor(bd)
    mws = get_param(bdroot, 'modelworkspace');
    si = mws.getVariable('SensorInput');
    blockpath = [bd '/SensorBasedSpeedController'];
    if strcmp(si,'Fog')
        set_param(blockpath,'ReferencedSubsystem','slexFogSensor');
    elseif strcmp(si,'Rain')
        set_param(blockpath,'ReferencedSubsystem','slexRainSensor');
    end
end

See Also

Initialization Function