Main Content

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, Replace Block Parameters with Parameter Structure Fields, and Save and Load Parameter Structure, 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("all");

Related Topics