How do I tune a parameter in an accelerated model reference while the simulation is running?
2 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
MathWorks Support Team
il 1 Lug 2024
Modificato: MathWorks Support Team
il 16 Set 2024
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?
Risposta accettata
MathWorks Support Team
il 16 Set 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
0 Commenti
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Classical Control Design in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!