Tune Parameter Structures by Using MATLAB Language
To reduce the number of workspace variables you must maintain and avoid name conflicts, you can group closely related parameters into structures. See Organize Related Block Parameter Definitions in Structures.
In this example, the initial model slrt_ex_osc
has four parameters that determine the shape of the output waveform.
Create Parameter Structure
This procedure groups some closely related parameters into structures.
1. Open model slrt_ex_osc and save a copy to a working folder.
2. To create a parameter structure, in the Command Window, enter:
kp = struct(... 'sg_freq', 20, ... 'g2_gain',1000^2, ... 'g1_gain', 2*0.2*1000, ... 'g_gain',1000^2)
kp = struct with fields: sg_freq: 20 g2_gain: 1000000 g1_gain: 400 g_gain: 1000000
3. To make the parameter structure tunable on the target computer:
spkp = Simulink.Parameter(kp);
spkp.StorageClass = 'ExportedGlobal';
spkp.Value
ans = struct with fields: sg_freq: 20 g2_gain: 1000000 g1_gain: 400 g_gain: 1000000
Save and Load Parameter Structure
To save the parameter structure spkp for later use, type:
save 'slrt_ex_osc_struct.mat', 'spkp';
To load the parameter structure when you open the model, add a load command to the PreLoadFcn callback. To remove the parameter structure from the workspace when you close the model, add a clear command to the CloseFcn callback. For more information, see Model Callbacks.
Replace Block Parameters with Parameter Structure Fields
1. In the Signal Generator block, replace the value of parameter Frequency with spkp.sg_freq.
2. In the Gain block, replace the value of parameter Gain with spkp.g_gain.
3. In the Gain1 block, replace the value of parameter Gain with spkp.g1_gain.
4. In the Gain2 block, replace the value of parameter Gain with spkp.g2_gain.
Tune Parameters in a Parameter Structure
If you have not completed the steps in Create Parameter Structure, Save and Load Parameter Structure, and Replace Block Parameters with Parameter Structure Fields, you can start by using the completed model.
1. Create a Target object for the default target computer and connect to the target computer. In the MATLAB Command Window, type:
tg = slrealtime; connect(tg); % *2.* To open the model, in the MATLAB Command Window, type: model = 'slrt_ex_osc_struct'; open_system(model); load('slrt_ex_osc_struct.mat'); modelSTF = getSTFName(tg); set_param(model,"SystemTargetFile",modelSTF);
3. Mark for logging the signal to the Scope block.
4. Build and download the model to the target computer.
evalc('slbuild(model)');
load(tg,model);
5. Set stop time to inf.
setStopTime(tg,inf);
6. Sweep the Gain value of the Gain1 block from 200 to 800.
start(tg); for g = 200 : 200 : 800 setparam(tg, '', 'spkp.g1_gain', g); pause(1); end stop(tg);
7. View the signals sent to the Scope block in the Simulation Data Inspector.
Simulink.sdi.view;
Close All Open Files
bdclose(model);