How do I tune a parameter in an accelerated model reference while the simulation is running?

2 views (last 30 days)
I have a parameter in a model reference that I would like to tune while the simulation is running in accelerator mode. How do I do this?

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 16 Sep 2024
There are many ways to tune a parameter in accelerated model reference while the simulation is running. Consider the following model and model reference.
Tune with Simulation Object (24a and later)
The easiest way to tune a parameter while simulating is to use the Simulation Object introduced in 24a.
set_param(mdl,'SimulationMode','acc') sl = simulation('model'); gainRM = 1; sl.start pause(1) sl.setVariable('gainRM',2) pause(1) sl.stop; sl.SimulationOutput.yout{1}.Values.Data(end) %should be 2
Tune in Normal Mode (No Update)
In normal mode you can tune the variable directly if you use set_param and it will work.
set_param(mdl,'SimulationMode','normal') gainRM = 1; set_param(mdl,'SimulationCommand','start'); pause(1) gainRM = 2; set_param('Ref_Mod/Constant','Value','gainRM'); pause(1); set_param(mdl,'SimulationCommand','stop'); out.yout{1}.Values.Data(end) %should be 2
Tune in Accel Mode (With Update)
In accelerator mode, you need to trigger an update for the change to propagate.
set_param(mdl,'SimulationMode','acc') gainRM = 1; set_param(mdl,'SimulationCommand','start'); pause(1) gainRM = 2; set_param(mdl,'SimulationCommand','update'); pause(1); set_param(mdl,'SimulationCommand','stop'); out.yout{1}.Values.Data(end) %should be 2
Tune in Accel Mode (With Model Arguments)
If you do not want to trigger an update, make the parameter a model then you do not need to trigger an update.
set_param(mdl,'SimulationMode','acc') gainRM = 1; set_param(mdl,'SimulationCommand','start'); pause(1) gainRM = 2; instSpecParams = get_param('model/Model1','InstanceParameters'); set_param('model/Model1','InstanceParameters',instSpecParams); pause(1); set_param(mdl,'SimulationCommand','stop'); out.yout{2}.Values.Data(end) %should be 2

More Answers (0)

Tags

No tags entered yet.

Products


Release

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!