В этом примере показано, как использовать Simulink® Real-Time™ с журналом SDI данных сигнала. Сигналы регистрируются во время выполнения модели. В конце запуска интерфейс SDI отображает сигнал. Этот пример показывает, как получить сигналы от интерфейса SDI при помощи командной строки.
Откройте модель xpcFileLogging. Эта модель генерирует 20 синусоид, каждый имеющий различную амплитуду.
Примечание: Осциллографы типа 'цель' ограничиваются 10 сигналами.
Откройте модель.
mdlOpen = 0; systems = find_system('type', 'block_diagram'); if all(~strcmp('xpcosc', systems)) mdlOpen = 1; open_system(fullfile(matlabroot,'toolbox','rtw','targets','xpc','xpcdemos','xpcFileLogging')); end

Создайте модель и загрузите на целевой компьютер
Сконфигурируйте для немногословной сборки.
Сборка и приложение загрузки.
set_param('xpcFileLogging','RTWVerbose','off'); rtwbuild('xpcFileLogging');
### Starting Simulink Real-Time build procedure for model: xpcFileLogging Warning: This model contains blocks that do not handle sample time changes at runtime. To avoid incorrect results, only change the sample time in the original model, then rebuild the model. ### Successful completion of build procedure for model: xpcFileLogging ### Created MLDATX ..\xpcFileLogging.mldatx ### Looking for target: TargetPC1 ### Download model onto target: TargetPC1
Закройте модель, если мы открыли ее.
if (mdlOpen) bdclose('xpcFileLogging'); end
Используя переменную объекта Simulink Real-Time, tg, запустите модель.
tg = slrt('TargetPC1'); load(tg,'xpcFileLogging'); start(tg); pause(5);
Получите экран целевого компьютера, который отображает синусоиды в двух целевых осциллографах.
tg.viewTargetScreen();

Ожидайте, пока запуск не завершен.
while strcmp(tg.Status, 'running') pause(0.05); end
Чтобы просмотреть нанесенные на график данные сигнала, откройте Инспектора Данных моделирования.
Simulink.sdi.view

Можно также получить данные сигнала из SDI и отобразить данные на графике при помощи этих команд.
Получите все запуски
Получите информацию запуска
runIds = Simulink.sdi.getAllRunIDs(); run = Simulink.sdi.getRun(runIds(end)); signals=run.SignalCount; array=1;
Получите сигнал.
Получите объекты сигнала.
Примите только значения Синуса.
for signalIndex=1:signals signalID = run.getSignalIDByIndex(signalIndex); signalObj = Simulink.sdi.getSignal(signalID); if(~isempty(strfind(signalObj.Name,'Sine'))) signalArray(:,array)=signalObj.Values(:,1).Data; timeValues=signalObj.Values(:,1).Time; array=array+1; end end
Постройте сигналы.
plot(timeValues,signalArray);
grid on;
xlabel('Time (sec)'); ylabel('Amplitude');