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

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

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

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

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

Ts = 0.01;

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

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

open_system(fullfile(matlabroot,'toolbox','slrealtime','examples','slrt_ex_mds_subsystem1'));

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

open_system(fullfile(matlabroot,'toolbox','slrealtime','examples','slrt_ex_mds_subsystem2'));
%

Откройте модель slrt_ex_mds_and_tasks. Модель сопоставлена с семью потоками: 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='slrt_ex_mds_and_tasks';
open_system(fullfile(matlabroot,'toolbox','slrealtime','examples',mdl));

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

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

set_param(mdl,'RTWVerbose','off');
rtwbuild(mdl);
tg = slrealtime;
load(tg,mdl);
% Open TET Monitor
slrtTETMonitor;
% Start profiler on the target computer
startProfiler(tg);
start(tg);
pause(2);
stop(tg);
### Starting serial model reference simulation build
### Starting serial model reference code generation build
### Successful completion of build procedure for: slrt_ex_mds_subsystem1
### Successful completion of build procedure for: slrt_ex_mds_subsystem2
### Successful completion of build procedure for: slrt_ex_mds_and_tasks
Unable to find symbol(s) 'slrt_ex_mds_and_tasks_DW.Model1_InstanceData.rtb.RateTransition_Buf0, slrt_ex_mds_and_tasks_DW.Model1_InstanceData.rtb.RateTransition_Buf1, slrt_ex_mds_and_tasks_DW.Model1_InstanceData.rtb.RateTransition_Buf2, slrt_ex_mds_and_tasks_DW.Model1_InstanceData.rtb.RateTransition_LstBufWR, slrt_ex_mds_and_tasks_DW.Model1_InstanceData.rtb.RateTransition_RDBuf' in symbol table of ELF file: 'C:\Users\dskolnic\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\dskolnic.Bdoc20b.j1420932\slrealtime-ex84556294\slrt_ex_mds_and_tasks_slrealtime_rtw\slrt_ex_mds_and_tasks'
### Created MLDATX ..\slrt_ex_mds_and_tasks.mldatx

Build Summary

Code generation targets built:

Model                   Action                       Rebuild Reason                              
=================================================================================================
slrt_ex_mds_subsystem1  Code generated and compiled  slrt_ex_mds_subsystem1.cpp does not exist.  
slrt_ex_mds_subsystem2  Code generated and compiled  slrt_ex_mds_subsystem2.cpp does not exist.  

Top model targets built:

Model                  Action                       Rebuild Reason                                    
======================================================================================================
slrt_ex_mds_and_tasks  Code generated and compiled  Code generation information file does not exist.  

3 of 3 models built (0 models already up to date)
Build duration: 0h 1m 22.867s

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

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

profData = tg.getProfilerData;
profData.plot;
Processing data on target computer ...
Transferring data from target computer ...
Processing data on host computer ...
 

Просмотрите информацию модели TET о мониторе TET

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

bdclose('all');