Accessing workspace variables with parallel workers
29 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I have a simulink model that I would like to run a number of times over a range of 2 different variables. In my simulink model I was using model callbacks to take the 2 random initial variables and calculate the initial conditions to some of my integrators but this wasn't working and now I am doing this in the for loops. However when I run the simulation it throws an error saying "Warning: Error in the simulation was caused by missing variable 'q_e2b0'. Set "TransferBaseWorkspaceVariables" option to "on" to fix the issue." I tried setting that in setModelParameters but that doesn't work either.
Below is a pseduo code of my script:
num_sims = length(phi_range)*length(theta_range);
simIn(1:num_sims) = Simulink.SimulationInput('SixDOFSimulink');
sim_itr = 1;
for i = 1:length(phi_range)
for j = 1:length(theta_range)
phi0 = phi_range(i);
theta0 = theta_range(j);
% do calculations %
pos0 = %value%
v_b0 = %value%
w0 = %value%
q_e2b_0 = %value%
simIn(sim_itr) = simIn(sim_itr).setModelParameter('SimulationMode', 'normal', ...
'SaveTime', 'on', ...
'SaveOutput', 'on');
simIn(sim_itr) = simIn(sim_itr).setVariable('theta0', theta0, 'workspace', 'SixDOFSimulink');
simIn(sim_itr) = simIn(sim_itr).setVariable('phi0', phi0, 'workspace', 'SixDOFSimunlink');
simIn(sim_itr) = simIn(sim_itr).setVariable('q_e2b0', q_e2b0, 'workspace', 'SixDOFSimunlink');
simIn(sim_itr) = simIn(sim_itr).setVariable('v_b0', v_b0, 'workspace', 'SixDOFSimunlink');
simIn(sim_itr) = simIn(sim_itr).setVariable('pos0', pos0, 'workspace', 'SixDOFSimunlink');
simIn(sim_itr) = simIn(sim_itr).setVariable('w0', w0, 'workspace', 'SixDOFSimunlink');
sim_itr = sim_itr+1;
end
end
out = parsim(simIn, 'ShowProgress', 'on');
delete(gcp('nocreate'))
2 Kommentare
Paul
am 11 Nov. 2024 um 22:28
Is the variable q_e2b_0 as specified prior to the simIn assignments, or is it q_e2b0 (w/o the second underbar) as in the third simIn assignment, (both for the variable name and the value)?
Antworten (1)
Paul
am 12 Nov. 2024 um 0:03
It sounds like q_e2b0 is supposed to be a base workspace variable that's not really a variable that's used in the simulation, like as a block parameter. Maybe q_e2b0 is used in an InitFcn callback or something similar (I'm only assuming that variables used an InitFcn don't get applied via setVariable).
Anyway, the TransferBaseWorkspaceVariables is a name/value directive in the parsim command, though the linked doc page suggests there might be better alternatives. And, of course, make sure the variable with the correct name is defined in the base workspace to be transferred.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Simulink Functions finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!