필터 지우기
필터 지우기

Setting Simulink parameter values from script

조회 수: 20 (최근 30일)
Simon Aldworth
Simon Aldworth 2018년 10월 25일
댓글: Fangjun Jiang 2018년 10월 29일
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.

채택된 답변

Fangjun Jiang
Fangjun Jiang 2018년 10월 25일
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
Simon Aldworth
Simon Aldworth 2018년 10월 29일
Hi Fangjun,
Thanks for your response.
I have chosen to use a data dictionary for now. It remains to be seen whether it was a good choice though.
As far as the idea of modifying variable values directly in the model workspace is concerned, it would seem to be a fairly straight forward task and is tempting. However, it uses assignin, and this seems to be a function that is strongly opposed, despite being proposed in the Matlab documentation.
I'm not sure if there are times when assignin is acceptable but there is so much written in criticism of its use that I feel I should avoid it.
Regards, Simon.
Fangjun Jiang
Fangjun Jiang 2018년 10월 29일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Sara Nadeau
Sara Nadeau 2018년 10월 26일
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.
  댓글 수: 1
Simon Aldworth
Simon Aldworth 2018년 10월 29일
Hi Sara,
I hadn't, but maybe I will in the future. I'm a long way down the line with my GUI now so I'll stick with it.
Thanks anyway.
Regards.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Simulink Functions에 대해 자세히 알아보기

제품


릴리스

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by