Different simulation behavior if simulation is called from within function vs. from script

6 views (last 30 days)
Elsa Bunz
Elsa Bunz on 4 Nov 2021
Commented: Elsa Bunz on 30 Nov 2021
Hello,
I have a simulink model which uses a variety of parameters from the workspace. If I execute the exact same piece of code (initialization of parameters+ run simulation) from within a function vs. from a script the simulation results are (slightly) different which leads to the simulation running into a stopping condition if called from the script, but finishing smoothly if called from within the function.
The two different pieces of code are like this:
params_val = goodRuns_all(ind_choosen,:);
%% Version 1 from script
parameters = params_val;
init_script;
MP = setParams(MP, 1, parameters(8), parameters(10), parameters(11), parameters(12), parameters(13));
simulation_length = 30;
options = simset('SrcWorkspace','current');
warning('off','all')
simOut = sim('model_name', [],options);
warning('on','all')
%% Version 2 with function call
simOut_func = runSim(params_val);
%% Function declaration
function simOut = runSim(parameters)
init_script;
MP = setParams(MP, 1, parameters(8), parameters(10), parameters(11), parameters(12), parameters(13));
simulation_length = 30;
options = simset('SrcWorkspace','current');
warning('off','all')
simOut = sim('model_name', [],options);
warning('on','all')
end
Also, if I first execute the code from the script and then (without a clear) run the function, also the simulation called from the function runs into a stopping condition whereas if I directly call the function it does not.
What could be the reason for the changed behavior?

Answers (1)

Steve Miller
Steve Miller on 17 Nov 2021
I believe the 'SrcWorkspace','current' is different if you call from within a function or a script.
See this answer.
--Steve
  1 Comment
Elsa Bunz
Elsa Bunz on 30 Nov 2021
Sorry for not responding and thanks a lot for your answer and time!
In the meantime I continued to search for the reason and actually the simulation results don't seem to be different but the difference comes from a delay before my stopping condition.
This is how that part (and the settings of the delay) of my model looks like:
The scope for the call from the script looks as follows:
whereas for the function call it is like this:
Therefore, I guess somehow the sampling time seems to be affected causing this effect? Something in my script call seems to influence this, because if I first run the script and then the function without a clear inbetween then also the function version runs into the stopping condition. I didn't find where exactly it comes from, but I just solved the problem by removing the delay.
However, if you have any hint on where this could come from I'd be very happy to hear it!

Sign in to comment.

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by