Setting Simulink parameter values from script
28 views (last 30 days)
Show older comments
Simon Aldworth
on 25 Oct 2018
Commented: Fangjun Jiang
on 29 Oct 2018
Until recently I was running a Simulink model from my main script. The Simulink model uses variables in the blocks and would run perfectly when I used statements such as:
t_step = Simulink.Parameter(1);
I am now running the model from within a gui script and I can't get it to run. My first thought was that there were no Simulink parameters in the model so I put them in, thinking that these had to be there for the above statements to work. This didn't work, however.
I then tried putting the variables into a struct using:
modelparams.t_step = Simulink.Parameter(1);
and then:
sim('pitch_bounce_model',modelparams);
This didn't work either.
Then I tried:
set_param('pitch_bounce_model','t_step',t_step);
And received the response, "block_diagram does not have a parameter named 't_step'".
It is evident that I don't know what I'm doing, so:
1. Several blocks use the same variable so do I need to set each block parameter one at a time, or can I create a Simulink parameter from my GUI script?
2. Do I need the Simulink parameter to pre-exist within the model?
3. Previous responses to other questions suggest that relying on the base workspace to store variables is not good practice, but now I read that when running Simulink models this is the norm. What should I do in this case?
4. Why has it stopped running properly just because I moved my code into the gui script?
Many thanks,
Simon.
0 Comments
Accepted Answer
Fangjun Jiang
on 25 Oct 2018
4. Why has it stopped running properly just because I moved my code into the gui script?
When you run "t_step = Simulink.Parameter(1);" in your GUI script, it created the variable "t_step" in your GUI callback function workspace, not the base workspace.'
There are many ways to solve your problem. The most direct way is to use assignin() function.
4 Comments
Fangjun Jiang
on 29 Oct 2018
The function assignin() exists for a reason. For occasional use, I would not rule it out. It brings convenience and wouldn't slow down process in most of the cases. In any case, Simulink data dictionary is a better way to go. It separates the data from the software and makes them both become more manageable.
More Answers (1)
Sara Nadeau
on 26 Oct 2018
Hi Simon!
Have you considered using Dashboard blocks to interface with your Simulink model? They offer similar functionalities to a MATLAB GUI with easier connectivity to Simulink models.
I am not sure what your GUI and model look like or what version of MATLAB/Simulink you're working with. Apologies if this suggestion isn't helpful.
See Also
Categories
Find more on Model, Block, and Port Callbacks in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!