Параллельное выполнение на Simulink® Real-Time™

В этом примере показано, как применить явное разделение, чтобы улучшить параллельное выполнение приложения реального времени, которое вы генерируете при помощи Simulink Real-Time.

Simulink Real-Time поддерживает параллельное выполнение при помощи неявного разделения или явного разделения моделей. Для явного разделения пользователи Simulink Real-Time делят модель корневого уровня при помощи моделей, на которые ссылаются, Подсистем Simulink или других опций, которые поддерживает Simulink. Для получения дополнительной информации о разделении модели для параллельного выполнения, см.:

Этот пример показывает отношение между явным разделением задач в подсистемах модели и выполнением задач при помощи инструмента профилирования Simulink Real-Time.

Модель dxpcmds6t в качестве примера запуски на уровне частоты дискретизации 0,001 секунд.

Чтобы запустить модель с настроенной частотой дискретизации 0,01 секунд, измените выборку, оцененную прежде, чем запустить пример. В Командном Окне MATLAB введите:

Ts = 0.01;

Открытый, сборка и загрузка модель

Откройте модель dxpcmds6t. Модель сопоставлена с семью потоками: Model1_R1, Model1_R2, Model1_R3, Model1_R4, Model2_R1, Model2_R3, и Model2_R4.

Эти потоки, запущенные на уровне частот дискретизации Ts, 2*Ts, 3*Ts, 4*Ts, Ts, 3*Ts, и 4*Ts.

mdl='dxpcmds6t';
open_system(fullfile(matlabroot,'toolbox','rtw','targets','xpc','xpcdemos',mdl));

Явное разделение в модели верхнего уровня происходит в подсистемах System1 и System2.

open_system([mdl,'/System1']);

open_system([mdl,'/System2']);

Чтобы применить явное разделение, в Редакторе Simulink, на вкладке Real-Time, нажимают Hardware Settings, и затем выбирают Solver> Configure Tasks. Выберите Tasks and Mapping узел.

Создайте, загрузите и запустите модель.

set_param(mdl,'RTWVerbose','off');
rtwbuild(mdl);
tg = slrt('TargetPC1');
load(tg,mdl);
startProfiler(tg);
start(tg);
pause(2);
stop(tg);
### Starting Simulink Real-Time build procedure for model: dxpcmds6t
### Generated code for 'dxpcmds6t' is up to date because no structural, parameter or code replacement library changes were found.
### Successful completion of build procedure for model: dxpcmds6t
### Created MLDATX ..\dxpcmds6t.mldatx

Отобразите профильные данные

Профильные данные показывают время выполнения каждого потока на многожильном целевом компьютере

profData = tg.getProfilerData;
profData.plot;
Processing data, please wait ...
 

Закройте модель

bdclose('all');