How to programatically send Update Diagram command to Simulink

I stumble upon a problem in my project, there's one GUI that controls the simulation and that GUI changes variables on MATLAB workspace, the same variables are used in the simulation but simulink doesn't read the new values unless the simulation stops and starts or the Update Diagram command is issued, so the question is how to force simulink to Update Diagram in my code?
Already tried:
eval([SimFileName '([],[],[],''update'')' ]);
but it doesn't do what I want.
Meanwhile I found one solution but it's using QuaRC MATLAB Functions, would be better to have something withing simulink functions.
qc_update_model
Any help is welcome, thanks

댓글 수: 3

Are you using set_param() do do the updates?
No, the GUI just changes values of the variables on the workspace and the simulation files and other tools (to calculate performance parameters) use those variables.
I want to change the parameters of a block when the model is running and simultaneously see the changes in the output.
For eg.I have a sine block connected to a Scope.and when i start the simulation.I want to change the frequency of the sine wave and see the corresponding frequency changed wave on the scope output.I want to do this as i want to see how my model behaves for different frequencies...HOw do i do this???

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

 채택된 답변

Fangjun Jiang
Fangjun Jiang 2011년 7월 15일

5 개 추천

Use set_param('sys', 'SimulationCommand', 'cmd')?
where 'sys' is the name of the system and 'cmd' is 'start', 'stop', 'pause', 'continue', 'update', or 'WriteDataLogs'

댓글 수: 3

Thank you Fangjun, your solution works just fine, I should have known it but after one entire day doing code my brain isn't working at 100% anymore :)
I want to change the parameters of a block when the model is running and simultaneously see the changes in the output.
For eg.I have a sine block connected to a Scope.and when i start the simulation.I want to change the frequency of the sine wave and see the corresponding frequency changed wave on the scope output.I want to do this as i want to see how my model behaves for different frequencies...HOw do i do this???
dc
dc 2023년 6월 6일
이동: Fangjun Jiang 2023년 6월 13일
that's what i need,thanks

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

추가 답변 (2개)

Noam Greenboim
Noam Greenboim 2017년 7월 11일

4 개 추천

set_param(bdroot,'SimulationCommand','Update')

댓글 수: 2

This worked for me. Thanks!
Instead of using bdroot,
mdlName = MotorCtrl.slx
set_param(mdlName,'SimulationCommand','Update')
This command is equivalent to programatically running Ctrl+D on MotorCtrl.slx model.

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

Rick Rosson
Rick Rosson 2011년 7월 15일
Hi Paulo,
Although not ideal, the following line of code should work:
Simulink.BlockDiagram.getSampleTimes(SimFileName);
Make sure that the value of SimFileName excludes the .mdl extension, and that the file is already open at the time of the call.
HTH.
Rick

댓글 수: 1

Thanks Rick, I tested that code but it didn't work, thank you anyway for trying :)

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

카테고리

도움말 센터File Exchange에서 Programmatic Model Editing에 대해 자세히 알아보기

제품

질문:

2011년 7월 15일

댓글:

2023년 10월 29일

Community Treasure Hunt

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

Start Hunting!

Translated by