Если вам нужно запустить модель из пользовательского интерфейса Simulink, вам нужно написать собственный блок, который приостановит модель, сохранит состояние simstate и затем перезапустит симуляцию через определенные промежутки времени.Но более простым подходом было бы запустить модель из командной строки, выполнив что-то вроде следующего:
% Define stop times and preallocate a cell array to save the simstates
stop_times = 1:10; % one second intervals upto 10 seconds
sim_states = cell(1,numel(stop_times));
% Run the model in a loop, saving the simstate at the required times
for tdx = 1:numel(stop_times)
if tdx == 1
% First simulation
sim_out = sim('mdl_name', 'StopTime', num2str(stop_times(tdx)), 'SaveFinalState', 'on', ...
'LoadInitialState', 'off', 'SaveCompleteFinalSimState', 'on',...
'FinalStateName', 'final_simstate');
else
% subsequent simulations
assignin('base', 'new_simstate', sim_states{tdx-1});
sim_out = sim('mdl_name', 'StartTime', num2str(stop_times(tdx-1)),...
'StopTime', num2str(stop_times(idx)), 'SaveFinalState', 'on', ...
'LoadInitialState', 'on','InitialState', 'new_simstate',...
'SaveCompleteFinalSimState', 'on',...
'FinalStateName', 'final_simstate');
end
% store the simstate
sim_states{tdx} = sim_out.get('final_simstate');
end
В приведенном выше коде предполагается, что переменные загружаются из рабочего пространства Base
, но их можно легко изменить, чтобы получитьэто из рабочей области модели или рабочей области функции.